This reverts commit a9dacdeea6168787a142209bd19fdd74aefc9dd6. I don't think it is a good idea to drop frames from CFR input just because they are duplicated, that can cause issues for API users expecting CFR input. Also it can cause issues at the end of file, if the last frame is a duplicated frame.
Fixes ticket #7880. Signed-off-by: Marton Balint <c...@passwd.hu> --- libavcodec/qtrle.c | 12 ++--- tests/ref/fate/qtrle-8bit | 109 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 6 deletions(-) diff --git a/libavcodec/qtrle.c b/libavcodec/qtrle.c index 2c29547e5a..7367f8688d 100644 --- a/libavcodec/qtrle.c +++ b/libavcodec/qtrle.c @@ -455,10 +455,12 @@ static int qtrle_decode_frame(AVCodecContext *avctx, int ret, size; bytestream2_init(&s->g, avpkt->data, avpkt->size); + if ((ret = ff_reget_buffer(avctx, s->frame)) < 0) + return ret; /* check if this frame is even supposed to change */ if (avpkt->size < 8) - return avpkt->size; + goto done; /* start after the chunk size */ size = bytestream2_get_be32(&s->g) & 0x3FFFFFFF; @@ -472,20 +474,17 @@ static int qtrle_decode_frame(AVCodecContext *avctx, /* if a header is present, fetch additional decoding parameters */ if (header & 0x0008) { if (avpkt->size < 14) - return avpkt->size; + goto done; start_line = bytestream2_get_be16(&s->g); bytestream2_skip(&s->g, 2); height = bytestream2_get_be16(&s->g); bytestream2_skip(&s->g, 2); if (height > s->avctx->height - start_line) - return avpkt->size; + goto done; } else { start_line = 0; height = s->avctx->height; } - if ((ret = ff_reget_buffer(avctx, s->frame)) < 0) - return ret; - row_ptr = s->frame->linesize[0] * start_line; switch (avctx->bits_per_coded_sample) { @@ -546,6 +545,7 @@ static int qtrle_decode_frame(AVCodecContext *avctx, memcpy(s->frame->data[1], s->pal, AVPALETTE_SIZE); } +done: if ((ret = av_frame_ref(data, s->frame)) < 0) return ret; *got_frame = 1; diff --git a/tests/ref/fate/qtrle-8bit b/tests/ref/fate/qtrle-8bit index 27bb8aad71..8da113d83e 100644 --- a/tests/ref/fate/qtrle-8bit +++ b/tests/ref/fate/qtrle-8bit @@ -4,60 +4,169 @@ #dimensions 0: 640x480 #sar 0: 0/1 0, 0, 0, 1, 921600, 0x1492e3ed +0, 1, 1, 1, 921600, 0x1492e3ed +0, 2, 2, 1, 921600, 0x1492e3ed 0, 3, 3, 1, 921600, 0x23ef4fc7 +0, 4, 4, 1, 921600, 0x23ef4fc7 0, 5, 5, 1, 921600, 0xe406d4be +0, 6, 6, 1, 921600, 0xe406d4be +0, 7, 7, 1, 921600, 0xe406d4be 0, 8, 8, 1, 921600, 0x62b8b5a1 +0, 9, 9, 1, 921600, 0x62b8b5a1 0, 10, 10, 1, 921600, 0x7d8ba674 +0, 11, 11, 1, 921600, 0x7d8ba674 +0, 12, 12, 1, 921600, 0x7d8ba674 0, 13, 13, 1, 921600, 0xfe666be7 +0, 14, 14, 1, 921600, 0xfe666be7 0, 15, 15, 1, 921600, 0x721baec0 +0, 16, 16, 1, 921600, 0x721baec0 +0, 17, 17, 1, 921600, 0x721baec0 0, 18, 18, 1, 921600, 0xc237180a +0, 19, 19, 1, 921600, 0xc237180a 0, 20, 20, 1, 921600, 0xf03a7482 +0, 21, 21, 1, 921600, 0xf03a7482 +0, 22, 22, 1, 921600, 0xf03a7482 0, 23, 23, 1, 921600, 0x5612a391 +0, 24, 24, 1, 921600, 0x5612a391 0, 25, 25, 1, 921600, 0x9dbcc46a +0, 26, 26, 1, 921600, 0x9dbcc46a +0, 27, 27, 1, 921600, 0x9dbcc46a 0, 28, 28, 1, 921600, 0xa128a5d5 +0, 29, 29, 1, 921600, 0xa128a5d5 0, 30, 30, 1, 921600, 0x63e0025c +0, 31, 31, 1, 921600, 0x63e0025c +0, 32, 32, 1, 921600, 0x63e0025c 0, 33, 33, 1, 921600, 0x262359ed +0, 34, 34, 1, 921600, 0x262359ed 0, 35, 35, 1, 921600, 0x343688e8 +0, 36, 36, 1, 921600, 0x343688e8 +0, 37, 37, 1, 921600, 0x343688e8 +0, 38, 38, 1, 921600, 0x343688e8 +0, 39, 39, 1, 921600, 0x343688e8 +0, 40, 40, 1, 921600, 0x343688e8 +0, 41, 41, 1, 921600, 0x343688e8 +0, 42, 42, 1, 921600, 0x343688e8 +0, 43, 43, 1, 921600, 0x343688e8 +0, 44, 44, 1, 921600, 0x343688e8 0, 45, 45, 1, 921600, 0xe4b29d57 +0, 46, 46, 1, 921600, 0xe4b29d57 +0, 47, 47, 1, 921600, 0xe4b29d57 0, 48, 48, 1, 921600, 0x198e8a4a +0, 49, 49, 1, 921600, 0x198e8a4a 0, 50, 50, 1, 921600, 0x0cad8dc9 +0, 51, 51, 1, 921600, 0x0cad8dc9 +0, 52, 52, 1, 921600, 0x0cad8dc9 0, 53, 53, 1, 921600, 0x1f74cf3d +0, 54, 54, 1, 921600, 0x1f74cf3d 0, 55, 55, 1, 921600, 0xec5b5449 +0, 56, 56, 1, 921600, 0xec5b5449 +0, 57, 57, 1, 921600, 0xec5b5449 0, 58, 58, 1, 921600, 0x39829711 +0, 59, 59, 1, 921600, 0x39829711 0, 60, 60, 1, 921600, 0x6de5b9c6 +0, 61, 61, 1, 921600, 0x6de5b9c6 +0, 62, 62, 1, 921600, 0x6de5b9c6 0, 63, 63, 1, 921600, 0x47b0e9d4 +0, 64, 64, 1, 921600, 0x47b0e9d4 0, 65, 65, 1, 921600, 0x756452b8 +0, 66, 66, 1, 921600, 0x756452b8 +0, 67, 67, 1, 921600, 0x756452b8 0, 68, 68, 1, 921600, 0x6fce3478 +0, 69, 69, 1, 921600, 0x6fce3478 0, 70, 70, 1, 921600, 0x372397cd +0, 71, 71, 1, 921600, 0x372397cd +0, 72, 72, 1, 921600, 0x372397cd 0, 73, 73, 1, 921600, 0xe3999ba1 +0, 74, 74, 1, 921600, 0xe3999ba1 0, 75, 75, 1, 921600, 0x6ba26b43 +0, 76, 76, 1, 921600, 0x6ba26b43 +0, 77, 77, 1, 921600, 0x6ba26b43 0, 78, 78, 1, 921600, 0x4e9ee49e +0, 79, 79, 1, 921600, 0x4e9ee49e 0, 80, 80, 1, 921600, 0xdb5fd6e7 +0, 81, 81, 1, 921600, 0xdb5fd6e7 +0, 82, 82, 1, 921600, 0xdb5fd6e7 0, 83, 83, 1, 921600, 0x8f2254a5 +0, 84, 84, 1, 921600, 0x8f2254a5 +0, 85, 85, 1, 921600, 0x8f2254a5 +0, 86, 86, 1, 921600, 0x8f2254a5 +0, 87, 87, 1, 921600, 0x8f2254a5 +0, 88, 88, 1, 921600, 0x8f2254a5 +0, 89, 89, 1, 921600, 0x8f2254a5 +0, 90, 90, 1, 921600, 0x8f2254a5 +0, 91, 91, 1, 921600, 0x8f2254a5 +0, 92, 92, 1, 921600, 0x8f2254a5 0, 93, 93, 1, 921600, 0x57e95c32 +0, 94, 94, 1, 921600, 0x57e95c32 0, 95, 95, 1, 921600, 0x41627a9b +0, 96, 96, 1, 921600, 0x41627a9b +0, 97, 97, 1, 921600, 0x41627a9b 0, 98, 98, 1, 921600, 0x7412dcee +0, 99, 99, 1, 921600, 0x7412dcee 0, 100, 100, 1, 921600, 0xaebe10ed +0, 101, 101, 1, 921600, 0xaebe10ed +0, 102, 102, 1, 921600, 0xaebe10ed 0, 103, 103, 1, 921600, 0x411a91f6 +0, 104, 104, 1, 921600, 0x411a91f6 0, 105, 105, 1, 921600, 0xb059df3f +0, 106, 106, 1, 921600, 0xb059df3f +0, 107, 107, 1, 921600, 0xb059df3f 0, 108, 108, 1, 921600, 0x4d6f5a77 +0, 109, 109, 1, 921600, 0x4d6f5a77 0, 110, 110, 1, 921600, 0xbbf06df4 +0, 111, 111, 1, 921600, 0xbbf06df4 +0, 112, 112, 1, 921600, 0xbbf06df4 0, 113, 113, 1, 921600, 0xe27f7bf6 +0, 114, 114, 1, 921600, 0xe27f7bf6 0, 115, 115, 1, 921600, 0xd7e8360e +0, 116, 116, 1, 921600, 0xd7e8360e +0, 117, 117, 1, 921600, 0xd7e8360e 0, 118, 118, 1, 921600, 0x1dd4c344 +0, 119, 119, 1, 921600, 0x1dd4c344 0, 120, 120, 1, 921600, 0x7995a7ce +0, 121, 121, 1, 921600, 0x7995a7ce +0, 122, 122, 1, 921600, 0x7995a7ce 0, 123, 123, 1, 921600, 0x2ef3c566 +0, 124, 124, 1, 921600, 0x2ef3c566 0, 125, 125, 1, 921600, 0xf296736e +0, 126, 126, 1, 921600, 0xf296736e +0, 127, 127, 1, 921600, 0xf296736e +0, 128, 128, 1, 921600, 0xf296736e +0, 129, 129, 1, 921600, 0xf296736e +0, 130, 130, 1, 921600, 0xf296736e +0, 131, 131, 1, 921600, 0xf296736e +0, 132, 132, 1, 921600, 0xf296736e +0, 133, 133, 1, 921600, 0xf296736e +0, 134, 134, 1, 921600, 0xf296736e 0, 135, 135, 1, 921600, 0x1a488311 +0, 136, 136, 1, 921600, 0x1a488311 +0, 137, 137, 1, 921600, 0x1a488311 0, 138, 138, 1, 921600, 0x9e28011b +0, 139, 139, 1, 921600, 0x9e28011b 0, 140, 140, 1, 921600, 0x84d1ea80 +0, 141, 141, 1, 921600, 0x84d1ea80 +0, 142, 142, 1, 921600, 0x84d1ea80 0, 143, 143, 1, 921600, 0x9ed41052 +0, 144, 144, 1, 921600, 0x9ed41052 0, 145, 145, 1, 921600, 0xd4db7206 +0, 146, 146, 1, 921600, 0xd4db7206 +0, 147, 147, 1, 921600, 0xd4db7206 0, 148, 148, 1, 921600, 0x55f695a9 +0, 149, 149, 1, 921600, 0x55f695a9 0, 150, 150, 1, 921600, 0x9d8c667f +0, 151, 151, 1, 921600, 0x9d8c667f +0, 152, 152, 1, 921600, 0x9d8c667f 0, 153, 153, 1, 921600, 0x9b6037ec +0, 154, 154, 1, 921600, 0x9b6037ec 0, 155, 155, 1, 921600, 0x57c5e835 +0, 156, 156, 1, 921600, 0x57c5e835 +0, 157, 157, 1, 921600, 0x57c5e835 0, 158, 158, 1, 921600, 0x476dad89 +0, 159, 159, 1, 921600, 0x476dad89 0, 160, 160, 1, 921600, 0xcfd6ad2b +0, 161, 161, 1, 921600, 0xcfd6ad2b +0, 162, 162, 1, 921600, 0xcfd6ad2b 0, 163, 163, 1, 921600, 0x3b372379 +0, 164, 164, 1, 921600, 0x3b372379 0, 165, 165, 1, 921600, 0x36f245f5 +0, 166, 166, 1, 921600, 0x36f245f5 -- 2.16.4 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".