void gf_sc_ar_add_src(GF_AudioRenderer *ar, GF_AudioInterface *source) { Bool recfg; if (!ar) return; /*lock mixer*/ gf_mixer_lock(ar->mixer, GF_TRUE); gf_mixer_add_input(ar->mixer, source); /*if changed reconfig*/ recfg = gf_mixer_reconfig(ar->mixer); if (!ar->need_reconfig) ar->need_reconfig = recfg; if (!gf_mixer_empty(ar->mixer) && ar->audio_out && ar->audio_out->Play) ar->audio_out->Play(ar->audio_out, 1); /*unlock mixer*/ gf_mixer_lock(ar->mixer, GF_FALSE); }
static Bool audiobuffer_get_config(GF_AudioInterface *aifc, Bool for_reconf) { AudioBufferStack *st = (AudioBufferStack *) gf_node_get_private( ((GF_AudioInput *) aifc->callback)->owner); if (gf_mixer_must_reconfig(st->am)) { if (gf_mixer_reconfig(st->am)) { if (st->buffer) gf_free(st->buffer); st->buffer = NULL; st->buffer_size = 0; } gf_mixer_get_config(st->am, &aifc->samplerate, &aifc->chan, &aifc->bps, &aifc->ch_cfg); st->is_init = (aifc->samplerate && aifc->chan && aifc->bps) ? 1 : 0; assert(st->is_init); if (!st->is_init) aifc->samplerate = aifc->chan = aifc->bps = aifc->ch_cfg = 0; /*this will force invalidation*/ return (for_reconf && st->is_init) ? 1 : 0; } return st->is_init; }