vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Sat Dec 8 09:48:11 2012 +0200| [d9cf7d2fbd21d3e29e1a88d4b285ff2a687eb629] | committer: Rémi Denis-Courmont
amem: defer set_volume() before setup() Before setup(), opaque is not defined. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d9cf7d2fbd21d3e29e1a88d4b285ff2a687eb629 --- modules/audio_output/amem.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/modules/audio_output/amem.c b/modules/audio_output/amem.c index f9ec83d..a60a0a7 100644 --- a/modules/audio_output/amem.c +++ b/modules/audio_output/amem.c @@ -77,6 +77,7 @@ struct aout_sys_t int (*set_volume) (void *opaque, float vol, bool mute); float volume; bool mute; + bool ready; }; static void Play (audio_output_t *aout, block_t *block) @@ -111,6 +112,8 @@ static int VolumeSet (audio_output_t *aout, float vol) aout_sys_t *sys = aout->sys; sys->volume = vol; + if (sys->ready) + return 0; /* sys->opaque is not yet defined... */ return sys->set_volume (sys->opaque, vol, sys->mute) ? -1 : 0; } @@ -119,6 +122,8 @@ static int MuteSet (audio_output_t *aout, bool mute) aout_sys_t *sys = aout->sys; sys->mute = mute; + if (!sys->ready) + return 0; /* sys->opaque is not yet defined... */ return sys->set_volume (sys->opaque, sys->volume, mute) ? -1 : 0; } @@ -163,6 +168,11 @@ static int Start (audio_output_t *aout, audio_sample_format_t *fmt) channels = sys->channels; } + /* Initialize volume (in case the UI changed volume before setup) */ + sys->ready = true; + if (sys->set_volume != NULL) + sys->set_volume(sys->opaque, sys->volume, sys->mute); + if (fmt->i_rate == 0 || fmt->i_rate > 192000 || channels == 0 || channels > AOUT_CHAN_MAX) return VLC_EGENERIC; @@ -219,6 +229,7 @@ static void Stop (audio_output_t *aout) if (sys->cleanup != NULL) sys->cleanup (sys->opaque); + sys->ready = false; } static int Open (vlc_object_t *obj) @@ -249,6 +260,7 @@ static int Open (vlc_object_t *obj) sys->set_volume = var_InheritAddress (obj, "amem-set-volume"); sys->volume = 1.; sys->mute = false; + sys->ready = false; if (sys->play == NULL) { free (sys); _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
