コード例 #1
0
ファイル: a2dp.c プロジェクト: 0omega/platform_external_bluez
static struct a2dp_sep *a2dp_add_sep(DBusConnection *conn, uint8_t type,
					uint8_t codec)
{
	struct a2dp_sep *sep;
	GSList **l;
	sdp_record_t *(*create_record)(void);
	uint32_t *record_id;
	sdp_record_t *record;
	struct avdtp_sep_ind *ind;

	sep = g_new0(struct a2dp_sep, 1);

	ind = (codec == A2DP_CODEC_MPEG12) ? &mpeg_ind : &sbc_ind;
	sep->sep = avdtp_register_sep(type, AVDTP_MEDIA_TYPE_AUDIO, codec,
					ind, &cfm, sep);
	if (sep->sep == NULL) {
		g_free(sep);
		return NULL;
	}

	sep->codec = codec;
	sep->type = type;

	if (type == AVDTP_SEP_TYPE_SOURCE) {
		l = &sources;
		create_record = a2dp_source_record;
		record_id = &source_record_id;
	} else {
		l = &sinks;
		create_record = a2dp_sink_record;
		record_id = &sink_record_id;
	}

	if (*record_id != 0)
		goto add;

	record = create_record();
	if (!record) {
		error("Unable to allocate new service record");
		avdtp_unregister_sep(sep->sep);
		g_free(sep);
		return NULL;
	}

	if (add_record_to_server(BDADDR_ANY, record) < 0) {
		error("Unable to register A2DP service record");\
		sdp_record_free(record);
		avdtp_unregister_sep(sep->sep);
		g_free(sep);
		return NULL;
	}
	*record_id = record->handle;

add:
	*l = g_slist_append(*l, sep);

	return sep;
}
コード例 #2
0
ファイル: a2dp.c プロジェクト: tkymgr/semc-qsd8x50
static struct a2dp_sep *a2dp_add_sep(struct a2dp_server *server, uint8_t type,
                                     uint8_t codec, gboolean delay_reporting)
{
    struct a2dp_sep *sep;
    GSList **l;
    uint32_t *record_id;
    sdp_record_t *record;
    struct avdtp_sep_ind *ind;

    sep = g_new0(struct a2dp_sep, 1);

    ind = (codec == A2DP_CODEC_MPEG12) ? &mpeg_ind : &sbc_ind;
    sep->sep = avdtp_register_sep(&server->src, type,
                                  AVDTP_MEDIA_TYPE_AUDIO, codec,
                                  delay_reporting, ind, &cfm, sep);
    if (sep->sep == NULL) {
        g_free(sep);
        return NULL;
    }

    sep->codec = codec;
    sep->type = type;
    sep->delay_reporting = delay_reporting;

    if (type == AVDTP_SEP_TYPE_SOURCE) {
        l = &server->sources;
        record_id = &server->source_record_id;
    } else {
        l = &server->sinks;
        record_id = &server->sink_record_id;
    }

    if (*record_id != 0)
        goto add;

    record = a2dp_record(type, server->version);
    if (!record) {
        error("Unable to allocate new service record");
        avdtp_unregister_sep(sep->sep);
        g_free(sep);
        return NULL;
    }

    if (add_record_to_server(&server->src, record) < 0) {
        error("Unable to register A2DP service record");
        \
        sdp_record_free(record);
        avdtp_unregister_sep(sep->sep);
        g_free(sep);
        return NULL;
    }
    *record_id = record->handle;

add:
    *l = g_slist_append(*l, sep);

    return sep;
}
コード例 #3
0
ファイル: a2dp.c プロジェクト: BirdAndEarth/RPi
static void unregister_endpoint(void *data)
{
	struct a2dp_endpoint *endpoint = data;

	if (endpoint->sep)
		avdtp_unregister_sep(endpoint->sep);

	if (endpoint->caps)
		preset_free(endpoint->caps);

	g_slist_free_full(endpoint->presets, preset_free);

	g_free(endpoint);
}
コード例 #4
0
ファイル: a2dp.c プロジェクト: 0omega/platform_external_bluez
static void a2dp_unregister_sep(struct a2dp_sep *sep)
{
	avdtp_unregister_sep(sep->sep);
	g_free(sep);
}