Browse Source

es: replace i_original_channels with i_chan_mode

Rename i_original_channels to i_chan_mode. For now, chan modes can be
DOLBYSTEREO or DUALMONO.

This new value, i_chan_mode, should only be set by demuxes/codecs/packetizers
if there is a special stereo mode to handle.
pull/58/head
Thomas Guillem 9 years ago
parent
commit
91f426996c
  1. 2
      include/vlc_aout.h
  2. 16
      include/vlc_es.h
  3. 1
      modules/access/alsa.c
  4. 1
      modules/access/linsys/linsys_hdsdi.c
  5. 1
      modules/access/linsys/linsys_sdi.c
  6. 3
      modules/access/pulse.c
  7. 5
      modules/access/qtsound.m
  8. 7
      modules/access/rtp/rtp.c
  9. 1
      modules/access/wasapi.c
  10. 8
      modules/audio_filter/channel_mixer/dolby.c
  11. 6
      modules/audio_filter/channel_mixer/headphone.c
  12. 4
      modules/audio_filter/channel_mixer/simple.c
  13. 3
      modules/audio_filter/channel_mixer/trivial.c
  14. 1
      modules/audio_output/alsa.c
  15. 1
      modules/audio_output/amem.c
  16. 7
      modules/audio_output/audiotrack.c
  17. 3
      modules/audio_output/coreaudio_common.c
  18. 2
      modules/audio_output/directsound.c
  19. 1
      modules/audio_output/oss.c
  20. 7
      modules/audio_output/pulse.c
  21. 2
      modules/audio_output/sndio.c
  22. 1
      modules/audio_output/wasapi.c
  23. 17
      modules/codec/a52.c
  24. 3
      modules/codec/adpcm.c
  25. 1
      modules/codec/aes3.c
  26. 9
      modules/codec/araw.c
  27. 12
      modules/codec/avcodec/audio.c
  28. 11
      modules/codec/dca.c
  29. 3
      modules/codec/dmo/dmo.c
  30. 10
      modules/codec/faad.c
  31. 6
      modules/codec/flac.c
  32. 4
      modules/codec/fluidsynth.c
  33. 6
      modules/codec/g711.c
  34. 1
      modules/codec/lpcm.c
  35. 1
      modules/codec/mad.c
  36. 1
      modules/codec/mft.c
  37. 13
      modules/codec/mpg123.c
  38. 1
      modules/codec/omxil/mediacodec.c
  39. 3
      modules/codec/omxil/omxil.c
  40. 3
      modules/codec/opus.c
  41. 4
      modules/codec/speex.c
  42. 3
      modules/codec/uleaddvaudio.c
  43. 1
      modules/codec/vorbis.c
  44. 5
      modules/codec/wmafixed/wma.c
  45. 3
      modules/demux/mkv/matroska_segment_parse.cpp
  46. 3
      modules/demux/mp4/essetup.c
  47. 3
      modules/demux/ogg.c
  48. 3
      modules/demux/wav.c
  49. 5
      modules/packetizer/a52.c
  50. 18
      modules/packetizer/a52.h
  51. 5
      modules/packetizer/dts.c
  52. 40
      modules/packetizer/dts_header.c
  53. 3
      modules/packetizer/dts_header.h
  54. 3
      modules/packetizer/flac.c
  55. 1
      modules/packetizer/mlp.c
  56. 1
      modules/packetizer/mpeg4audio.c
  57. 28
      modules/packetizer/mpegaudio.c
  58. 12
      modules/stream_out/transcode/audio.c
  59. 1
      src/audio_output/aout_internal.h
  60. 32
      src/audio_output/common.c
  61. 4
      src/audio_output/filters.c
  62. 6
      src/audio_output/output.c
  63. 13
      src/input/decoder.c
  64. 2
      src/misc/es_format.c

2
include/vlc_aout.h

@ -67,7 +67,7 @@
#define AOUT_FMTS_SIMILAR( p_first, p_second ) ( \
((p_first)->i_rate == (p_second)->i_rate) \
&& ((p_first)->i_physical_channels == (p_second)->i_physical_channels)\
&& ((p_first)->i_original_channels == (p_second)->i_original_channels) )
&& ((p_first)->i_chan_mode == (p_second)->i_chan_mode) )
#define AOUT_FMT_LINEAR( p_format ) \
(aout_BitsPerSample((p_format)->i_format) != 0)

16
include/vlc_es.h

@ -77,9 +77,10 @@ struct audio_format_t
* channels which are available in the buffer, and positions). */
uint16_t i_physical_channels;
/* Describes from which original channels, before downmixing, the
* buffer is derived. */
uint32_t i_original_channels;
/* Describes the chan mode, either set from the input
* (demux/codec/packetizer) or overridden by the user, used by audio
* filters. */
uint16_t i_chan_mode;
/* Optional - for A/52, SPDIF and DTS types : */
/* Bytes used by one compressed frame, depends on bitrate. */
@ -134,17 +135,16 @@ struct audio_format_t
#define AOUT_CHANS_5_0_MIDDLE (AOUT_CHANS_4_0_MIDDLE | AOUT_CHAN_CENTER)
#define AOUT_CHANS_6_1_MIDDLE (AOUT_CHANS_5_0_MIDDLE | AOUT_CHAN_REARCENTER | AOUT_CHAN_LFE)
/* Values available for original channels only */
#define AOUT_CHAN_DOLBYSTEREO 0x10000
#define AOUT_CHAN_DUALMONO 0x20000
#define AOUT_CHAN_PHYSMASK 0xFFFF
/* Maximum number of mapped channels (or the maximum of bits set in
* i_physical_channels) */
#define AOUT_CHAN_MAX 9
/* Maximum number of unmapped channels */
#define INPUT_CHAN_MAX 64
/* Values available for i_chan_mode only */
#define AOUT_CHANMODE_DUALMONO 0x1
#define AOUT_CHANMODE_DOLBYSTEREO 0x2
/**
* Picture orientation.
*/

1
modules/access/alsa.c

@ -433,7 +433,6 @@ static int Open (vlc_object_t *obj)
assert (param > 0);
assert (param < (sizeof (channel_maps) / sizeof (channel_maps[0])));
fmt.audio.i_channels = param;
fmt.audio.i_original_channels =
fmt.audio.i_physical_channels = channel_maps[param - 1];
param = var_InheritInteger (demux, "alsa-samplerate");

1
modules/access/linsys/linsys_hdsdi.c

@ -538,7 +538,6 @@ static int InitAudio( demux_t *p_demux )
es_format_Init( &fmt, AUDIO_ES, VLC_CODEC_S16L );
fmt.i_id = p_audio->i_id;
fmt.audio.i_channels = 2;
fmt.audio.i_original_channels =
fmt.audio.i_physical_channels = AOUT_CHANS_STEREO;
fmt.audio.i_rate = p_sys->i_sample_rate;
fmt.audio.i_bitspersample = 16;

1
modules/access/linsys/linsys_sdi.c

@ -847,7 +847,6 @@ static int InitAudio( demux_t *p_demux, sdi_audio_t *p_audio )
es_format_Init( &fmt, AUDIO_ES, VLC_CODEC_S16L );
fmt.i_id = p_audio->i_id;
fmt.audio.i_channels = 2;
fmt.audio.i_original_channels =
fmt.audio.i_physical_channels = AOUT_CHANS_STEREO;
fmt.audio.i_rate = p_audio->i_rate;
fmt.audio.i_bitspersample = 16;

3
modules/access/pulse.c

@ -341,8 +341,7 @@ static int Open(vlc_object_t *obj)
}
es_format_Init(&fmt, AUDIO_ES, format);
fmt.audio.i_physical_channels = fmt.audio.i_original_channels =
AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
fmt.audio.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
fmt.audio.i_channels = ss.channels;
fmt.audio.i_rate = pss->rate;
fmt.audio.i_bitspersample = aout_BitsPerSample(format);

5
modules/access/qtsound.m

@ -414,11 +414,6 @@ static int Open(vlc_object_t *p_this)
* buffer, and positions).
*/
audiofmt.audio.i_physical_channels = AOUT_CHAN_RIGHT | AOUT_CHAN_LEFT;
/*
* i_original_channels Describes from which original channels,
* before downmixing, the buffer is derived.
*/
audiofmt.audio.i_original_channels = AOUT_CHAN_RIGHT | AOUT_CHAN_LEFT;
/*
* Please note that it may be completely arbitrary - buffers are not
* obliged to contain a integral number of so-called "frames". It's

7
modules/access/rtp/rtp.c

@ -500,7 +500,6 @@ static void *pcmu_init (demux_t *demux)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_MULAW);
fmt.audio.i_rate = 8000;
fmt.audio.i_original_channels =
fmt.audio.i_physical_channels = AOUT_CHAN_CENTER;
return codec_init (demux, &fmt);
}
@ -514,7 +513,6 @@ static void *gsm_init (demux_t *demux)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_GSM);
fmt.audio.i_rate = 8000;
fmt.audio.i_original_channels =
fmt.audio.i_physical_channels = AOUT_CHAN_CENTER;
return codec_init (demux, &fmt);
}
@ -528,7 +526,6 @@ static void *pcma_init (demux_t *demux)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_ALAW);
fmt.audio.i_rate = 8000;
fmt.audio.i_original_channels =
fmt.audio.i_physical_channels = AOUT_CHAN_CENTER;
return codec_init (demux, &fmt);
}
@ -542,7 +539,6 @@ static void *l16s_init (demux_t *demux)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_S16B);
fmt.audio.i_rate = 44100;
fmt.audio.i_original_channels =
fmt.audio.i_physical_channels = AOUT_CHANS_STEREO;
return codec_init (demux, &fmt);
}
@ -553,7 +549,6 @@ static void *l16m_init (demux_t *demux)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_S16B);
fmt.audio.i_rate = 44100;
fmt.audio.i_original_channels =
fmt.audio.i_physical_channels = AOUT_CHAN_CENTER;
return codec_init (demux, &fmt);
}
@ -567,7 +562,6 @@ static void *qcelp_init (demux_t *demux)
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_QCELP);
fmt.audio.i_rate = 8000;
fmt.audio.i_original_channels =
fmt.audio.i_physical_channels = AOUT_CHAN_CENTER;
return codec_init (demux, &fmt);
}
@ -580,7 +574,6 @@ static void *mpa_init (demux_t *demux)
es_format_t fmt;
es_format_Init (&fmt, AUDIO_ES, VLC_CODEC_MPGA);
fmt.audio.i_original_channels =
fmt.audio.i_physical_channels = AOUT_CHANS_STEREO;
fmt.b_packetized = false;
return codec_init (demux, &fmt);

1
modules/access/wasapi.c

@ -143,7 +143,6 @@ static int vlc_FromWave(const WAVEFORMATEX *restrict wf,
if (wfe->dwChannelMask & SPEAKER_LOW_FREQUENCY)
fmt->i_physical_channels |= AOUT_CHAN_LFE;
fmt->i_original_channels = fmt->i_physical_channels;
assert(popcount(wfe->dwChannelMask) == wf->nChannels);
if (IsEqualIID(&wfe->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM))

8
modules/audio_filter/channel_mixer/dolby.c

@ -80,10 +80,10 @@ static int Create( vlc_object_t *p_this )
/* Validate audio filter format */
if ( p_filter->fmt_in.audio.i_physical_channels != (AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT)
|| ! ( p_filter->fmt_in.audio.i_original_channels & AOUT_CHAN_DOLBYSTEREO )
|| aout_FormatNbChannels( &p_filter->fmt_out.audio ) <= 2
|| ( p_filter->fmt_in.audio.i_original_channels & ~AOUT_CHAN_DOLBYSTEREO )
!= ( p_filter->fmt_out.audio.i_original_channels & ~AOUT_CHAN_DOLBYSTEREO ) )
|| ! ( p_filter->fmt_in.audio.i_chan_mode & AOUT_CHANMODE_DOLBYSTEREO )
|| p_filter->fmt_out.audio.i_channels <= 2
|| ( p_filter->fmt_in.audio.i_chan_mode & ~AOUT_CHANMODE_DOLBYSTEREO )
!= ( p_filter->fmt_out.audio.i_chan_mode & ~AOUT_CHANMODE_DOLBYSTEREO ) )
{
return VLC_EGENERIC;
}

6
modules/audio_filter/channel_mixer/headphone.c

@ -472,10 +472,10 @@ static int OpenFilter( vlc_object_t *p_this )
p_filter->fmt_in.audio.i_format = VLC_CODEC_FL32;
p_filter->fmt_out.audio.i_format = VLC_CODEC_FL32;
p_filter->fmt_out.audio.i_rate = p_filter->fmt_in.audio.i_rate;
p_filter->fmt_in.audio.i_original_channels =
p_filter->fmt_out.audio.i_original_channels;
p_filter->fmt_in.audio.i_chan_mode =
p_filter->fmt_out.audio.i_chan_mode;
if( p_filter->fmt_in.audio.i_physical_channels == AOUT_CHANS_STEREO
&& (p_filter->fmt_in.audio.i_original_channels & AOUT_CHAN_DOLBYSTEREO)
&& (p_filter->fmt_in.audio.i_chan_mode & AOUT_CHANMODE_DOLBYSTEREO)
&& !var_InheritBool( p_filter, "headphone-dolby" ) )
{
p_filter->fmt_in.audio.i_physical_channels = AOUT_CHANS_5_0;

4
modules/audio_filter/channel_mixer/simple.c

@ -283,9 +283,7 @@ static int OpenFilter( vlc_object_t *p_this )
uint32_t output = p_filter->fmt_out.audio.i_physical_channels;
/* Short circuit the common case of not remixing */
if( input == output
&& p_filter->fmt_in.audio.i_original_channels
== p_filter->fmt_out.audio.i_original_channels )
if( input == output )
return VLC_EGENERIC;
const bool b_input_6_1 = input == AOUT_CHANS_6_1_MIDDLE;

3
modules/audio_filter/channel_mixer/trivial.c

@ -193,8 +193,7 @@ static int Create( vlc_object_t *p_this )
|| infmt->i_rate != outfmt->i_rate
|| infmt->i_format != VLC_CODEC_FL32 )
return VLC_EGENERIC;
if( infmt->i_physical_channels == outfmt->i_physical_channels
&& infmt->i_original_channels == outfmt->i_original_channels )
if( infmt->i_physical_channels == outfmt->i_physical_channels )
return VLC_EGENERIC;
p_filter->p_sys = NULL;

1
modules/audio_output/alsa.c

@ -469,7 +469,6 @@ static int Start (audio_output_t *aout, audio_sample_format_t *restrict fmt)
sys->chans_to_reorder = SetupChannels (VLC_OBJECT(aout), pcm, &map,
sys->chans_table);
fmt->i_physical_channels = map;
fmt->i_original_channels = map;
channels = popcount (map);
}
else

1
modules/audio_output/amem.c

@ -231,7 +231,6 @@ static int Start (audio_output_t *aout, audio_sample_format_t *fmt)
}
fmt->i_format = VLC_CODEC_S16N;
fmt->i_original_channels = fmt->i_physical_channels;
return VLC_SUCCESS;
}

7
modules/audio_output/audiotrack.c

@ -990,7 +990,6 @@ StartPassthrough( JNIEnv *env, audio_output_t *p_aout )
return VLC_EGENERIC;
}
p_sys->fmt.i_frame_length = 1;
p_sys->fmt.i_original_channels = p_sys->fmt.i_physical_channels;
p_sys->fmt.i_channels = aout_FormatNbChannels( &p_sys->fmt );
p_sys->fmt.i_format = VLC_CODEC_SPDIFL;
}
@ -1013,8 +1012,7 @@ StartPassthrough( JNIEnv *env, audio_output_t *p_aout )
}
p_sys->fmt.i_bytes_per_frame = 4;
p_sys->fmt.i_frame_length = 1;
p_sys->fmt.i_physical_channels =
p_sys->fmt.i_original_channels = AOUT_CHANS_STEREO;
p_sys->fmt.i_physical_channels = AOUT_CHANS_STEREO;
p_sys->fmt.i_channels = 2;
p_sys->fmt.i_format = VLC_CODEC_SPDIFB;
}
@ -1094,7 +1092,6 @@ StartPCM( JNIEnv *env, audio_output_t *p_aout, unsigned i_max_channels )
else
p_sys->fmt.i_physical_channels = AOUT_CHANS_STEREO;
}
p_sys->fmt.i_original_channels = p_sys->fmt.i_physical_channels;
/* Try to create an AudioTrack with the most advanced channel and
* format configuration. If AudioTrack_Create fails, try again with a
@ -1162,8 +1159,6 @@ Start( audio_output_t *p_aout, audio_sample_format_t *restrict p_fmt )
aout_FormatPrint( p_aout, "VLC is looking for:", &p_sys->fmt );
p_sys->fmt.i_original_channels = p_sys->fmt.i_physical_channels;
if( AOUT_FMT_LINEAR( &p_sys->fmt ) )
i_ret = StartPCM( env, p_aout, i_max_channels );
else if( b_try_passthrough )

3
modules/audio_output/coreaudio_common.c

@ -324,7 +324,7 @@ MapOutputLayout(audio_output_t *p_aout, audio_sample_format_t *fmt,
{
/* Fill VLC physical_channels from output layout */
fmt->i_physical_channels = 0;
uint32_t i_original = fmt->i_original_channels & AOUT_CHAN_PHYSMASK;
uint32_t i_original = fmt->i_physical_channels;
AudioChannelLayout *reslayout = NULL;
if (outlayout == NULL)
@ -434,7 +434,6 @@ MapOutputLayout(audio_output_t *p_aout, audio_sample_format_t *fmt,
end:
free(reslayout);
fmt->i_original_channels = fmt->i_physical_channels;
aout_FormatPrepare(fmt);
msg_Dbg(p_aout, "selected %d physical channels for device output",

2
modules/audio_output/directsound.c

@ -788,8 +788,6 @@ static HRESULT Start( vlc_object_t *obj, aout_stream_sys_t *sys,
}
}
fmt.i_original_channels = fmt.i_physical_channels;
int ret = vlc_clone(&sys->eraser_thread, PlayedDataEraser, (void*) obj,
VLC_THREAD_PRIORITY_LOW);
if( unlikely( ret ) )

1
modules/audio_output/oss.c

@ -213,7 +213,6 @@ static int Start (audio_output_t *aout, audio_sample_format_t *restrict fmt)
else
{
fmt->i_rate = rate;
fmt->i_original_channels =
fmt->i_physical_channels = channels;
}
aout_FormatPrepare (fmt);

7
modules/audio_output/pulse.c

@ -719,7 +719,7 @@ static int Start(audio_output_t *aout, audio_sample_format_t *restrict fmt)
fmt->i_format = VLC_CODEC_SPDIFL;
fmt->i_bytes_per_frame = 4;
fmt->i_frame_length = 1;
fmt->i_physical_channels = fmt->i_original_channels = AOUT_CHANS_2_0;
fmt->i_physical_channels = AOUT_CHANS_2_0;
fmt->i_channels = 2;
encoding = PA_ENCODING_AC3_IEC61937;
ss.format = PA_SAMPLE_S16NE;
@ -728,7 +728,7 @@ static int Start(audio_output_t *aout, audio_sample_format_t *restrict fmt)
fmt->i_format = VLC_CODEC_SPDIFL;
fmt->i_bytes_per_frame = 4;
fmt->i_frame_length = 1;
fmt->i_physical_channels = fmt->i_original_channels = AOUT_CHANS_2_0;
fmt->i_physical_channels = AOUT_CHANS_2_0;
fmt->i_channels = 2;
encoding = PA_ENCODING_EAC3_IEC61937;
ss.format = PA_SAMPLE_S16NE;
@ -742,7 +742,7 @@ static int Start(audio_output_t *aout, audio_sample_format_t *restrict fmt)
fmt->i_format = VLC_CODEC_SPDIFL;
fmt->i_bytes_per_frame = 4;
fmt->i_frame_length = 1;
fmt->i_physical_channels = fmt->i_original_channels = AOUT_CHANS_2_0;
fmt->i_physical_channels = AOUT_CHANS_2_0;
fmt->i_channels = 2;
encoding = PA_ENCODING_DTS_IEC61937;
ss.format = PA_SAMPLE_S16NE;
@ -844,7 +844,6 @@ static int Start(audio_output_t *aout, audio_sample_format_t *restrict fmt)
}
if (fmt->i_physical_channels & AOUT_CHAN_LFE)
map.map[map.channels++] = PA_CHANNEL_POSITION_LFE;
fmt->i_original_channels = fmt->i_physical_channels;
static_assert(AOUT_CHAN_MAX == 9, "Missing channels");

2
modules/audio_output/sndio.c

@ -174,7 +174,7 @@ static int Start (audio_output_t *aout, audio_sample_format_t *restrict fmt)
goto error;
}
fmt->i_original_channels = fmt->i_physical_channels = chans;
fmt->i_physical_channels = chans;
aout_FormatPrepare (fmt);
aout->time_get = TimeGet;

1
modules/audio_output/wasapi.c

@ -428,7 +428,6 @@ static int vlc_FromWave(const WAVEFORMATEX *restrict wf,
else
return -1;
audio->i_original_channels = audio->i_physical_channels;
aout_FormatPrepare (audio);
if (wf->nChannels != audio->i_channels)

17
modules/codec/a52.c

@ -215,26 +215,24 @@ static int channels_vlc2a52( const audio_format_t *p_audio, int *p_flags )
switch ( p_audio->i_physical_channels & ~AOUT_CHAN_LFE )
{
case AOUT_CHAN_CENTER:
if ( (p_audio->i_original_channels & AOUT_CHAN_CENTER)
|| (p_audio->i_original_channels
if ( (p_audio->i_physical_channels & AOUT_CHAN_CENTER)
|| (p_audio->i_physical_channels
& (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT)) )
i_flags = A52_MONO;
else if ( p_audio->i_original_channels & AOUT_CHAN_LEFT )
else if ( p_audio->i_physical_channels & AOUT_CHAN_LEFT )
i_flags = A52_CHANNEL1;
else
i_flags = A52_CHANNEL2;
break;
case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT:
if ( p_audio->i_original_channels & AOUT_CHAN_DOLBYSTEREO )
if ( p_audio->i_chan_mode & AOUT_CHANMODE_DOLBYSTEREO )
i_flags = A52_DOLBY;
else if ( p_audio->i_original_channels == AOUT_CHAN_CENTER )
i_flags = A52_MONO;
else if ( p_audio->i_original_channels & AOUT_CHAN_DUALMONO )
else if ( p_audio->i_chan_mode & AOUT_CHANMODE_DUALMONO )
i_flags = A52_CHANNEL;
else if ( !(p_audio->i_original_channels & AOUT_CHAN_RIGHT) )
else if ( !(p_audio->i_physical_channels & AOUT_CHAN_RIGHT) )
i_flags = A52_CHANNEL1;
else if ( !(p_audio->i_original_channels & AOUT_CHAN_LEFT) )
else if ( !(p_audio->i_physical_channels & AOUT_CHAN_LEFT) )
i_flags = A52_CHANNEL2;
else
i_flags = A52_STEREO;
@ -281,7 +279,6 @@ static int Open( vlc_object_t *p_this )
if( p_dec->fmt_in.i_codec != VLC_CODEC_A52
|| p_dec->fmt_in.audio.i_rate == 0
|| p_dec->fmt_in.audio.i_physical_channels == 0
|| p_dec->fmt_in.audio.i_original_channels == 0
|| p_dec->fmt_in.audio.i_bytes_per_frame == 0
|| p_dec->fmt_in.audio.i_frame_length == 0 )
return VLC_EGENERIC;

3
modules/codec/adpcm.c

@ -278,8 +278,7 @@ static int OpenDecoder( vlc_object_t *p_this )
p_dec->fmt_out.i_codec = VLC_CODEC_S16N;
p_dec->fmt_out.audio.i_rate = p_dec->fmt_in.audio.i_rate;
p_dec->fmt_out.audio.i_channels = i_channels;
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels = pi_channels_maps[i_channels];
p_dec->fmt_out.audio.i_physical_channels = pi_channels_maps[i_channels];
date_Init( &p_sys->end_date, p_dec->fmt_out.audio.i_rate, 1 );
date_Set( &p_sys->end_date, 0 );

1
modules/codec/aes3.c

@ -393,7 +393,6 @@ static block_t * Parse( decoder_t *p_dec, int *pi_frame_length, int *pi_bits,
}
p_dec->fmt_out.audio.i_channels = i_channels;
p_dec->fmt_out.audio.i_original_channels = pi_original_channels[i_channels/2-1];
p_dec->fmt_out.audio.i_physical_channels = pi_original_channels[i_channels/2-1];
*pi_frame_length = (p_block->i_buffer - AES3_HEADER_LEN) / ( (4+i_bits) * i_channels / 8 );

9
modules/codec/araw.c

@ -284,19 +284,12 @@ static int DecoderOpen( vlc_object_t *p_this )
else
p_dec->fmt_out.audio.i_physical_channels =
pi_channels_maps[p_dec->fmt_in.audio.i_channels];
if( p_dec->fmt_in.audio.i_original_channels )
p_dec->fmt_out.audio.i_original_channels =
p_dec->fmt_in.audio.i_original_channels;
else
p_dec->fmt_out.audio.i_original_channels =
p_dec->fmt_out.audio.i_physical_channels;
}
else
{
/* Unknown channel map, let the aout/filters decide what to do */
p_dec->fmt_out.audio.i_channels = p_dec->fmt_in.audio.i_channels;
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels = 0;
p_dec->fmt_out.audio.i_physical_channels = 0;
}
aout_FormatPrepare( &p_dec->fmt_out.audio );

12
modules/codec/avcodec/audio.c

@ -258,6 +258,7 @@ int InitAudioDec( vlc_object_t *obj )
p_dec->fmt_out.audio.i_rate = p_dec->fmt_in.audio.i_rate;
if( p_dec->fmt_out.audio.i_rate )
date_Init( &p_sys->end_date, p_dec->fmt_out.audio.i_rate, 1 );
p_dec->fmt_out.audio.i_chan_mode = p_dec->fmt_in.audio.i_chan_mode;
p_dec->pf_decode = DecodeAudio;
p_dec->pf_flush = Flush;
@ -607,12 +608,11 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust )
if( i_channels_src != p_sys->p_context->channels && b_trust )
msg_Err( p_dec, "Channel layout not understood" );
bool dual_mono = false;
/* Detect special dual mono case */
if( i_channels_src == 2 && pi_order_src[0] == AOUT_CHAN_CENTER
&& pi_order_src[1] == AOUT_CHAN_CENTER )
{
dual_mono = true;
p_dec->fmt_out.audio.i_chan_mode |= AOUT_CHANMODE_DUALMONO;
pi_order_src[0] = AOUT_CHAN_LEFT;
pi_order_src[1] = AOUT_CHAN_RIGHT;
}
@ -625,16 +625,12 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust )
if( i_channels_dst != i_channels_src && b_trust )
msg_Warn( p_dec, "%d channels are dropped", i_channels_src - i_channels_dst );
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels = i_layout_dst;
if (dual_mono)
p_dec->fmt_out.audio.i_original_channels |= AOUT_CHAN_DUALMONO;
p_dec->fmt_out.audio.i_physical_channels = i_layout_dst;
}
else
{
msg_Warn( p_dec, "no channel layout found");
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels = 0;
p_dec->fmt_out.audio.i_physical_channels = 0;
p_dec->fmt_out.audio.i_channels = p_sys->p_context->channels;
}

11
modules/codec/dca.c

@ -198,18 +198,16 @@ static int channels_vlc2dca( const audio_format_t *p_audio, int *p_flags )
switch ( p_audio->i_physical_channels & ~AOUT_CHAN_LFE )
{
case AOUT_CHAN_CENTER:
if ( (p_audio->i_original_channels & AOUT_CHAN_CENTER)
|| (p_audio->i_original_channels
if ( (p_audio->i_physical_channels & AOUT_CHAN_CENTER)
|| (p_audio->i_physical_channels
& (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT)) )
i_flags = DCA_MONO;
break;
case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT:
if ( p_audio->i_original_channels & AOUT_CHAN_DOLBYSTEREO )
if ( p_audio->i_chan_mode & AOUT_CHANMODE_DOLBYSTEREO )
i_flags = DCA_DOLBY;
else if ( p_audio->i_original_channels == AOUT_CHAN_CENTER )
i_flags = DCA_MONO;
else if ( p_audio->i_original_channels & AOUT_CHAN_DUALMONO )
else if ( p_audio->i_chan_mode & AOUT_CHANMODE_DUALMONO )
i_flags = DCA_CHANNEL;
else
i_flags = DCA_STEREO;
@ -256,7 +254,6 @@ static int Open( vlc_object_t *p_this )
if( p_dec->fmt_in.i_codec != VLC_CODEC_DTS
|| p_dec->fmt_in.audio.i_rate == 0
|| p_dec->fmt_in.audio.i_physical_channels == 0
|| p_dec->fmt_in.audio.i_original_channels == 0
|| p_dec->fmt_in.audio.i_bytes_per_frame == 0
|| p_dec->fmt_in.audio.i_frame_length == 0 )
return VLC_EGENERIC;

3
modules/codec/dmo/dmo.c

@ -458,8 +458,7 @@ static int DecOpen( decoder_t *p_dec )
p_dec->fmt_out.audio.i_channels = p_dec->fmt_in.audio.i_channels;
p_dec->fmt_out.audio.i_bitspersample = 16;//p_dec->fmt_in.audio.i_bitspersample; We request 16
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels =
pi_channels_maps[p_dec->fmt_out.audio.i_channels];
pi_channels_maps[p_dec->fmt_out.audio.i_channels];
p_wf->wFormatTag = WAVE_FORMAT_PCM;
p_wf->nSamplesPerSec = p_dec->fmt_out.audio.i_rate;

10
modules/codec/faad.c

@ -149,21 +149,19 @@ static int Open( vlc_object_t *p_this )
p_dec->fmt_out.audio.i_rate = i_rate;
p_dec->fmt_out.audio.i_channels = i_channels;
p_dec->fmt_out.audio.i_physical_channels
= p_dec->fmt_out.audio.i_original_channels
= mpeg4_asc_channelsbyindex[i_channels];
date_Init( &p_sys->date, i_rate, 1 );
}
else
{
p_dec->fmt_out.audio.i_physical_channels
= p_dec->fmt_out.audio.i_original_channels
= 0;
p_dec->fmt_out.audio.i_physical_channels = 0;
/* Will be initalised from first frame */
p_dec->fmt_out.audio.i_rate = 0;
p_dec->fmt_out.audio.i_channels = 0;
}
p_dec->fmt_out.i_codec = HAVE_FPU ? VLC_CODEC_FL32 : VLC_CODEC_S16N;
p_dec->fmt_out.audio.i_chan_mode = p_dec->fmt_in.audio.i_chan_mode;
/* Set the faad config */
cfg = NeAACDecGetCurrentConfiguration( p_sys->hfaad );
@ -289,7 +287,6 @@ static int DecodeBlock( decoder_t *p_dec, block_t *p_block )
p_dec->fmt_out.audio.i_rate = i_rate;
p_dec->fmt_out.audio.i_channels = i_channels;
p_dec->fmt_out.audio.i_physical_channels
= p_dec->fmt_out.audio.i_original_channels
= mpeg4_asc_channelsbyindex[i_channels];
date_Init( &p_sys->date, i_rate, 1 );
@ -312,7 +309,6 @@ static int DecodeBlock( decoder_t *p_dec, block_t *p_block )
p_dec->fmt_out.audio.i_rate = i_rate;
p_dec->fmt_out.audio.i_channels = i_channels;
p_dec->fmt_out.audio.i_physical_channels
= p_dec->fmt_out.audio.i_original_channels
= mpeg4_asc_channelsbyindex[i_channels];
date_Init( &p_sys->date, i_rate, 1 );
}
@ -381,7 +377,6 @@ static int DecodeBlock( decoder_t *p_dec, block_t *p_block )
p_dec->fmt_out.audio.i_rate = i_rate;
p_dec->fmt_out.audio.i_channels = i_channels;
p_dec->fmt_out.audio.i_physical_channels
= p_dec->fmt_out.audio.i_original_channels
= mpeg4_asc_channelsbyindex[i_channels];
date_Init( &p_sys->date, i_rate, 1 );
}
@ -501,7 +496,6 @@ static int DecodeBlock( decoder_t *p_dec, block_t *p_block )
p_dec->fmt_out.audio.i_physical_channels, pi_neworder_table );
p_dec->fmt_out.audio.i_original_channels = p_dec->fmt_out.audio.i_physical_channels;
p_dec->fmt_out.audio.i_channels = popcount(p_dec->fmt_out.audio.i_physical_channels);
if( !decoder_UpdateAudioFormat( p_dec ) && p_dec->fmt_out.audio.i_channels > 0 )

6
modules/codec/flac.c

@ -209,8 +209,7 @@ static int DecoderSetOutputFormat( unsigned i_channels, unsigned i_rate,
fmt->i_channels = i_channels;
fmt->i_rate = (i_rate > 0 ) ? i_rate : i_streaminfo_rate;
fmt->i_physical_channels =
fmt->i_original_channels = pi_channels_maps[i_channels];
fmt->i_physical_channels = pi_channels_maps[i_channels];
memcpy( pi_channels_reorder, ppi_reorder[i_channels], i_channels );
fmt->i_bitspersample = i_bitspersample;
@ -373,8 +372,7 @@ static void DecoderMetadataCallback( const FLAC__StreamDecoder *decoder,
for( unsigned i=0; i<i_wfxchannels; i++ )
p_sys->rgi_channels_reorder[neworder[i]] = i;
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels = i_vlcmask;
p_dec->fmt_out.audio.i_physical_channels = i_vlcmask;
p_dec->fmt_out.audio.i_channels = i_wfxchannels;
}

4
modules/codec/fluidsynth.c

@ -171,9 +171,7 @@ static int Open (vlc_object_t *p_this)
var_InheritInteger (p_this, "synth-sample-rate");;
fluid_synth_set_sample_rate (p_sys->synth, p_dec->fmt_out.audio.i_rate);
p_dec->fmt_out.audio.i_channels = 2;
p_dec->fmt_out.audio.i_original_channels =
p_dec->fmt_out.audio.i_physical_channels =
AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
p_dec->fmt_out.audio.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
p_dec->fmt_out.i_codec = VLC_CODEC_FL32;
p_dec->fmt_out.audio.i_bitspersample = 32;
date_Init (&p_sys->end_date, p_dec->fmt_out.audio.i_rate, 1);

6
modules/codec/g711.c

@ -197,12 +197,6 @@ static int DecoderOpen( vlc_object_t *p_this )
else
p_dec->fmt_out.audio.i_physical_channels =
pi_channels_maps[p_dec->fmt_in.audio.i_channels];
if( p_dec->fmt_in.audio.i_original_channels )
p_dec->fmt_out.audio.i_original_channels =
p_dec->fmt_in.audio.i_original_channels;
else
p_dec->fmt_out.audio.i_original_channels =
p_dec->fmt_out.audio.i_physical_channels;
aout_FormatPrepare( &p_dec->fmt_out.audio );
p_sys->table = table;

1
modules/codec/lpcm.c

@ -413,7 +413,6 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block )
}
p_dec->fmt_out.audio.i_rate = i_rate;
p_dec->fmt_out.audio.i_channels = i_channels;
p_dec->fmt_out.audio.i_original_channels = i_original_channels;
p_dec->fmt_out.audio.i_physical_channels = i_original_channels;
if ( p_sys->i_type == LPCM_AOB )

1
modules/codec/mad.c

@ -249,7 +249,6 @@ static int Open( vlc_object_t *p_this )
&& p_dec->fmt_in.i_codec != VLC_FOURCC('m','p','g','3') )
|| p_dec->fmt_in.audio.i_rate == 0
|| p_dec->fmt_in.audio.i_physical_channels == 0
|| p_dec->fmt_in.audio.i_original_channels == 0
|| p_dec->fmt_in.audio.i_bytes_per_frame == 0
|| p_dec->fmt_in.audio.i_frame_length == 0 )
return VLC_EGENERIC;

1
modules/codec/mft.c

@ -445,7 +445,6 @@ static int SetOutputType(decoder_t *p_dec, DWORD stream_id, IMFMediaType **resul
p_dec->fmt_out.i_codec = vlc_fourcc_GetCodecAudio(fourcc, p_dec->fmt_out.audio.i_bitspersample);
p_dec->fmt_out.audio.i_physical_channels = pi_channels_maps[p_dec->fmt_out.audio.i_channels];
p_dec->fmt_out.audio.i_original_channels = p_dec->fmt_out.audio.i_physical_channels;
}
*result = output_media_type;

13
modules/codec/mpg123.c

@ -168,24 +168,21 @@ static int UpdateAudioFormat( decoder_t *p_dec )
switch( frame_info.mode )
{
case MPG123_M_DUAL:
p_dec->fmt_out.audio.i_chan_mode = AOUT_CHANMODE_DUALMONO;
/* fall through */
case MPG123_M_STEREO:
case MPG123_M_JOINT:
p_dec->fmt_out.audio.i_original_channels =
p_dec->fmt_out.audio.i_physical_channels =
AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
break;
case MPG123_M_DUAL:
p_dec->fmt_out.audio.i_original_channels =
AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_DUALMONO;
break;
case MPG123_M_MONO:
p_dec->fmt_out.audio.i_original_channels = AOUT_CHAN_CENTER;
p_dec->fmt_out.audio.i_physical_channels = AOUT_CHAN_CENTER;
break;
default:
return VLC_EGENERIC;
}
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels & AOUT_CHAN_PHYSMASK;
aout_FormatPrepare( &p_dec->fmt_out.audio );
/* Date management */

1
modules/codec/omxil/mediacodec.c

@ -1077,7 +1077,6 @@ static int Audio_ProcessOutput(decoder_t *p_dec, mc_api_out *p_out,
msg_Warn(p_dec, "need channel extraction: %d -> %d",
p_sys->audio.i_channels, i_channels_dst);
p_dec->fmt_out.audio.i_original_channels =
p_dec->fmt_out.audio.i_physical_channels = i_layout_dst;
aout_FormatPrepare(&p_dec->fmt_out.audio);

3
modules/codec/omxil/omxil.c

@ -717,8 +717,7 @@ static OMX_ERRORTYPE GetPortDefinition(decoder_t *p_dec, OmxPort *p_port,
| AOUT_CHAN_LFE
};
p_fmt->audio.i_physical_channels =
p_fmt->audio.i_original_channels =
pi_channels_maps[p_fmt->audio.i_channels];
pi_channels_maps[p_fmt->audio.i_channels];
}
date_Init( &p_dec->p_sys->end_date, p_fmt->audio.i_rate, 1 );

3
modules/codec/opus.c

@ -337,8 +337,7 @@ static int ProcessInitialHeader( decoder_t *p_dec, ogg_packet *p_oggpacket )
/* Setup the format */
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels =
pi_channels_maps[p_header->channels];
pi_channels_maps[p_header->channels];
p_dec->fmt_out.audio.i_channels = p_header->channels;
p_dec->fmt_out.audio.i_rate = 48000;

4
modules/codec/speex.c

@ -548,8 +548,7 @@ static int ProcessInitialHeader( decoder_t *p_dec, ogg_packet *p_oggpacket )
/* Setup the format */
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels =
pi_channels_maps[p_header->nb_channels];
pi_channels_maps[p_header->nb_channels];
p_dec->fmt_out.audio.i_channels = p_header->nb_channels;
p_dec->fmt_out.audio.i_rate = p_header->rate;
@ -718,7 +717,6 @@ static int DecodeRtpSpeexPacket( decoder_t *p_dec, block_t *p_speex_bit_block )
p_dec->fmt_out.audio.i_channels = p_sys->p_header->nb_channels;
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels =
pi_channels_maps[p_sys->p_header->nb_channels];
p_dec->fmt_out.audio.i_rate = p_sys->p_header->rate;

3
modules/codec/uleaddvaudio.c

@ -167,8 +167,7 @@ static int Open(vlc_object_t *object)
dec->fmt_out.i_codec = VLC_CODEC_S16N;
dec->fmt_out.audio.i_rate = dec->fmt_in.audio.i_rate;
dec->fmt_out.audio.i_channels = 2;
dec->fmt_out.audio.i_physical_channels =
dec->fmt_out.audio.i_original_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
dec->fmt_out.audio.i_physical_channels = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
dec->pf_decode = DecodeAudio;
dec->pf_flush = Flush;

1
modules/codec/vorbis.c

@ -390,7 +390,6 @@ static int ProcessHeaders( decoder_t *p_dec )
}
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels =
pi_channels_maps[p_sys->vi.channels];
p_dec->fmt_out.i_bitrate = __MAX( 0, (int32_t) p_sys->vi.bitrate_nominal );

5
modules/codec/wmafixed/wma.c

@ -148,9 +148,8 @@ static int OpenDecoder( vlc_object_t *p_this )
assert( p_dec->fmt_out.audio.i_channels <
( sizeof( pi_channels_maps ) / sizeof( pi_channels_maps[0] ) ) );
p_dec->fmt_out.audio.i_original_channels =
p_dec->fmt_out.audio.i_physical_channels =
pi_channels_maps[p_dec->fmt_out.audio.i_channels];
p_dec->fmt_out.audio.i_physical_channels =
pi_channels_maps[p_dec->fmt_out.audio.i_channels];
/* aout core assumes this number is not 0 and uses it in divisions */
assert( p_dec->fmt_out.audio.i_physical_channels != 0 );

3
modules/demux/mkv/matroska_segment_parse.cpp

@ -1512,8 +1512,7 @@ int32_t matroska_segment_c::TrackInit( mkv_track_t * p_tk )
i_channel_mask,
p_tk->pi_chan_table );
p_tk->fmt.audio.i_physical_channels =
p_tk->fmt.audio.i_original_channels = i_channel_mask;
p_tk->fmt.audio.i_physical_channels = i_channel_mask;
}
}
}

3
modules/demux/mp4/essetup.c

@ -1105,8 +1105,7 @@ int SetupAudioES( demux_t *p_demux, mp4_track_t *p_track, MP4_Box_t *p_sample )
{
p_track->b_chans_reorder = true;
p_track->fmt.audio.i_channels = i_channels;
p_track->fmt.audio.i_physical_channels =
p_track->fmt.audio.i_original_channels = i_vlc_mapping;
p_track->fmt.audio.i_physical_channels = i_vlc_mapping;
}
}

3
modules/demux/ogg.c

@ -189,8 +189,7 @@ static void fill_channels_info(audio_format_t *audio)
unsigned chans = audio->i_channels;
if (chans < sizeof(pi_channels_map) / sizeof(pi_channels_map[0]))
audio->i_physical_channels =
audio->i_original_channels = pi_channels_map[chans];
audio->i_physical_channels = pi_channels_map[chans];
}
/* Special TS value: don't send or derive any pts/pcr from it.

3
modules/demux/wav.c

@ -310,8 +310,7 @@ static int Open( vlc_object_t * p_this )
p_sys->i_channel_mask, p_sys->i_chans_to_reorder );
}
p_sys->fmt.audio.i_physical_channels =
p_sys->fmt.audio.i_original_channels = p_sys->i_channel_mask;
p_sys->fmt.audio.i_physical_channels = p_sys->i_channel_mask;
if( p_sys->fmt.i_extra > 0 )
{

5
modules/packetizer/a52.c

@ -103,9 +103,8 @@ static block_t *GetOutBuffer( decoder_t *p_dec )
p_dec->fmt_out.audio.i_bytes_per_frame = p_sys->frame.i_size;
p_dec->fmt_out.audio.i_frame_length = p_sys->frame.i_samples;
p_dec->fmt_out.audio.i_original_channels = p_sys->frame.i_channels_conf;
p_dec->fmt_out.audio.i_physical_channels =
p_sys->frame.i_channels_conf & AOUT_CHAN_PHYSMASK;
p_dec->fmt_out.audio.i_chan_mode = p_sys->frame.i_chan_mode;
p_dec->fmt_out.audio.i_physical_channels = p_sys->frame.i_channels_conf;
p_dec->fmt_out.i_bitrate = p_sys->frame.i_bitrate;

18
modules/packetizer/a52.h

@ -44,6 +44,7 @@ typedef struct
unsigned int i_channels;
unsigned int i_channels_conf;
unsigned int i_chan_mode;
unsigned int i_rate;
unsigned int i_bitrate;
@ -153,13 +154,16 @@ static inline int vlc_a52_header_ParseAc3( vlc_a52_header_t *p_header,
const uint8_t i_lfeon = bs_read( &s, 1 );
p_header->i_channels_conf = p_acmod[i_acmod];
p_header->i_chan_mode = 0;
if( i_dsurmod == 2 )
p_header->i_channels_conf |= AOUT_CHAN_DOLBYSTEREO;
p_header->i_chan_mode |= AOUT_CHANMODE_DOLBYSTEREO;
if( i_acmod == 0 )
p_header->i_chan_mode |= AOUT_CHANMODE_DUALMONO;
if( i_lfeon )
p_header->i_channels_conf |= AOUT_CHAN_LFE;
p_header->i_channels = popcount(p_header->i_channels_conf
& AOUT_CHAN_PHYSMASK);
p_header->i_channels = popcount(p_header->i_channels_conf);
const unsigned i_rate_shift = VLC_CLIP(i_bsid, 8, 11) - 8;
p_header->i_bitrate = (pi_frmsizcod_bitrates[i_frmsizcod >> 1] * 1000)
@ -214,10 +218,12 @@ static inline int vlc_a52_header_ParseEac3( vlc_a52_header_t *p_header,
const unsigned i_lfeon = bs_read1( &s );
p_header->i_channels_conf = p_acmod[i_acmod];
p_header->i_chan_mode = 0;
if( i_acmod == 0 )
p_header->i_chan_mode |= AOUT_CHANMODE_DUALMONO;
if( i_lfeon )
p_header->i_channels_conf |= AOUT_CHAN_LFE;
p_header->i_channels = popcount( p_header->i_channels_conf
& AOUT_CHAN_PHYSMASK );
p_header->i_channels = popcount( p_header->i_channels_conf );
p_header->i_bitrate = 8 * p_header->i_size * p_header->i_rate
/ (p_header->i_blocks_per_sync_frame * 256);
p_header->i_samples = p_header->i_blocks_per_sync_frame * 256;
@ -236,7 +242,7 @@ static inline int vlc_a52_header_Parse( vlc_a52_header_t *p_header,
const uint8_t *p_buffer, int i_buffer )
{
static const uint32_t p_acmod[8] = {
AOUT_CHANS_2_0 | AOUT_CHAN_DUALMONO,
AOUT_CHANS_2_0,
AOUT_CHAN_CENTER,
AOUT_CHANS_2_0,
AOUT_CHANS_3_0,

5
modules/packetizer/dts.c

@ -102,9 +102,8 @@ static block_t *GetOutBuffer( decoder_t *p_dec )
p_dec->fmt_out.audio.i_bytes_per_frame = p_sys->dts.i_frame_size;
p_dec->fmt_out.audio.i_frame_length = p_sys->dts.i_frame_length;
p_dec->fmt_out.audio.i_original_channels = p_sys->dts.i_original_channels;
p_dec->fmt_out.audio.i_physical_channels =
p_sys->dts.i_original_channels & AOUT_CHAN_PHYSMASK;
p_dec->fmt_out.audio.i_chan_mode = p_sys->dts.i_chan_mode;
p_dec->fmt_out.audio.i_physical_channels = p_sys->dts.i_physical_channels;
p_dec->fmt_out.audio.i_channels =
popcount( p_dec->fmt_out.audio.i_physical_channels );

40
modules/packetizer/dts_header.c

@ -162,7 +162,8 @@ static unsigned int dca_get_bitrate( uint8_t i_rate )
return p_dca_bitrates[i_rate];
}
static uint32_t dca_get_channels( uint8_t i_amode, bool b_lfe )
static uint16_t dca_get_channels( uint8_t i_amode, bool b_lfe,
uint16_t *p_chan_mode )
{
/* See ETSI TS 102 114, table 5-4
* 00: A
@ -183,59 +184,60 @@ static uint32_t dca_get_channels( uint8_t i_amode, bool b_lfe )
* 0F: CL + C + CR + L + R + SL + S + SR
* 10-3F: user defined */
uint32_t i_original_channels;
uint16_t i_physical_channels;
switch( i_amode )
{
case 0x0:
i_original_channels = AOUT_CHAN_CENTER;
i_physical_channels = AOUT_CHAN_CENTER;
break;
case 0x1:
i_original_channels = AOUT_CHANS_FRONT | AOUT_CHAN_DUALMONO;
i_physical_channels = AOUT_CHANS_FRONT;
*p_chan_mode = AOUT_CHANMODE_DUALMONO;
break;
case 0x2:
case 0x3:
case 0x4:
i_original_channels = AOUT_CHANS_FRONT;
i_physical_channels = AOUT_CHANS_FRONT;
break;
case 0x5:
i_original_channels = AOUT_CHANS_3_0;
i_physical_channels = AOUT_CHANS_3_0;
break;
case 0x6:
i_original_channels = AOUT_CHANS_FRONT | AOUT_CHAN_REARCENTER;
i_physical_channels = AOUT_CHANS_FRONT | AOUT_CHAN_REARCENTER;
break;
case 0x7:
i_original_channels = AOUT_CHANS_4_CENTER_REAR;
i_physical_channels = AOUT_CHANS_4_CENTER_REAR;
break;
case 0x8:
i_original_channels = AOUT_CHANS_4_0;
i_physical_channels = AOUT_CHANS_4_0;
break;
case 0x9:
i_original_channels = AOUT_CHANS_5_0;
i_physical_channels = AOUT_CHANS_5_0;
break;
case 0xA:
case 0xB:
i_original_channels = AOUT_CHANS_6_0;
i_physical_channels = AOUT_CHANS_6_0;
break;
case 0xC:
i_original_channels = AOUT_CHANS_CENTER | AOUT_CHANS_FRONT
i_physical_channels = AOUT_CHANS_CENTER | AOUT_CHANS_FRONT
| AOUT_CHANS_REAR;
break;
case 0xD:
i_original_channels = AOUT_CHANS_7_0;
i_physical_channels = AOUT_CHANS_7_0;
break;
case 0xE:
case 0xF:
/* FIXME: AOUT_CHANS_8_0 */
i_original_channels = AOUT_CHANS_7_0;
i_physical_channels = AOUT_CHANS_7_0;
break;
default:
return 0;
}
if (b_lfe)
i_original_channels |= AOUT_CHAN_LFE;
i_physical_channels |= AOUT_CHAN_LFE;
return i_original_channels;
return i_physical_channels;
}
static int dts_header_ParseSubstream( vlc_dts_header_t *p_header,
@ -290,10 +292,12 @@ static int dts_header_ParseCore( vlc_dts_header_t *p_header,
: ( i_fsize + 1 ) * 16 / 14;
/* See ETSI TS 102 114, table 5-2 */
p_header->i_frame_length = (i_nblks + 1) * 32;
p_header->i_original_channels = dca_get_channels( i_amode, b_lfe );
p_header->i_chan_mode = 0;
p_header->i_physical_channels =
dca_get_channels( i_amode, b_lfe, &p_header->i_chan_mode );
if( !p_header->i_rate || !p_header->i_frame_size ||
!p_header->i_frame_length || !p_header->i_original_channels )
!p_header->i_frame_length || !p_header->i_physical_channels )
return VLC_EGENERIC;
return VLC_SUCCESS;

3
modules/packetizer/dts_header.h

@ -31,7 +31,8 @@ typedef struct
unsigned int i_bitrate;
unsigned int i_frame_size;
unsigned int i_frame_length;
uint32_t i_original_channels;
uint16_t i_physical_channels;
uint16_t i_chan_mode;
} vlc_dts_header_t;
int vlc_dts_header_Parse( vlc_dts_header_t *p_header,

3
modules/packetizer/flac.c

@ -763,8 +763,7 @@ static block_t *Packetize(decoder_t *p_dec, block_t **pp_block)
p_sys->i_frame_size = 0;
p_dec->fmt_out.audio.i_channels = p_sys->i_channels;
p_dec->fmt_out.audio.i_physical_channels =
p_dec->fmt_out.audio.i_original_channels = pi_channels_maps[p_sys->stream_info.channels];
p_dec->fmt_out.audio.i_physical_channels = pi_channels_maps[p_sys->stream_info.channels];
/* So p_block doesn't get re-added several times */
if ( pp_block )

1
modules/packetizer/mlp.c

@ -431,7 +431,6 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block )
p_dec->fmt_out.audio.i_rate = p_sys->mlp.i_rate;
p_dec->fmt_out.audio.i_channels = p_sys->mlp.i_channels;
p_dec->fmt_out.audio.i_original_channels = p_sys->mlp.i_channels_conf;
p_dec->fmt_out.audio.i_physical_channels = p_sys->mlp.i_channels_conf;
p_dec->fmt_out.audio.i_bytes_per_frame = p_sys->i_frame_size;
p_dec->fmt_out.audio.i_frame_length = p_sys->mlp.i_samples;

1
modules/packetizer/mpeg4audio.c

@ -978,7 +978,6 @@ static void SetupOutput(decoder_t *p_dec, block_t *p_block)
p_dec->fmt_out.audio.i_frame_length = p_sys->i_frame_length;
#if 0
p_dec->fmt_out.audio.i_original_channels = p_sys->i_channels_conf;
p_dec->fmt_out.audio.i_physical_channels = p_sys->i_channels_conf;
#endif

28
modules/packetizer/mpegaudio.c

@ -62,7 +62,7 @@ struct decoder_sys_t
mtime_t i_pts;
int i_frame_size, i_free_frame_size;
unsigned int i_channels_conf, i_channels;
unsigned int i_channels_conf, i_chan_mode, i_channels;
unsigned int i_rate, i_max_frame_size, i_frame_length;
unsigned int i_layer, i_bit_rate;
@ -128,9 +128,8 @@ static uint8_t *GetOutBuffer( decoder_t *p_dec, block_t **pp_out_buffer )
p_dec->fmt_out.audio.i_frame_length = p_sys->i_frame_length;
p_dec->fmt_out.audio.i_bytes_per_frame = p_sys->i_max_frame_size;
p_dec->fmt_out.audio.i_original_channels = p_sys->i_channels_conf;
p_dec->fmt_out.audio.i_physical_channels =
p_sys->i_channels_conf & AOUT_CHAN_PHYSMASK;
p_dec->fmt_out.audio.i_physical_channels = p_sys->i_channels_conf;
p_dec->fmt_out.audio.i_chan_mode = p_sys->i_chan_mode;
p_dec->fmt_out.i_bitrate = p_sys->i_bit_rate * 1000;
@ -151,6 +150,7 @@ static uint8_t *GetOutBuffer( decoder_t *p_dec, block_t **pp_out_buffer )
*****************************************************************************/
static int SyncInfo( uint32_t i_header, unsigned int * pi_channels,
unsigned int * pi_channels_conf,
unsigned int * pi_chan_mode,
unsigned int * pi_sample_rate, unsigned int * pi_bit_rate,
unsigned int * pi_frame_length,
unsigned int * pi_max_frame_size, unsigned int * pi_layer)
@ -205,6 +205,7 @@ static int SyncInfo( uint32_t i_header, unsigned int * pi_channels,
i_mode = (i_header & 0xc0) >> 6;
/* Modeext, copyright & original */
i_emphasis = i_header & 0x3;
*pi_chan_mode = 0;
if( *pi_layer != 4 &&
i_bitrate_index < 0x0f &&
@ -213,16 +214,14 @@ static int SyncInfo( uint32_t i_header, unsigned int * pi_channels,
{
switch ( i_mode )
{
case 2: /* dual-mono */
*pi_chan_mode = AOUT_CHANMODE_DUALMONO;
/* fall through */
case 0: /* stereo */
case 1: /* joint stereo */
*pi_channels = 2;
*pi_channels_conf = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT;
break;
case 2: /* dual-mono */
*pi_channels = 2;
*pi_channels_conf = AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT
| AOUT_CHAN_DUALMONO;
break;
case 3: /* mono */
*pi_channels = 1;
*pi_channels_conf = AOUT_CHAN_CENTER;
@ -379,6 +378,7 @@ static block_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
p_sys->i_frame_size = SyncInfo( i_header,
&p_sys->i_channels,
&p_sys->i_channels_conf,
&p_sys->i_chan_mode,
&p_sys->i_rate,
&p_sys->i_bit_rate,
&p_sys->i_frame_length,
@ -427,7 +427,7 @@ static block_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
{
/* Startcode is fine, let's try the header as an extra check */
int i_next_frame_size;
unsigned int i_next_channels, i_next_channels_conf;
unsigned int i_next_channels, i_next_stereo_mode, i_next_channels_conf;
unsigned int i_next_rate, i_next_bit_rate;
unsigned int i_next_frame_length, i_next_max_frame_size;
unsigned int i_next_layer;
@ -438,6 +438,7 @@ static block_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
i_next_frame_size = SyncInfo( i_header,
&i_next_channels,
&i_next_channels_conf,
&i_next_stereo_mode,
&i_next_rate,
&i_next_bit_rate,
&i_next_frame_length,
@ -473,6 +474,7 @@ static block_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
/* Check info is in sync with previous one */
if( i_next_channels_conf != p_sys->i_channels_conf ||
i_next_stereo_mode != p_sys->i_chan_mode ||
i_next_rate != p_sys->i_rate ||
i_next_layer != p_sys->i_layer ||
i_next_frame_length != p_sys->i_frame_length )
@ -630,9 +632,9 @@ static int Open( vlc_object_t *p_this )
p_sys->b_discontinuity = false;
p_sys->i_frame_size = 0;
p_sys->i_channels_conf = p_sys->i_channels = p_sys->i_rate =
p_sys->i_max_frame_size = p_sys->i_frame_length = p_sys->i_layer =
p_sys->i_bit_rate = 0;
p_sys->i_channels_conf = p_sys->i_chan_mode = p_sys->i_channels =
p_sys->i_rate = p_sys->i_max_frame_size = p_sys->i_frame_length =
p_sys->i_layer = p_sys->i_bit_rate = 0;
/* Set output properties */
p_dec->fmt_out.i_codec = VLC_CODEC_MPGA;

12
modules/stream_out/transcode/audio.c

@ -120,12 +120,10 @@ static int transcode_audio_initialize_encoder( sout_stream_id_sys_t *id, sout_st
/* Fix input format */
id->p_encoder->fmt_in.audio.i_format = id->p_encoder->fmt_in.i_codec;
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_physical_channels )
{
if( id->p_encoder->fmt_in.audio.i_channels < (sizeof(pi_channels_maps) / sizeof(*pi_channels_maps)) )
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];
}
aout_FormatPrepare( &id->p_encoder->fmt_in.audio );
@ -265,10 +263,6 @@ int transcode_audio_process( sout_stream_t *p_stream,
id->p_encoder->fmt_out.audio.i_channels = p_sys->i_channels > 0 ?
p_sys->i_channels : id->p_decoder->fmt_out.audio.i_channels;
id->p_encoder->fmt_in.audio.i_original_channels =
id->p_encoder->fmt_out.audio.i_original_channels =
id->p_decoder->fmt_out.audio.i_physical_channels;
id->p_encoder->fmt_in.audio.i_physical_channels =
id->p_encoder->fmt_out.audio.i_physical_channels =
pi_channels_maps[id->p_encoder->fmt_out.audio.i_channels];
@ -388,10 +382,6 @@ bool transcode_audio_add( sout_stream_t *p_stream, const es_format_t *p_fmt,
id->p_encoder->fmt_out.audio.i_channels = p_sys->i_channels > 0 ?
p_sys->i_channels : p_fmt->audio.i_channels;
id->p_encoder->fmt_in.audio.i_original_channels =
id->p_encoder->fmt_out.audio.i_original_channels =
id->p_decoder->fmt_out.audio.i_physical_channels;
id->p_encoder->fmt_in.audio.i_physical_channels =
id->p_encoder->fmt_out.audio.i_physical_channels =
pi_channels_maps[id->p_encoder->fmt_out.audio.i_channels];

1
src/audio_output/aout_internal.h

@ -163,7 +163,6 @@ static inline void aout_SetWavePhysicalChannels(audio_sample_format_t *fmt)
fmt->i_physical_channels = 0;
for (int i = 0; i < fmt->i_channels && i < AOUT_CHAN_MAX; ++i)
fmt->i_physical_channels |= wave_channels[i];
fmt->i_original_channels = fmt->i_physical_channels;
aout_FormatPrepare(fmt);
}

32
src/audio_output/common.c

@ -110,23 +110,23 @@ const char * aout_FormatPrintChannels( const audio_sample_format_t * p_format )
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
if ( (p_format->i_physical_channels & AOUT_CHAN_CENTER)
|| (p_format->i_physical_channels
& (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT)) )
return "Mono";
else if ( p_format->i_original_channels & AOUT_CHAN_LEFT )
else if ( p_format->i_physical_channels & AOUT_CHAN_LEFT )
return "Left";
return "Right";
case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT:
if ( p_format->i_original_channels & AOUT_CHAN_DOLBYSTEREO )
if ( p_format->i_chan_mode & AOUT_CHANMODE_DOLBYSTEREO )
return "Dolby";
else if ( p_format->i_original_channels & AOUT_CHAN_DUALMONO )
else if ( p_format->i_chan_mode & AOUT_CHANMODE_DUALMONO )
return "Dual-mono";
else if ( p_format->i_original_channels == AOUT_CHAN_CENTER )
else if ( p_format->i_physical_channels == AOUT_CHAN_CENTER )
return "Stereo/Mono";
else if ( !(p_format->i_original_channels & AOUT_CHAN_RIGHT) )
else if ( !(p_format->i_physical_channels & AOUT_CHAN_RIGHT) )
return "Stereo/Left";
else if ( !(p_format->i_original_channels & AOUT_CHAN_LEFT) )
else if ( !(p_format->i_physical_channels & AOUT_CHAN_LEFT) )
return "Stereo/Right";
return "Stereo";
case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER:
@ -150,23 +150,23 @@ const char * aout_FormatPrintChannels( const audio_sample_format_t * p_format )
return "3F2M";
case AOUT_CHAN_CENTER | AOUT_CHAN_LFE:
if ( (p_format->i_original_channels & AOUT_CHAN_CENTER)
|| (p_format->i_original_channels
if ( (p_format->i_physical_channels & AOUT_CHAN_CENTER)
|| (p_format->i_physical_channels
& (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT)) )
return "Mono/LFE";
else if ( p_format->i_original_channels & AOUT_CHAN_LEFT )
else if ( p_format->i_physical_channels & AOUT_CHAN_LEFT )
return "Left/LFE";
return "Right/LFE";
case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_LFE:
if ( p_format->i_original_channels & AOUT_CHAN_DOLBYSTEREO )
if ( p_format->i_chan_mode & AOUT_CHANMODE_DOLBYSTEREO )
return "Dolby/LFE";
else if ( p_format->i_original_channels & AOUT_CHAN_DUALMONO )
else if ( p_format->i_chan_mode & AOUT_CHANMODE_DUALMONO )
return "Dual-mono/LFE";
else if ( p_format->i_original_channels == AOUT_CHAN_CENTER )
else if ( p_format->i_physical_channels == AOUT_CHAN_CENTER )
return "Mono/LFE";
else if ( !(p_format->i_original_channels & AOUT_CHAN_RIGHT) )
else if ( !(p_format->i_physical_channels & AOUT_CHAN_RIGHT) )
return "Stereo/Left/LFE";
else if ( !(p_format->i_original_channels & AOUT_CHAN_LEFT) )
else if ( !(p_format->i_physical_channels & AOUT_CHAN_LEFT) )
return "Stereo/Right/LFE";
return "Stereo/LFE";
case AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT | AOUT_CHAN_CENTER | AOUT_CHAN_LFE:

4
src/audio_output/filters.c

@ -163,7 +163,7 @@ static int aout_FiltersPipelineCreate(vlc_object_t *obj, filter_t **filters,
/* Remix channels */
if (infmt->i_physical_channels != outfmt->i_physical_channels
|| infmt->i_original_channels != outfmt->i_original_channels)
|| infmt->i_chan_mode != outfmt->i_chan_mode)
{ /* Remixing currently requires FL32... TODO: S16N */
if (input.i_format != VLC_CODEC_FL32)
{
@ -188,7 +188,7 @@ static int aout_FiltersPipelineCreate(vlc_object_t *obj, filter_t **filters,
output.i_format = input.i_format;
output.i_rate = input.i_rate;
output.i_physical_channels = outfmt->i_physical_channels;
output.i_original_channels = outfmt->i_original_channels;
output.i_chan_mode = outfmt->i_chan_mode;
aout_FormatPrepare (&output);
filter_t *f = FindConverter (obj, &input, &output);

6
src/audio_output/output.c

@ -427,7 +427,7 @@ int aout_OutputNew (audio_output_t *aout, audio_sample_format_t *restrict fmt,
txt.psz_string = _("Original");
var_Change (aout, "stereo-mode", VLC_VAR_ADDCHOICE, &val, &txt);
}
if (fmt->i_original_channels & AOUT_CHAN_DOLBYSTEREO)
if (fmt->i_chan_mode & AOUT_CHANMODE_DOLBYSTEREO)
{
val.i_int = AOUT_VAR_CHAN_DOLBYS;
txt.psz_string = _("Dolby Surround");
@ -469,10 +469,10 @@ int aout_OutputNew (audio_output_t *aout, audio_sample_format_t *restrict fmt,
remap[AOUT_CHANIDX_LEFT] = AOUT_CHANIDX_DISABLE;
break;
case AOUT_VAR_CHAN_DOLBYS:
fmt->i_original_channels = AOUT_CHANS_STEREO|AOUT_CHAN_DOLBYSTEREO;
fmt->i_chan_mode = AOUT_CHANMODE_DOLBYSTEREO;
break;
default:
if (fmt->i_original_channels == (AOUT_CHANS_STEREO | AOUT_CHAN_DUALMONO))
if (b_stereo_original && fmt->i_chan_mode & AOUT_CHANMODE_DUALMONO)
{ /* Go directly to the left channel. */
remap[AOUT_CHANIDX_RIGHT] = AOUT_CHANIDX_DISABLE;
val.i_int = AOUT_VAR_CHAN_LEFT;

13
src/input/decoder.c

@ -347,19 +347,12 @@ static int aout_update_format( decoder_t *p_dec )
const int i_force_dolby = var_InheritInteger( p_dec, "force-dolby-surround" );
if( i_force_dolby &&
(format.i_original_channels&AOUT_CHAN_PHYSMASK) ==
(AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT) )
format.i_physical_channels == (AOUT_CHAN_LEFT|AOUT_CHAN_RIGHT) )
{
if( i_force_dolby == 1 )
{
format.i_original_channels = format.i_original_channels |
AOUT_CHAN_DOLBYSTEREO;
}
format.i_chan_mode |= AOUT_CHANMODE_DOLBYSTEREO;
else /* i_force_dolby == 2 */
{
format.i_original_channels = format.i_original_channels &
~AOUT_CHAN_DOLBYSTEREO;
}
format.i_chan_mode &= ~AOUT_CHANMODE_DOLBYSTEREO;
}
aout_request_vout_t request_vout = {

2
src/misc/es_format.c

@ -583,7 +583,7 @@ bool es_format_IsSimilar( const es_format_t *p_fmt1, const es_format_t *p_fmt2 )
if( a1.i_rate != a2.i_rate ||
a1.i_channels != a2.i_channels ||
a1.i_physical_channels != a2.i_physical_channels ||
a1.i_original_channels != a2.i_original_channels )
a1.i_chan_mode != a2.i_chan_mode )
return false;
return true;
}

Loading…
Cancel
Save