static int select_configuration(struct a2dp_device *dev, struct a2dp_endpoint *endpoint, struct avdtp_remote_sep *rsep) { struct a2dp_preset *preset; struct avdtp_stream *stream; struct avdtp_service_capability *service; struct avdtp_media_codec_capability *codec; GSList *caps; int err; preset = select_preset(endpoint, rsep); if (!preset) { error("Unable to select codec preset"); return -EINVAL; } service = avdtp_service_cap_new(AVDTP_MEDIA_TRANSPORT, NULL, 0); caps = g_slist_append(NULL, service); codec = g_malloc0(sizeof(*codec) + preset->len); codec->media_type = AVDTP_MEDIA_TYPE_AUDIO; codec->media_codec_type = endpoint->codec; memcpy(codec->data, preset->data, preset->len); service = avdtp_service_cap_new(AVDTP_MEDIA_CODEC, codec, sizeof(*codec) + preset->len); caps = g_slist_append(caps, service); g_free(codec); err = avdtp_set_configuration(dev->session, rsep, endpoint->sep, caps, &stream); g_slist_free_full(caps, g_free); if (err < 0) { error("avdtp_set_configuration: %s", strerror(-err)); return err; } setup_add(dev, endpoint, preset, stream); return 0; }
static void apply_preset (GtkWidget *w, GtkTreeSelection *selection) { GtkTreeIter iter; GtkTreeModel *model; if (gtk_tree_selection_get_selected (selection, &model, &iter)) { gchar *preset; gtk_tree_model_get (model, &iter, PRESETS_LIST_COLUMN_FILENAME, &preset, -1); select_preset (preset); restore_values (); /* g_free (preset); */ g_free (selected_preset_filename); selected_preset_filename = preset; } }