[PATCH] introspect: Expose card profile available flag

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux