vlc | branch: master | Thomas Guillem <tho...@gllm.fr> | Wed Mar 21 11:10:28 2018 +0100| [872c6011e8e0c978cacf7494e5972ab4b963a6f0] | committer: Thomas Guillem
mmdevice: add a way to enable/disable passthrough Via the mmdevice-digital-output bool variable. This var is not in the config, it's inherited from the original mmdevice-passthrough config. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=872c6011e8e0c978cacf7494e5972ab4b963a6f0 --- modules/audio_output/mmdevice.c | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/modules/audio_output/mmdevice.c b/modules/audio_output/mmdevice.c index f2aa323eea..f2eebb9a54 100644 --- a/modules/audio_output/mmdevice.c +++ b/modules/audio_output/mmdevice.c @@ -1122,18 +1122,20 @@ static int Start(audio_output_t *aout, audio_sample_format_t *restrict fmt) const bool b_hdmi = AOUT_FMT_HDMI(fmt); if (b_spdif || b_hdmi) { - switch (var_InheritInteger(aout, "mmdevice-passthrough")) + if (!var_GetBool(aout, "mmdevice-digital-output")) + return -1; + + if (b_hdmi || fmt->i_format == VLC_CODEC_DTS) { - case MM_PASSTHROUGH_DISABLED: - return -1; - case MM_PASSTHROUGH_ENABLED: + const bool no_codec_hd = + var_InheritInteger(aout, "mmdevice-passthrough") == MM_PASSTHROUGH_ENABLED; + if (no_codec_hd) + { if (b_hdmi) return -1; - else if (fmt->i_format == VLC_CODEC_DTS) + else var_SetBool(aout, "dtshd", false ); - /* falltrough */ - case MM_PASSTHROUGH_ENABLED_HD: - break; + } } } @@ -1237,6 +1239,16 @@ static void Stop(audio_output_t *aout) sys->stream = NULL; } +static int DigitalOutCallback(vlc_object_t *obj, const char *varname, + vlc_value_t oldval, vlc_value_t newval, void *data) +{ + (void) varname; (void) oldval; (void) newval; (void) data; + audio_output_t *aout = (audio_output_t *)obj; + + aout_RestartRequest(aout, AOUT_RESTART_OUTPUT); + return 0; +} + static int Open(vlc_object_t *obj) { audio_output_t *aout = (audio_output_t *)obj; @@ -1314,6 +1326,14 @@ static int Open(vlc_object_t *obj) LeaveCriticalSection(&sys->lock); LeaveMTA(); /* Leave MTA after thread has entered MTA */ + int passthrough = var_InheritInteger(aout, "mmdevice-passthrough"); + + /* Inherit mmdevice-digital-output bool from mmdevice-passthrough */ + var_Create(aout, "mmdevice-digital-output", VLC_VAR_BOOL); + var_SetBool(aout, "mmdevice-digital-output", + passthrough != MM_PASSTHROUGH_DISABLED); + var_AddCallback (aout, "mmdevice-digital-output", DigitalOutCallback, NULL); + aout->start = Start; aout->stop = Stop; aout->time_get = TimeGet; @@ -1337,6 +1357,8 @@ static void Close(vlc_object_t *obj) audio_output_t *aout = (audio_output_t *)obj; aout_sys_t *sys = aout->sys; + var_DelCallback (aout, "mmdevice-digital-output", DigitalOutCallback, NULL); + EnterCriticalSection(&sys->lock); sys->requested_device = default_device; /* break out of MMSession() loop */ sys->it = NULL; /* break out of MMThread() loop */ _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits