From 257bdcafe3d8253bb9a6ffbeb7123968ea74aafb Mon Sep 17 00:00:00 2001 From: Arun Raghavan Date: Sat, 18 Jun 2011 15:36:18 -0700 Subject: stream: Simplify passing of formats in extended API Passing a NULL-terminated array of pa_format_info pointers is a bit unwieldy for clients. Instead of this, let's pass in an array of pointers and the number of elements in the array. --- src/pulse/stream.c | 18 +++++++++--------- src/pulse/stream.h | 1 + 2 files changed, 10 insertions(+), 9 deletions(-) (limited to 'src/pulse') diff --git a/src/pulse/stream.c b/src/pulse/stream.c index 4c754b73..aeb897c2 100644 --- a/src/pulse/stream.c +++ b/src/pulse/stream.c @@ -86,14 +86,16 @@ static pa_stream *pa_stream_new_with_proplist_internal( const pa_sample_spec *ss, const pa_channel_map *map, pa_format_info * const *formats, + unsigned int n_formats, pa_proplist *p) { pa_stream *s; - int i; + unsigned int i; pa_assert(c); pa_assert(PA_REFCNT_VALUE(c) >= 1); - pa_assert((ss == NULL && map == NULL) || formats == NULL); + pa_assert((ss == NULL && map == NULL) || (formats == NULL && n_formats == 0)); + pa_assert(n_formats < PA_MAX_FORMATS); PA_CHECK_VALIDITY_RETURN_NULL(c, !pa_detect_fork(), PA_ERR_FORKED); PA_CHECK_VALIDITY_RETURN_NULL(c, name || (p && pa_proplist_contains(p, PA_PROP_MEDIA_NAME)), PA_ERR_INVALID); @@ -119,12 +121,9 @@ static pa_stream *pa_stream_new_with_proplist_internal( s->n_formats = 0; if (formats) { - for (i = 0; formats[i] && i < PA_MAX_FORMATS; i++) { - s->n_formats++; + s->n_formats = n_formats; + for (i = 0; i < n_formats; i++) s->req_formats[i] = pa_format_info_copy(formats[i]); - } - /* Make sure the input array was NULL-terminated */ - pa_assert(formats[i] == NULL); } /* We'll get the final negotiated format after connecting */ @@ -221,18 +220,19 @@ pa_stream *pa_stream_new_with_proplist( if (!map) PA_CHECK_VALIDITY_RETURN_NULL(c, map = pa_channel_map_init_auto(&tmap, ss->channels, PA_CHANNEL_MAP_DEFAULT), PA_ERR_INVALID); - return pa_stream_new_with_proplist_internal(c, name, ss, map, NULL, p); + return pa_stream_new_with_proplist_internal(c, name, ss, map, NULL, 0, p); } pa_stream *pa_stream_new_extended( pa_context *c, const char *name, pa_format_info * const *formats, + unsigned int n_formats, pa_proplist *p) { PA_CHECK_VALIDITY_RETURN_NULL(c, c->version >= 21, PA_ERR_NOTSUPPORTED); - return pa_stream_new_with_proplist_internal(c, name, NULL, NULL, formats, p); + return pa_stream_new_with_proplist_internal(c, name, NULL, NULL, formats, n_formats, p); } static void stream_unlink(pa_stream *s) { diff --git a/src/pulse/stream.h b/src/pulse/stream.h index b265fae6..010f968f 100644 --- a/src/pulse/stream.h +++ b/src/pulse/stream.h @@ -365,6 +365,7 @@ pa_stream *pa_stream_new_extended( pa_context *c /**< The context to create this stream in */, const char *name /**< A name for this stream */, pa_format_info * const * formats /**< The list of formats that can be provided */, + unsigned int n_formats /**< The number of formats being passed in */, pa_proplist *p /**< The initial property list */); /** Decrease the reference counter by one */ -- cgit