Signed-off-by: James Almer <jamr...@gmail.com> --- libavformat/tta.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-)
diff --git a/libavformat/tta.c b/libavformat/tta.c index 5789e5b..0c01b7b 100644 --- a/libavformat/tta.c +++ b/libavformat/tta.c @@ -64,7 +64,8 @@ static int tta_read_header(AVFormatContext *s) start_offset = avio_tell(s->pb); if (start_offset < 0) return start_offset; - ffio_init_checksum(s->pb, tta_check_crc, UINT32_MAX); + if (s->error_recognition & AV_EF_CRCCHECK) + ffio_init_checksum(s->pb, tta_check_crc, UINT32_MAX); if (avio_rl32(s->pb) != AV_RL32("TTA1")) return AVERROR_INVALIDDATA; @@ -83,11 +84,15 @@ static int tta_read_header(AVFormatContext *s) return AVERROR_INVALIDDATA; } - crc = ffio_get_checksum(s->pb) ^ UINT32_MAX; - if (crc != avio_rl32(s->pb)) { - av_log(s, AV_LOG_ERROR, "Header CRC error\n"); - return AVERROR_INVALIDDATA; - } + if (s->error_recognition & AV_EF_CRCCHECK) { + crc = ffio_get_checksum(s->pb) ^ UINT32_MAX; + if (crc != avio_rl32(s->pb)) { + av_log(s, AV_LOG_ERROR, "Header CRC error\n"); + if (s->error_recognition & AV_EF_EXPLODE) + return AVERROR_INVALIDDATA; + } + } else + avio_skip(s->pb, 4); // header crc c->frame_size = samplerate * 256 / 245; c->last_frame_size = nb_samples % c->frame_size; @@ -120,7 +125,8 @@ static int tta_read_header(AVFormatContext *s) avio_seek(s->pb, start_offset, SEEK_SET); avio_read(s->pb, st->codec->extradata, st->codec->extradata_size); - ffio_init_checksum(s->pb, tta_check_crc, UINT32_MAX); + if (s->error_recognition & AV_EF_CRCCHECK) + ffio_init_checksum(s->pb, tta_check_crc, UINT32_MAX); for (i = 0; i < c->totalframes; i++) { uint32_t size = avio_rl32(s->pb); int r; @@ -129,11 +135,15 @@ static int tta_read_header(AVFormatContext *s) return r; framepos += size; } - crc = ffio_get_checksum(s->pb) ^ UINT32_MAX; - if (crc != avio_rl32(s->pb)) { - av_log(s, AV_LOG_ERROR, "Seek table CRC error\n"); - return AVERROR_INVALIDDATA; - } + if (s->error_recognition & AV_EF_CRCCHECK) { + crc = ffio_get_checksum(s->pb) ^ UINT32_MAX; + if (crc != avio_rl32(s->pb)) { + av_log(s, AV_LOG_ERROR, "Seek table CRC error\n"); + if (s->error_recognition & AV_EF_EXPLODE) + return AVERROR_INVALIDDATA; + } + } else + avio_skip(s->pb, 4); // seektable crc st->codec->codec_type = AVMEDIA_TYPE_AUDIO; st->codec->codec_id = AV_CODEC_ID_TTA; -- 2.2.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel