[pulseaudio-discuss] [PATCH 47/56] bluetooth: Initialize profiles for BlueZ 5 cards
Tanu Kaskinen
tanu.kaskinen at linux.intel.com
Tue Jul 23 00:38:26 PDT 2013
On Fri, 2013-07-12 at 15:07 -0300, jprvita at gmail.com wrote:
> +/* Run from main thread */
> +static void transport_config(struct userdata *u) {
> + sbc_info_t *sbc_info = &u->sbc_info;
> + a2dp_sbc_t *config;
> +
> + pa_assert(u->transport);
> +
> + u->sample_spec.format = PA_SAMPLE_S16LE;
> + config = (a2dp_sbc_t *) u->transport->config;
> +
> + if (sbc_info->sbc_initialized)
> + sbc_reinit(&sbc_info->sbc, 0);
> + else
> + sbc_init(&sbc_info->sbc, 0);
> + sbc_info->sbc_initialized = true;
> +
> + switch (config->frequency) {
> + case SBC_SAMPLING_FREQ_16000:
> + sbc_info->sbc.frequency = SBC_FREQ_16000;
> + u->sample_spec.rate = 16000U;
> + break;
> + case SBC_SAMPLING_FREQ_32000:
> + sbc_info->sbc.frequency = SBC_FREQ_32000;
> + u->sample_spec.rate = 32000U;
> + break;
> + case SBC_SAMPLING_FREQ_44100:
> + sbc_info->sbc.frequency = SBC_FREQ_44100;
> + u->sample_spec.rate = 44100U;
> + break;
> + case SBC_SAMPLING_FREQ_48000:
> + sbc_info->sbc.frequency = SBC_FREQ_48000;
> + u->sample_spec.rate = 48000U;
> + break;
> + default:
> + pa_assert_not_reached();
> + }
If broken config is handled with assertions (which I totally agree is a
good way to do it), then the config definitely must be checked at the
time it's received.
> @@ -517,6 +722,8 @@ void pa__done(pa_module *m) {
> if (u->device_connection_changed_slot)
> pa_hook_slot_free(u->device_connection_changed_slot);
>
> + sbc_finish(&u->sbc_info.sbc);
This should be done only if sbc_initialized is true. The code may work
just fine, since the sbc struct is initialized to all zero when userdata
is allocated, but that's relying on undocumented internal details of
sbc_finish().
--
Tanu
More information about the pulseaudio-discuss
mailing list