On Tue, Jul 23, 2013 at 4:38 AM, Tanu Kaskinen <tanu.kaskinen at linux.intel.com> wrote: > 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. > Ok, I'm adding that to the patch that implements the SetConfiguration() method. >> @@ -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(). > Ok. -- Jo?o Paulo Rechi Vita http://about.me/jprvita