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