@ -596,6 +596,34 @@ static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
return 0 ;
return 0 ;
}
}
static int mov_read_dec3 ( MOVContext * c , AVIOContext * pb , MOVAtom atom )
{
AVStream * st ;
int eac3info , acmod , lfeon , bsmod ;
if ( c - > fc - > nb_streams < 1 )
return 0 ;
st = c - > fc - > streams [ c - > fc - > nb_streams - 1 ] ;
/* No need to parse fields for additional independent substreams and its
* associated dependent substreams since libavcodec ' s E - AC - 3 decoder
* does not support them yet . */
avio_rb16 ( pb ) ; /* data_rate and num_ind_sub */
eac3info = avio_rb24 ( pb ) ;
bsmod = ( eac3info > > 12 ) & 0x1f ;
acmod = ( eac3info > > 9 ) & 0x7 ;
lfeon = ( eac3info > > 8 ) & 0x1 ;
st - > codec - > channel_layout = avpriv_ac3_channel_layout_tab [ acmod ] ;
if ( lfeon )
st - > codec - > channel_layout | = AV_CH_LOW_FREQUENCY ;
st - > codec - > channels = av_get_channel_layout_nb_channels ( st - > codec - > channel_layout ) ;
st - > codec - > audio_service_type = bsmod ;
if ( st - > codec - > channels > 1 & & bsmod = = 0x7 )
st - > codec - > audio_service_type = AV_AUDIO_SERVICE_TYPE_KARAOKE ;
return 0 ;
}
static int mov_read_chan ( MOVContext * c , AVIOContext * pb , MOVAtom atom )
static int mov_read_chan ( MOVContext * c , AVIOContext * pb , MOVAtom atom )
{
{
AVStream * st ;
AVStream * st ;
@ -2605,6 +2633,7 @@ static const MOVParseTableEntry mov_default_parse_table[] = {
{ MKTAG ( ' w ' , ' a ' , ' v ' , ' e ' ) , mov_read_wave } ,
{ MKTAG ( ' w ' , ' a ' , ' v ' , ' e ' ) , mov_read_wave } ,
{ MKTAG ( ' e ' , ' s ' , ' d ' , ' s ' ) , mov_read_esds } ,
{ MKTAG ( ' e ' , ' s ' , ' d ' , ' s ' ) , mov_read_esds } ,
{ MKTAG ( ' d ' , ' a ' , ' c ' , ' 3 ' ) , mov_read_dac3 } , /* AC-3 info */
{ MKTAG ( ' d ' , ' a ' , ' c ' , ' 3 ' ) , mov_read_dac3 } , /* AC-3 info */
{ MKTAG ( ' d ' , ' e ' , ' c ' , ' 3 ' ) , mov_read_dec3 } , /* EAC-3 info */
{ MKTAG ( ' w ' , ' i ' , ' d ' , ' e ' ) , mov_read_wide } , /* place holder */
{ MKTAG ( ' w ' , ' i ' , ' d ' , ' e ' ) , mov_read_wide } , /* place holder */
{ MKTAG ( ' w ' , ' f ' , ' e ' , ' x ' ) , mov_read_wfex } ,
{ MKTAG ( ' w ' , ' f ' , ' e ' , ' x ' ) , mov_read_wfex } ,
{ MKTAG ( ' c ' , ' m ' , ' o ' , ' v ' ) , mov_read_cmov } ,
{ MKTAG ( ' c ' , ' m ' , ' o ' , ' v ' ) , mov_read_cmov } ,