From 8e5f16a8a7d2778a3a20074a986d657921a51052 Mon Sep 17 00:00:00 2001 From: Francois Cartegnie Date: Wed, 19 Dec 2018 14:46:22 +0100 Subject: [PATCH] demux: mp4: use struct for coreaudio layout params --- modules/demux/mp4/coreaudio.h | 22 ++++++++++++++++++++-- modules/demux/mp4/essetup.c | 2 +- modules/demux/mp4/libmp4.c | 2 +- modules/demux/mp4/libmp4.h | 13 +------------ 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/modules/demux/mp4/coreaudio.h b/modules/demux/mp4/coreaudio.h index 80e777bc62..1922d1e6a8 100644 --- a/modules/demux/mp4/coreaudio.h +++ b/modules/demux/mp4/coreaudio.h @@ -19,6 +19,24 @@ *****************************************************************************/ #include +struct CoreAudio_layout_s +{ + uint32_t i_channels_layout_tag; + uint32_t i_channels_bitmap; + uint32_t i_channels_description_count; + struct + { + uint32_t i_channel_label; + uint32_t i_channel_flags; + float f_coordinates[3]; + } *p_descriptions; +}; + +static inline void CoreAudio_Layout_Clean(struct CoreAudio_layout_s *c) +{ + free( c->p_descriptions ); +} + /* According to Apple's CoreAudio_Bitmap/CoreAudio_BitmapTypes.h */ enum { @@ -83,7 +101,7 @@ enum CoreAudio_Layout CoreAudio_Layout_BITMAP = (1<<16), }; -static inline int CoreAudio_Bitmap_to_vlc_bitmap( uint32_t i_corebitmap, +static inline int CoreAudio_Bitmap_to_vlc_bitmap( const struct CoreAudio_layout_s *c, uint16_t *pi_mapping, uint8_t *pi_channels, const uint32_t **pp_chans_order ) @@ -93,7 +111,7 @@ static inline int CoreAudio_Bitmap_to_vlc_bitmap( uint32_t i_corebitmap, *pi_channels = 0; for (uint8_t i=0;ii_channels_bitmap ) { if ( (CoreAudio_Bitmap_mapping[i].i_vlc_bitmap & *pi_mapping) || *pi_channels >= AOUT_CHAN_MAX ) diff --git a/modules/demux/mp4/essetup.c b/modules/demux/mp4/essetup.c index d21e1b5a9c..637d2d670c 100644 --- a/modules/demux/mp4/essetup.c +++ b/modules/demux/mp4/essetup.c @@ -1188,7 +1188,7 @@ int SetupAudioES( demux_t *p_demux, mp4_track_t *p_track, MP4_Box_t *p_sample ) 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, + CoreAudio_Bitmap_to_vlc_bitmap( &BOXDATA(p_chan)->layout, &i_vlc_mapping, &i_channels, &p_rg_chans_order ) != VLC_SUCCESS ) { diff --git a/modules/demux/mp4/libmp4.c b/modules/demux/mp4/libmp4.c index d42a4a0a4e..b2d675a20c 100644 --- a/modules/demux/mp4/libmp4.c +++ b/modules/demux/mp4/libmp4.c @@ -2288,7 +2288,7 @@ static int MP4_ReadBox_sgpd( stream_t *p_stream, MP4_Box_t *p_box ) static void MP4_FreeBox_stsdext_chan( MP4_Box_t *p_box ) { MP4_Box_data_chan_t *p_chan = p_box->data.p_chan; - free( p_chan->layout.p_descriptions ); + CoreAudio_Layout_Clean( &p_chan->layout ); } static int MP4_ReadBox_stsdext_chan( stream_t *p_stream, MP4_Box_t *p_box ) diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h index df545c83b2..d1b54be832 100644 --- a/modules/demux/mp4/libmp4.h +++ b/modules/demux/mp4/libmp4.h @@ -1379,18 +1379,7 @@ typedef struct { uint8_t i_version; uint32_t i_channels_flags; /* 24 bits */ - struct - { - uint32_t i_channels_layout_tag; - uint32_t i_channels_bitmap; - uint32_t i_channels_description_count; - struct - { - uint32_t i_channel_label; - uint32_t i_channel_flags; - float f_coordinates[3]; - } *p_descriptions; - } layout; + struct CoreAudio_layout_s layout; } MP4_Box_data_chan_t; typedef struct -- 2.11.4.GIT