[vlc-commits] amem: defer set_volume() before setup()
Rémi Denis-Courmont
git at videolan.org
Sat Dec 8 08:56:45 CET 2012
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | 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);
More information about the vlc-commits
mailing list