[pulseaudio-discuss] [PATCH 5/6] alsa: create ucm profiles
Margarita Olaya
magi at slimlogic.co.uk
Thu Apr 7 07:37:06 PDT 2011
Hi David,
On Wed, Apr 6, 2011 at 1:41 AM, David Henningsson
<david.henningsson at canonical.com> wrote:
> On 2011-04-05 22:34, Margarita Olaya wrote:
>>
>> +static pa_hook_result_t jack_insert_new_hook_callback(pa_core *c,
>> struct userdata *u) {
>> + struct pa_alsa_ucm_config *ucm =&u->ucm;
>> + struct profile_data *d;
>> + char *device_name;
>> +
>> + pa_assert(u);
>> +
>> + d = PA_CARD_PROFILE_DATA(u->card->active_profile);
>> +
>> + pa_log_debug("Jack insert new hook callback");
>> +
>> + device_name = strchr(d->profile->name, ':') + 2;
>> + if (!device_name) {
>> + pa_log("no device found for %s", d->profile->name);
>> + return PA_HOOK_CANCEL;
>> + }
>> +
>> + if (strcmp(device_name, "Headset.0") == 0)
>> + return PA_HOOK_OK;
>> +
>> + /* Set headset.0 device per default */
>> + if (snd_use_case_set(ucm->ucm_mgr, "_enadev", "Headset.0")< 0) {
>> + pa_log("failed to set device Headset.0");
>> + return PA_HOOK_CANCEL;
>> + }
>> +
>> + return PA_HOOK_OK;
>> +}
>
> About this function:
>
> 1) pa_hook_cb_t defines three pointers as input, but this one only takes
> two. Is that really working on all platforms?
>
This is a mistake in this version, It is fixed now.
> 2) There is no matching against what card sent the event, is that irrelevant
> for UCM?
>
The UCM data is store per sound, I'm looking into a way of passing the
card name to the hook and compare it with the one passed in the
userdata.
> 3) Is "Headset.0" a reserved identifier in UCM, or is this unfinished test
> code? What if there isn't a headset, just a separate external mic, or
> external speakers connected to line out?
>
It depends on the driver to report here what was inserted or removed.
>> +
>> +static pa_hook_result_t jack_remove_new_hook_callback(pa_core *c,
>> struct userdata *u) {
>> + struct profile_data *d;
>> + struct pa_alsa_ucm_config *ucm =&u->ucm;
>> + char *device_name;
>> +
>> + pa_assert(u);
>> +
>> + d = PA_CARD_PROFILE_DATA(u->card->active_profile);
>> +
>> + pa_log_debug("Jack removed new hook callback");
>> +
>> + device_name = strchr(d->profile->name, ':') + 2;
>> + if(!device_name) {
>> + pa_log("no device found for %s", d->profile->name);
>> + return PA_HOOK_CANCEL;
>> + }
>> +
>> + /* Set current profile device */
>> + if (snd_use_case_set(ucm->ucm_mgr, "_enadev", "Headset.0")< 0) {
>> + pa_log("failed to set device Headset.0");
>> + return PA_HOOK_CANCEL;
>> + }
>> +
>> + return PA_HOOK_OK;
>> +}
>
> Ehm, seems like you set it to the Headset device both on plug and unplug...?
>
hmm, here we will switch to "device_name" gotten from the current
profile, in case of failure the device will be disabled.
I will post the changes soon.
Regards,
Margarita
> --
> David Henningsson, Canonical Ltd.
> http://launchpad.net/~diwic
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at mail.0pointer.de
> https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
>
More information about the pulseaudio-discuss
mailing list