[FFmpeg-devel] [PATCH 1/2] Revert "avcodec/qtrle: Do not output duplicated frames on insufficient input"
Marton Balint
cus at passwd.hu
Sun May 5 21:51:08 EEST 2019
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 <cus at 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
More information about the ffmpeg-devel
mailing list