vlc | branch: master | Francois Cartegnie <fcvlc...@free.fr> | Tue Dec 18 16:21:02 2018 +0100| [4ee261a441c645849caeae9a5cc3c6df9fa834af] | committer: Francois Cartegnie
demux: mp4: use static mapping table per layout > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4ee261a441c645849caeae9a5cc3c6df9fa834af --- modules/demux/mp4/coreaudio.h | 16 +++++++++++++--- modules/demux/mp4/essetup.c | 38 +++++++++++++++++--------------------- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/modules/demux/mp4/coreaudio.h b/modules/demux/mp4/coreaudio.h index 1852ffeca6..e77dfcc3e0 100644 --- a/modules/demux/mp4/coreaudio.h +++ b/modules/demux/mp4/coreaudio.h @@ -42,6 +42,16 @@ enum CoreAudio_Bitmap_TOPBACKRIGHT = (1<<17), }; +static const uint32_t pi_vlc_chan_order_CoreAudio[] = +{ + AOUT_CHAN_LEFT, AOUT_CHAN_RIGHT, AOUT_CHAN_CENTER, + AOUT_CHAN_LFE, + AOUT_CHAN_REARLEFT, AOUT_CHAN_REARRIGHT, + AOUT_CHAN_LEFT, AOUT_CHAN_RIGHT, AOUT_CHAN_REARCENTER, + AOUT_CHAN_MIDDLELEFT, AOUT_CHAN_MIDDLERIGHT, + 0 +}; + static const struct { uint32_t i_bitmap; @@ -76,8 +86,9 @@ enum CoreAudio_Layout static inline int CoreAudio_Bitmap_to_vlc_bitmap( uint32_t i_corebitmap, uint16_t *pi_mapping, uint8_t *pi_channels, - uint32_t p_chans[AOUT_CHAN_MAX + 1] ) + const uint32_t **pp_chans_order ) { + *pp_chans_order = pi_vlc_chan_order_CoreAudio; *pi_mapping = 0; *pi_channels = 0; for (uint8_t i=0;i<ARRAY_SIZE(CoreAudio_Bitmap_mapping);i++) @@ -89,12 +100,11 @@ static inline int CoreAudio_Bitmap_to_vlc_bitmap( uint32_t i_corebitmap, { /* double mapping or unsupported number of channels */ *pi_mapping = 0; + *pi_channels = 0; return VLC_EGENERIC; } *pi_mapping |= CoreAudio_Bitmap_mapping[i].i_vlc_bitmap; - p_chans[(*pi_channels)++] = CoreAudio_Bitmap_mapping[i].i_vlc_bitmap; } } - p_chans[*pi_channels] = 0; return VLC_SUCCESS; } diff --git a/modules/demux/mp4/essetup.c b/modules/demux/mp4/essetup.c index 4bf8a9c8a4..07d9407f74 100644 --- a/modules/demux/mp4/essetup.c +++ b/modules/demux/mp4/essetup.c @@ -1183,29 +1183,25 @@ int SetupAudioES( demux_t *p_demux, mp4_track_t *p_track, MP4_Box_t *p_sample ) const MP4_Box_t *p_chan = MP4_BoxGet( p_sample, "chan" ); if ( p_chan ) { - if ( BOXDATA(p_chan)->layout.i_channels_layout_tag == CoreAudio_Layout_BITMAP ) + uint16_t i_vlc_mapping = 0; + uint8_t i_channels = 0; + const uint32_t *p_rg_chans_order = NULL; + + if ( BOXDATA(p_chan)->layout.i_channels_layout_tag == CoreAudio_Layout_BITMAP && + CoreAudio_Bitmap_to_vlc_bitmap( BOXDATA(p_chan)->layout.i_channels_bitmap, + &i_vlc_mapping, &i_channels, + &p_rg_chans_order ) != VLC_SUCCESS ) { - uint32_t rgi_chans_sequence[AOUT_CHAN_MAX + 1]; - memset(rgi_chans_sequence, 0, sizeof(rgi_chans_sequence)); - uint16_t i_vlc_mapping = 0; - uint8_t i_channels = 0; - - if( CoreAudio_Bitmap_to_vlc_bitmap( BOXDATA(p_chan)->layout.i_channels_bitmap, - &i_vlc_mapping, &i_channels, - rgi_chans_sequence ) != VLC_SUCCESS ) - { - msg_Warn( p_demux, "discarding chan mapping" ); - } - - if( aout_CheckChannelReorder( rgi_chans_sequence, NULL, i_vlc_mapping, - p_track->rgi_chans_reordering ) && - aout_BitsPerSample( p_track->fmt.i_codec ) ) - { - p_track->b_chans_reorder = true; - p_track->fmt.audio.i_channels = i_channels; - p_track->fmt.audio.i_physical_channels = i_vlc_mapping; - } + msg_Warn( p_demux, "discarding chan mapping" ); + } + if( aout_BitsPerSample( p_track->fmt.i_codec ) && i_vlc_mapping > 0 && + aout_CheckChannelReorder( p_rg_chans_order, NULL, i_vlc_mapping, + p_track->rgi_chans_reordering ) ) + { + p_track->b_chans_reorder = true; + p_track->fmt.audio.i_channels = i_channels; + p_track->fmt.audio.i_physical_channels = i_vlc_mapping; } } _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits