aboutsummaryrefslogtreecommitdiffstats
path: root/main/vlc/sout-transcode-monosrc.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/vlc/sout-transcode-monosrc.patch')
-rw-r--r--main/vlc/sout-transcode-monosrc.patch120
1 files changed, 120 insertions, 0 deletions
diff --git a/main/vlc/sout-transcode-monosrc.patch b/main/vlc/sout-transcode-monosrc.patch
new file mode 100644
index 0000000000..9509b535e3
--- /dev/null
+++ b/main/vlc/sout-transcode-monosrc.patch
@@ -0,0 +1,120 @@
+From: Timo Teräs
+
+Posted upstream, see:
+https://trac.videolan.org/vlc/ticket/12122
+
+diff -ru vlc-2.1.5.orig/modules/audio_filter/channel_mixer/trivial.c vlc-2.1.5/modules/audio_filter/channel_mixer/trivial.c
+--- vlc-2.1.5.orig/modules/audio_filter/channel_mixer/trivial.c 2013-06-24 21:00:38.000000000 -0300
++++ vlc-2.1.5/modules/audio_filter/channel_mixer/trivial.c 2014-09-12 16:16:49.288413334 -0300
+@@ -133,7 +133,9 @@
+ {
+ p_src++;
+ }
+- if ( p_filter->fmt_out.audio.i_physical_channels == AOUT_CHAN_CENTER )
++ if ( p_filter->fmt_out.audio.i_physical_channels == AOUT_CHAN_CENTER ||
++ p_filter->fmt_out.audio.i_physical_channels == AOUT_CHAN_LEFT ||
++ p_filter->fmt_out.audio.i_physical_channels == AOUT_CHAN_RIGHT )
+ {
+ /* Mono mode */
+ for ( i = p_in_buf->i_nb_samples; i--; )
+diff -ru vlc-2.1.5.orig/modules/stream_out/transcode/audio.c vlc-2.1.5/modules/stream_out/transcode/audio.c
+--- vlc-2.1.5.orig/modules/stream_out/transcode/audio.c 2014-04-22 11:03:57.000000000 -0300
++++ vlc-2.1.5/modules/stream_out/transcode/audio.c 2014-09-12 16:28:50.805087137 -0300
+@@ -35,6 +35,11 @@
+ #include <vlc_meta.h>
+ #include <vlc_modules.h>
+
++static const int pi_mono_channel_maps[3] =
++{
++ AOUT_CHAN_CENTER, AOUT_CHAN_LEFT, AOUT_CHAN_RIGHT,
++};
++
+ static const int pi_channels_maps[6] =
+ {
+ 0,
+@@ -167,7 +172,11 @@
+ if( !id->p_encoder->fmt_in.audio.i_physical_channels
+ || !id->p_encoder->fmt_in.audio.i_original_channels )
+ {
+- if( id->p_encoder->fmt_in.audio.i_channels < 6 )
++ if (id->p_encoder->fmt_in.audio.i_channels == 1)
++ id->p_encoder->fmt_in.audio.i_physical_channels =
++ id->p_encoder->fmt_in.audio.i_original_channels =
++ pi_mono_channel_maps[p_sys->i_mono_source];
++ else if( id->p_encoder->fmt_in.audio.i_channels < 6 )
+ id->p_encoder->fmt_in.audio.i_physical_channels =
+ id->p_encoder->fmt_in.audio.i_original_channels =
+ pi_channels_maps[id->p_encoder->fmt_in.audio.i_channels];
+diff -ru vlc-2.1.5.orig/modules/stream_out/transcode/transcode.c vlc-2.1.5/modules/stream_out/transcode/transcode.c
+--- vlc-2.1.5.orig/modules/stream_out/transcode/transcode.c 2013-06-24 21:00:38.000000000 -0300
++++ vlc-2.1.5/modules/stream_out/transcode/transcode.c 2014-09-12 11:58:28.988259972 -0300
+@@ -99,6 +99,9 @@
+ #define ACHANS_TEXT N_("Audio channels")
+ #define ACHANS_LONGTEXT N_( \
+ "Number of audio channels in the transcoded streams." )
++#define AMONOSRC_TEXT N_("Audio source for mono")
++#define AMONOSRC_LONGTEXT N_( \
++ "Audio source channel for mono output (0=center, 1=left, 2=right)." )
+ #define AFILTER_TEXT N_("Audio filter")
+ #define AFILTER_LONGTEXT N_( \
+ "Audio filters will be applied to the audio streams (after conversion " \
+@@ -199,6 +202,8 @@
+ ALANG_LONGTEXT, true )
+ add_integer( SOUT_CFG_PREFIX "channels", 0, ACHANS_TEXT,
+ ACHANS_LONGTEXT, false )
++ add_integer( SOUT_CFG_PREFIX "monosrc", 0, AMONOSRC_TEXT,
++ AMONOSRC_LONGTEXT, false )
+ add_integer( SOUT_CFG_PREFIX "samplerate", 0, ARATE_TEXT,
+ ARATE_LONGTEXT, true )
+ add_bool( SOUT_CFG_PREFIX "audio-sync", false, ASYNC_TEXT,
+@@ -232,7 +237,7 @@
+ "venc", "vcodec", "vb",
+ "scale", "fps", "width", "height", "vfilter", "deinterlace",
+ "deinterlace-module", "threads", "hurry-up", "aenc", "acodec", "ab", "alang",
+- "afilter", "samplerate", "channels", "senc", "scodec", "soverlay",
++ "afilter", "samplerate", "channels", "monosrc", "senc", "scodec", "soverlay",
+ "sfilter", "osd", "audio-sync", "high-priority", "maxwidth", "maxheight",
+ NULL
+ };
+@@ -296,6 +301,8 @@
+
+ p_sys->i_channels = var_GetInteger( p_stream, SOUT_CFG_PREFIX "channels" );
+
++ p_sys->i_mono_source = var_GetInteger( p_stream, SOUT_CFG_PREFIX "monosrc" );
++
+ if( p_sys->i_acodec )
+ {
+ if( ( p_sys->i_acodec == VLC_CODEC_MP3 ||
+diff -ru vlc-2.1.5.orig/modules/stream_out/transcode/transcode.h vlc-2.1.5/modules/stream_out/transcode/transcode.h
+--- vlc-2.1.5.orig/modules/stream_out/transcode/transcode.h 2014-04-22 11:03:57.000000000 -0300
++++ vlc-2.1.5/modules/stream_out/transcode/transcode.h 2014-09-12 11:50:13.548255065 -0300
+@@ -31,6 +31,7 @@
+ config_chain_t *p_audio_cfg;
+ uint32_t i_sample_rate;
+ uint32_t i_channels;
++ uint32_t i_mono_source;
+ int i_abitrate;
+
+ char *psz_af;
+diff -ru vlc-2.1.5.orig/src/audio_output/common.c vlc-2.1.5/src/audio_output/common.c
+--- vlc-2.1.5.orig/src/audio_output/common.c 2013-12-03 11:12:35.000000000 -0200
++++ vlc-2.1.5/src/audio_output/common.c 2014-09-12 16:26:54.821752658 -0300
+@@ -107,13 +107,12 @@
+ case AOUT_CHAN_LEFT:
+ case AOUT_CHAN_RIGHT:
+ case AOUT_CHAN_CENTER:
+- if ( (p_format->i_original_channels & AOUT_CHAN_CENTER)
+- || (p_format->i_original_channels
+- & (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT)) )
+- return "Mono";
+- else if ( p_format->i_original_channels & AOUT_CHAN_LEFT )
++ if ( p_format->i_original_channels & AOUT_CHAN_LEFT )
+ return "Left";
+- return "Right";
++ else if ( p_format->i_original_channels & AOUT_CHAN_RIGHT )
++ return "Right";
++ return "Mono";
++
+ case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT:
+ if ( p_format->i_original_channels & AOUT_CHAN_REVERSESTEREO )
+ {