[vlc-commits] Don't use more aout channels than the stream actually has to avoid upmix.
Denis Charmet
git at videolan.org
Sun Sep 8 17:58:41 CEST 2013
vlc/vlc-2.1 | branch: master | Denis Charmet <typx at dinauz.org> | Sun Sep 8 17:54:54 2013 +0200| [1ca06700a5a1862dbec29231f5f1105b2837d8a6] | committer: Denis Charmet
Don't use more aout channels than the stream actually has to avoid upmix.
Fix #9342
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.1.git/?a=commit;h=1ca06700a5a1862dbec29231f5f1105b2837d8a6
---
modules/audio_output/directx.c | 37 +++++++++++++++++++++++++++++++------
1 file changed, 31 insertions(+), 6 deletions(-)
diff --git a/modules/audio_output/directx.c b/modules/audio_output/directx.c
index 1bb719b..ed21c5c 100644
--- a/modules/audio_output/directx.c
+++ b/modules/audio_output/directx.c
@@ -185,6 +185,8 @@ static int Start( audio_output_t *p_aout, audio_sample_format_t *restrict fmt )
if( i == 0 )
{
DWORD ui_speaker_config;
+ int i_channels = 2; /* Default to stereo */
+ int i_orig_channels = aout_FormatNbChannels( fmt );
/* Check the speaker configuration to determine which channel config
* should be the default */
@@ -194,7 +196,6 @@ static int Start( audio_output_t *p_aout, audio_sample_format_t *restrict fmt )
ui_speaker_config = DSSPEAKER_STEREO;
msg_Dbg( p_aout, "GetSpeakerConfig failed" );
}
- fmt->i_physical_channels = AOUT_CHANS_2_0;
const char *name = "Unknown";
switch( DSSPEAKER_CONFIG(ui_speaker_config) )
@@ -202,16 +203,16 @@ static int Start( audio_output_t *p_aout, audio_sample_format_t *restrict fmt )
case DSSPEAKER_7POINT1:
case DSSPEAKER_7POINT1_SURROUND:
name = "7.1";
- fmt->i_physical_channels = AOUT_CHANS_7_1;
+ i_channels = 8;
break;
case DSSPEAKER_5POINT1:
case DSSPEAKER_5POINT1_SURROUND:
name = "5.1";
- fmt->i_physical_channels = AOUT_CHANS_5_1;
+ i_channels = 6;
break;
case DSSPEAKER_QUAD:
name = "Quad";
- fmt->i_physical_channels = AOUT_CHANS_4_0;
+ i_channels = 4;
break;
#if 0 /* Lots of people just get their settings wrong and complain that
* this is a problem with VLC so just don't ever set mono by default. */
@@ -220,14 +221,38 @@ static int Start( audio_output_t *p_aout, audio_sample_format_t *restrict fmt )
fmt->i_physical_channels = AOUT_CHAN_CENTER;
break;
#endif
- case DSSPEAKER_SURROUND: /* XXX: stereo, really? -- Courmisch */
+ case DSSPEAKER_SURROUND:
name = "Surround";
+ i_channels = 4;
break;
case DSSPEAKER_STEREO:
name = "Stereo";
+ i_channels = 2;
+ break;
+ }
+
+ i_channels = ( i_channels < i_orig_channels )? i_channels: i_orig_channels;
+
+ msg_Dbg( p_aout, "%s speaker config: %s and stream has %d channels, using %d channels",
+ "Windows", name, i_orig_channels, i_channels );
+
+ switch( i_channels )
+ {
+ case 8:
+ fmt->i_physical_channels = AOUT_CHANS_7_1;
+ break;
+ case 7:
+ case 6:
+ fmt->i_physical_channels = AOUT_CHANS_5_1;
+ break;
+ case 5:
+ case 4:
+ fmt->i_physical_channels = AOUT_CHANS_4_0;
+ break;
+ default:
+ fmt->i_physical_channels = AOUT_CHANS_2_0;
break;
}
- msg_Dbg( p_aout, "%s speaker config: %s", "Windows", name );
}
else
{ /* Overriden speaker configuration */
More information about the vlc-commits
mailing list