@ -2545,30 +2545,29 @@ static int matroska_parse_tracks(AVFormatContext *s)
memcpy ( & extradata [ 12 ] , track - > codec_priv . data ,
track - > codec_priv . size ) ;
} else if ( codec_id = = AV_CODEC_ID_TTA ) {
extradata_size = 30 ;
extradata = av_mallocz ( extradata_size + AV_INPUT_BUFFER_PADDING_SIZE ) ;
if ( ! extradata )
return AVERROR ( ENOMEM ) ;
ffio_init_context ( & b , extradata , extradata_size , 1 ,
NULL , NULL , NULL , NULL ) ;
avio_write ( & b , " TTA1 " , 4 ) ;
avio_wl16 ( & b , 1 ) ;
if ( track - > audio . channels > UINT16_MAX | |
track - > audio . bitdepth > UINT16_MAX ) {
av_log ( matroska - > ctx , AV_LOG_WARNING ,
" Too large audio channel number % " PRIu64
" or bitdepth % " PRIu64 " . Skipping track. \n " ,
track - > audio . channels , track - > audio . bitdepth ) ;
av_freep ( & extradata ) ;
if ( matroska - > ctx - > error_recognition & AV_EF_EXPLODE )
return AVERROR_INVALIDDATA ;
else
continue ;
}
avio_wl16 ( & b , track - > audio . channels ) ;
avio_wl16 ( & b , track - > audio . bitdepth ) ;
if ( track - > audio . out_samplerate < 0 | | track - > audio . out_samplerate > INT_MAX )
return AVERROR_INVALIDDATA ;
extradata_size = 30 ;
extradata = av_mallocz ( extradata_size + AV_INPUT_BUFFER_PADDING_SIZE ) ;
if ( ! extradata )
return AVERROR ( ENOMEM ) ;
ffio_init_context ( & b , extradata , extradata_size , 1 ,
NULL , NULL , NULL , NULL ) ;
avio_write ( & b , " TTA1 " , 4 ) ;
avio_wl16 ( & b , 1 ) ;
avio_wl16 ( & b , track - > audio . channels ) ;
avio_wl16 ( & b , track - > audio . bitdepth ) ;
avio_wl32 ( & b , track - > audio . out_samplerate ) ;
avio_wl32 ( & b , av_rescale ( ( matroska - > duration * matroska - > time_scale ) ,
track - > audio . out_samplerate ,