summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2012-10-17 14:04:12 +0000
committerPaul B Mahol <onemda@gmail.com>2012-10-19 00:08:01 +0000
commit527224830aad6aaf5fc5ed9ff6c5f12c80ff906c (patch)
treed885809dab525baf831bfbe5a947b0b54de969b0
parentaadb7b3ac4fb07d003329cd5bcc4c6ab5b468510 (diff)
idcinvideo: if decoding fails return error
Previously if frame decoding failed it would be silently reported as valid frame. The fate ref is updated because sample have truncated last video packet. While here return meaningful error codes. Signed-off-by: Paul B Mahol <onemda@gmail.com>
-rw-r--r--libavcodec/idcinvideo.c14
-rw-r--r--tests/ref/fate/id-cin-video1
2 files changed, 9 insertions, 6 deletions
diff --git a/libavcodec/idcinvideo.c b/libavcodec/idcinvideo.c
index eedc4fc1d1..9185f88f83 100644
--- a/libavcodec/idcinvideo.c
+++ b/libavcodec/idcinvideo.c
@@ -173,7 +173,7 @@ static av_cold int idcin_decode_init(AVCodecContext *avctx)
return 0;
}
-static void idcin_decode_vlcs(IdcinContext *s)
+static int idcin_decode_vlcs(IdcinContext *s)
{
hnode *hnodes;
long x, y;
@@ -192,7 +192,7 @@ static void idcin_decode_vlcs(IdcinContext *s)
if(!bit_pos) {
if(dat_pos >= s->size) {
av_log(s->avctx, AV_LOG_ERROR, "Huffman decode error.\n");
- return;
+ return -1;
}
bit_pos = 8;
v = s->buf[dat_pos++];
@@ -207,6 +207,8 @@ static void idcin_decode_vlcs(IdcinContext *s)
prev = node_num;
}
}
+
+ return 0;
}
static int idcin_decode_frame(AVCodecContext *avctx,
@@ -217,6 +219,7 @@ static int idcin_decode_frame(AVCodecContext *avctx,
int buf_size = avpkt->size;
IdcinContext *s = avctx->priv_data;
const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
+ int ret;
s->buf = buf;
s->size = buf_size;
@@ -224,12 +227,13 @@ static int idcin_decode_frame(AVCodecContext *avctx,
if (s->frame.data[0])
avctx->release_buffer(avctx, &s->frame);
- if (avctx->get_buffer(avctx, &s->frame)) {
+ if ((ret = avctx->get_buffer(avctx, &s->frame))) {
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
- return -1;
+ return ret;
}
- idcin_decode_vlcs(s);
+ if (idcin_decode_vlcs(s))
+ return AVERROR_INVALIDDATA;
if (pal) {
s->frame.palette_has_changed = 1;
diff --git a/tests/ref/fate/id-cin-video b/tests/ref/fate/id-cin-video
index 241cae509e..f55544f831 100644
--- a/tests/ref/fate/id-cin-video
+++ b/tests/ref/fate/id-cin-video
@@ -104,4 +104,3 @@
1, 78750, 78750, 1575, 6300, 0xe3bfa403
0, 51, 51, 1, 230400, 0x488de02d
1, 80325, 80325, 1575, 6300, 0x2c5bd9c9
-0, 52, 52, 1, 230400, 0x488de02d