vlc | branch: master | Francois Cartegnie <[email protected]> | Mon Mar 11 18:28:22 2019 +0100| [60cca0eadead0682e6625f825f6c7294999a49ee] | committer: Francois Cartegnie
packetizer: dts: add LBR header parser > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=60cca0eadead0682e6625f825f6c7294999a49ee --- modules/packetizer/dts_header.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/modules/packetizer/dts_header.c b/modules/packetizer/dts_header.c index b06934326c..1d4ebd98a1 100644 --- a/modules/packetizer/dts_header.c +++ b/modules/packetizer/dts_header.c @@ -259,6 +259,44 @@ static int dts_header_ParseSubstream( vlc_dts_header_t *p_header, return VLC_SUCCESS; } +static int dts_header_ParseLBRExtSubstream( vlc_dts_header_t *p_header, + const void *p_buffer ) +{ + bs_t s; + bs_init( &s, p_buffer, VLC_DTS_HEADER_SIZE ); + bs_skip( &s, 32 /*SYNCEXTSSH*/ ); + uint8_t ucFmtInfoCode = bs_read( &s, 8 ); + if( ucFmtInfoCode != 0x02 /*LBR_HDRCODE_DECODERINIT*/ ) + return VLC_EGENERIC; + p_header->i_rate = bs_read( &s, 8 ); + /* See ETSI TS 102 114, table 9-3 */ + const unsigned int LBRsamplerates[] = { + 8000, 16000, 32000, + 0, 0, + 22050, 44100, + 0, 0, 0, + 12000, 24000, 48000, + }; + if(p_header->i_rate >= ARRAY_SIZE(LBRsamplerates)) + return VLC_EGENERIC; + p_header->i_rate = LBRsamplerates[p_header->i_rate]; + if( p_header->i_rate < 16000 ) + p_header->i_frame_length = 1024; + else if( p_header->i_rate < 32000 ) + p_header->i_frame_length = 2048; + else + p_header->i_frame_length = 4096; + + uint16_t i_spkrmask = bs_read( &s, 16 ); + bs_skip( &s, 16 ); + bs_skip( &s, 8 ); + bs_skip( &s, 8 ); + bs_skip( &s, 16 ); + bs_skip( &s, 16 ); + + return VLC_SUCCESS; +} + static int dts_header_ParseCore( vlc_dts_header_t *p_header, const void *p_buffer) { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
