From c3a06615bdf00fcf64747f12a0ba1a2c7fb2e576 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Wed, 18 Jan 2012 13:09:43 -0500 Subject: [PATCH] bethsoftvideo: fix palette reading. Return the correct number of consumed bytes and set *data_size = 0. Returned size is 1 too small, leading to that 1 byte being read as the next frame, which results in an extra blank frame at the beginning of the stream. --- libavcodec/bethsoftvideo.c | 10 ++- tests/ref/fate/bethsoft-vid | 141 ++++++++++++++++++------------------ 2 files changed, 78 insertions(+), 73 deletions(-) diff --git a/libavcodec/bethsoftvideo.c b/libavcodec/bethsoftvideo.c index fa0457cc66..743e387cbe 100644 --- a/libavcodec/bethsoftvideo.c +++ b/libavcodec/bethsoftvideo.c @@ -59,7 +59,7 @@ static int set_palette(BethsoftvidContext *ctx) palette[a] = bytestream2_get_be24u(&ctx->g) * 4; } ctx->frame.palette_has_changed = 1; - return 256*3; + return 0; } static int bethsoftvid_decode_frame(AVCodecContext *avctx, @@ -86,7 +86,13 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx, switch(block_type = bytestream2_get_byte(&vid->g)){ case PALETTE_BLOCK: { - return set_palette(vid); + int ret; + *data_size = 0; + if ((ret = set_palette(vid)) < 0) { + av_log(avctx, AV_LOG_ERROR, "error reading palette\n"); + return ret; + } + return bytestream2_tell(&vid->g); } case VIDEO_YOFF_P_FRAME: yoffset = bytestream2_get_le16(&vid->g); diff --git a/tests/ref/fate/bethsoft-vid b/tests/ref/fate/bethsoft-vid index 0886bfcf48..92c694b19e 100644 --- a/tests/ref/fate/bethsoft-vid +++ b/tests/ref/fate/bethsoft-vid @@ -1,91 +1,90 @@ -0, 0, 192000, 0xdecc683b +0, 0, 192000, 0x00000000 1, 0, 1480, 0x00000000 -0, 1500, 192000, 0x00000000 -0, 3000, 192000, 0x01a6cf45 -0, 4500, 192000, 0xd07d57e9 +0, 1500, 192000, 0x01a6cf45 +0, 3000, 192000, 0xd07d57e9 +0, 4500, 192000, 0x3cb1dff5 1, 5994, 1480, 0x20a92bd4 -0, 6000, 192000, 0x3cb1dff5 -0, 7500, 192000, 0xd1aaa8fb -0, 9000, 192000, 0x75f526cd -0, 10500, 192000, 0x0f673577 +0, 6000, 192000, 0xd1aaa8fb +0, 7500, 192000, 0x75f526cd +0, 9000, 192000, 0x0f673577 +0, 10500, 192000, 0x897b6781 1, 11988, 1850, 0xa9e48a74 -0, 12000, 192000, 0x897b6781 -0, 13500, 192000, 0x81e6b7f7 -0, 15000, 192000, 0x1f45ce61 -0, 16500, 192000, 0x5a0772a6 -0, 18000, 192000, 0xf78732b3 +0, 12000, 192000, 0x81e6b7f7 +0, 13500, 192000, 0x1f45ce61 +0, 15000, 192000, 0x5a0772a6 +0, 16500, 192000, 0xf78732b3 +0, 18000, 192000, 0x8427f9e5 1, 19481, 1480, 0x23ecd018 -0, 19500, 192000, 0x8427f9e5 -0, 21000, 192000, 0x40473f11 -0, 22500, 192000, 0x173ceebe -0, 24000, 192000, 0x136b9516 +0, 19500, 192000, 0x40473f11 +0, 21000, 192000, 0x173ceebe +0, 22500, 192000, 0x136b9516 +0, 24000, 192000, 0x138d11ae 1, 25475, 1480, 0x206bb915 -0, 25500, 192000, 0x138d11ae -0, 27000, 192000, 0x063dbff3 -0, 28500, 192000, 0x5280852f -0, 30000, 192000, 0x99943a8f +0, 25500, 192000, 0x063dbff3 +0, 27000, 192000, 0x5280852f +0, 28500, 192000, 0x99943a8f +0, 30000, 192000, 0x0330a728 1, 31469, 1850, 0xb0e10e75 -0, 31500, 192000, 0x0330a728 -0, 33000, 192000, 0x5d35467d -0, 34500, 192000, 0xfd436343 -0, 36000, 192000, 0xc323fcfe -0, 37500, 192000, 0x2a1530a0 +0, 31500, 192000, 0x5d35467d +0, 33000, 192000, 0xfd436343 +0, 34500, 192000, 0xc323fcfe +0, 36000, 192000, 0x2a1530a0 +0, 37500, 192000, 0xbd43bb60 1, 38961, 1480, 0x8d9baedd -0, 39000, 192000, 0xbd43bb60 -0, 40500, 192000, 0xa47f5eab -0, 42000, 192000, 0xff17f5f7 -0, 43500, 192000, 0xb4140b55 +0, 39000, 192000, 0xa47f5eab +0, 40500, 192000, 0xff17f5f7 +0, 42000, 192000, 0xb4140b55 +0, 43500, 192000, 0xb8782cc4 1, 44955, 1480, 0xb802aae1 -0, 45000, 192000, 0xb8782cc4 -0, 46500, 192000, 0x92975b8b -0, 48000, 192000, 0xf42a64d6 -0, 49500, 192000, 0x2cc7077d +0, 45000, 192000, 0x92975b8b +0, 46500, 192000, 0xf42a64d6 +0, 48000, 192000, 0x2cc7077d +0, 49500, 192000, 0x00080cc8 1, 50950, 1480, 0xecd7b5cc -0, 51000, 192000, 0x00080cc8 -0, 52500, 192000, 0x584b48f3 -0, 54000, 192000, 0xd68f57da -0, 55500, 192000, 0x60158422 +0, 51000, 192000, 0x584b48f3 +0, 52500, 192000, 0xd68f57da +0, 54000, 192000, 0x60158422 +0, 55500, 192000, 0xd7fb89e6 1, 56944, 1850, 0x16861355 -0, 57000, 192000, 0xd7fb89e6 -0, 58500, 192000, 0x97f1c76a -0, 60000, 192000, 0x46c4bb9e -0, 61500, 192000, 0xd32f9b66 -0, 63000, 192000, 0x74f43886 +0, 57000, 192000, 0x97f1c76a +0, 58500, 192000, 0x46c4bb9e +0, 60000, 192000, 0xd32f9b66 +0, 61500, 192000, 0x74f43886 +0, 63000, 192000, 0x3c4e47df 1, 64436, 1480, 0xa51690bd -0, 64500, 192000, 0x3c4e47df -0, 66000, 192000, 0xb5ac0a58 -0, 67500, 192000, 0xcc572b31 -0, 69000, 192000, 0xb1739d26 +0, 64500, 192000, 0xb5ac0a58 +0, 66000, 192000, 0xcc572b31 +0, 67500, 192000, 0xb1739d26 +0, 69000, 192000, 0x73da5473 1, 70430, 1480, 0xdd0b90d1 -0, 70500, 192000, 0x73da5473 -0, 72000, 192000, 0x5f79f5bc -0, 73500, 192000, 0x0affc0a0 -0, 75000, 192000, 0x2b4d5c1c +0, 70500, 192000, 0x5f79f5bc +0, 72000, 192000, 0x0affc0a0 +0, 73500, 192000, 0x2b4d5c1c +0, 75000, 192000, 0x309b41bc 1, 76424, 1850, 0x3ce6e333 -0, 76500, 192000, 0x309b41bc -0, 78000, 192000, 0xd42b6424 -0, 79500, 192000, 0x4795c948 -0, 81000, 192000, 0xbc1a3a8b -0, 82500, 192000, 0x16529c5b +0, 76500, 192000, 0xd42b6424 +0, 78000, 192000, 0x4795c948 +0, 79500, 192000, 0xbc1a3a8b +0, 81000, 192000, 0x16529c5b +0, 82500, 192000, 0x6b1b31ba 1, 83917, 1480, 0xf8ce8ea3 -0, 84000, 192000, 0x6b1b31ba -0, 85500, 192000, 0x569182ce -0, 87000, 192000, 0xe6ea9866 -0, 88500, 192000, 0x102c6076 +0, 84000, 192000, 0x569182ce +0, 85500, 192000, 0xe6ea9866 +0, 87000, 192000, 0x102c6076 +0, 88500, 192000, 0xb29f527a 1, 89911, 1480, 0xda4597af -0, 90000, 192000, 0xb29f527a -0, 91500, 192000, 0x040b4eee -0, 93000, 192000, 0x92574f4a -0, 94500, 192000, 0x1e8acdce +0, 90000, 192000, 0x040b4eee +0, 91500, 192000, 0x92574f4a +0, 93000, 192000, 0x1e8acdce +0, 94500, 192000, 0x1becf516 1, 95905, 1480, 0x918f7cb3 -0, 96000, 192000, 0x1becf516 -0, 97500, 192000, 0xb62e9776 -0, 99000, 192000, 0xed37a08e -0, 100500, 192000, 0xc0719912 +0, 96000, 192000, 0xb62e9776 +0, 97500, 192000, 0xed37a08e +0, 99000, 192000, 0xc0719912 +0, 100500, 192000, 0x24cf7a7e 1, 101899, 1850, 0xca6edb15 -0, 102000, 192000, 0x24cf7a7e -0, 103500, 192000, 0x0307f62f -0, 105000, 192000, 0x79b7417b +0, 102000, 192000, 0x0307f62f +0, 103500, 192000, 0x79b7417b 1, 109392, 1480, 0xba279597 1, 115386, 1480, 0xc5a38a9e 1, 121380, 1850, 0x8147eef5