| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -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, | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |