On Fri, 2013-07-12 at 18:18 +0300, Luiz Augusto von Dentz wrote: > From: Luiz Augusto von Dentz <luiz.von.dentz at intel.com> > > Available flag can be used by clients to disable the selection of > profiles unavailable. > > Update protocol to 29 > --- > PROTOCOL | 9 +++++++++ > configure.ac | 2 +- > src/pulse/introspect.c | 33 ++++++++++++++++++--------------- > src/pulse/introspect.h | 1 + > src/pulsecore/protocol-native.c | 3 +++ > 5 files changed, 32 insertions(+), 16 deletions(-) > diff --git a/src/pulse/introspect.c b/src/pulse/introspect.c > index 334ffd9..32de8a6 100644 > --- a/src/pulse/introspect.c > +++ b/src/pulse/introspect.c > @@ -902,11 +898,15 @@ static void context_get_card_info_callback(pa_pdispatch *pd, uint32_t command, u > pa_tagstruct_gets(t, &i.profiles[j].description) < 0 || > pa_tagstruct_getu32(t, &i.profiles[j].n_sinks) < 0 || > pa_tagstruct_getu32(t, &i.profiles[j].n_sources) < 0 || > - pa_tagstruct_getu32(t, &i.profiles[j].priority) < 0) { > + pa_tagstruct_getu32(t, &i.profiles[j].priority) < 0) > + goto fail; > > - pa_context_fail(o->context, PA_ERR_PROTOCOL); > - card_info_free(&i); > - goto finish; > + i.profiles[j].available = 1; > + if (o->context->version >= 29) { > + uint32_t av; > + if (pa_tagstruct_getu32(t, &av) < 0) > + goto fail; > + i.ports[0][j].available = av; I presume this should be i.profiles[j].available = av; > } > } > > @@ -934,11 +934,8 @@ static void context_get_card_info_callback(pa_pdispatch *pd, uint32_t command, u > } > > if (o->context->version >= 26) { > - if (fill_card_port_info(o->context, t, &i) < 0) { > - pa_context_fail(o->context, PA_ERR_PROTOCOL); > - card_info_free(&i); > - goto finish; > - } > + if (fill_card_port_info(o->context, t, &i) < 0) > + goto fail; > } > > if (o->callback) { > @@ -958,6 +955,12 @@ static void context_get_card_info_callback(pa_pdispatch *pd, uint32_t command, u > finish: > pa_operation_done(o); > pa_operation_unref(o); > + return; > + > +fail: > + pa_context_fail(o->context, PA_ERR_PROTOCOL); > + card_info_free(&i); > + goto finish; > } > > pa_operation* pa_context_get_card_info_by_index(pa_context *c, uint32_t idx, pa_card_info_cb_t cb, void *userdata) { > diff --git a/src/pulse/introspect.h b/src/pulse/introspect.h > index a833471..23776bc 100644 > --- a/src/pulse/introspect.h > +++ b/src/pulse/introspect.h > @@ -452,6 +452,7 @@ typedef struct pa_card_profile_info { > uint32_t n_sinks; /**< Number of sinks this profile would create */ > uint32_t n_sources; /**< Number of sources this profile would create */ > uint32_t priority; /**< The higher this value is, the more useful this profile is as a default. */ > + int available; /**< A flags indicating availability status of this profile. \since 5.0 */ I would like more elaborate documentation. A suggestion: int available; /**< Is this profile available? If this is zero, meaning "unavailable", * then it makes no sense to try to activate this profile. If this is * non-zero, it's still not a guarantee that activating the profile will * result in anything useful, it just means that the server isn't aware of * any reason why the profile would definitely be useless. \since 5.0 */ -- Tanu