vlc | branch: master | Tristan Matthews <[email protected]> | Mon Feb 29 09:20:38 2016 -0500| [529444308bf7525bf94b9fb2bd2e5d59120aa89f] | committer: Tristan Matthews
demux: mkv: add ALAC atom size, tag and tag version to private data Fixes #16620 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=529444308bf7525bf94b9fb2bd2e5d59120aa89f --- modules/demux/mkv/matroska_segment_parse.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/modules/demux/mkv/matroska_segment_parse.cpp b/modules/demux/mkv/matroska_segment_parse.cpp index c0ab042..652b549 100644 --- a/modules/demux/mkv/matroska_segment_parse.cpp +++ b/modules/demux/mkv/matroska_segment_parse.cpp @@ -44,6 +44,21 @@ static vlc_fourcc_t __GetFOURCC( uint8_t *p ) return VLC_FOURCC( p[0], p[1], p[2], p[3] ); } +static inline void fill_extra_data_alac( mkv_track_t *p_tk ) +{ + if( p_tk->i_extra_data <= 0 ) return; + p_tk->fmt.p_extra = malloc( p_tk->i_extra_data + 12 ); + if( unlikely( !p_tk->fmt.p_extra ) ) return; + p_tk->fmt.i_extra = p_tk->i_extra_data + 12; + uint8_t *p_extra = (uint8_t *)p_tk->fmt.p_extra; + /* See "ALAC Specific Info (36 bytes) (required)" from + alac.macosforge.org/trac/browser/trunk/ALACMagicCookieDescription.txt */ + SetDWBE( p_extra, p_tk->fmt.i_extra ); + memcpy( p_extra + 4, "alac", 4 ); + SetDWBE( p_extra + 8, 0 ); + memcpy( p_extra + 12, p_tk->p_extra_data, p_tk->fmt.i_extra - 12 ); +} + static inline void fill_extra_data( mkv_track_t *p_tk, unsigned int offset ) { if(p_tk->i_extra_data <= offset) return; @@ -1628,7 +1643,7 @@ int32_t matroska_segment_c::TrackInit( mkv_track_t * p_tk ) else if( !strcmp( p_tk->psz_codec, "A_ALAC" ) ) { p_tk->fmt.i_codec = VLC_CODEC_ALAC; - fill_extra_data( p_tk, 0 ); + fill_extra_data_alac( p_tk ); } else if( !strcmp( p_tk->psz_codec, "A_WAVPACK4" ) ) { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
