summaryrefslogtreecommitdiff
path: root/libavcodec/flashsv.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-10-11 15:41:56 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-10-11 15:46:48 +0200
commit526cb36e4b23d2aae14bba0d19947137ee94f263 (patch)
tree5929c96c8c1bc7b58cfd665d78806d7208fa00da /libavcodec/flashsv.c
parenta75dd13b1bc2132f58bb438e6ca2935677191885 (diff)
parent4436f25a1682ada3f7226cb6fadf429946933161 (diff)
Merge commit '4436f25a1682ada3f7226cb6fadf429946933161'
* commit '4436f25a1682ada3f7226cb6fadf429946933161': build: remove references to unused EXTRAOBJS variable lavfi: convert input/ouput list compound literals to named objects fate: add h263 obmc vsynth tests avconv: remove bogus warning when using avconv -h without parameter averror: explicitly define AVERROR_* values flashsv: propagate inflateReset() errors indeo4/5: remove constant parameter num_bands from wavelet recomposition mxfdec: return error if no segments are available in mxf_get_sorted_table_segments Double motion vector range for HPEL interlaced picture in proper place Conflicts: libavcodec/v210dec.h libavfilter/af_aformat.c libavfilter/af_amix.c libavfilter/af_asyncts.c libavfilter/af_channelmap.c libavfilter/af_join.c libavfilter/asrc_anullsrc.c libavfilter/buffersrc.c libavfilter/f_setpts.c libavfilter/f_settb.c libavfilter/fifo.c libavfilter/src_movie.c libavfilter/vf_ass.c libavfilter/vf_blackframe.c libavfilter/vf_boxblur.c libavfilter/vf_delogo.c libavfilter/vf_drawbox.c libavfilter/vf_drawtext.c libavfilter/vf_fade.c libavfilter/vf_fieldorder.c libavfilter/vf_fps.c libavfilter/vf_hflip.c libavfilter/vf_overlay.c libavfilter/vf_pad.c libavfilter/vf_select.c libavfilter/vf_transpose.c libavfilter/vf_yadif.c libavfilter/vsrc_testsrc.c libavformat/mxfdec.c libavutil/error.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/flashsv.c')
-rw-r--r--libavcodec/flashsv.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/libavcodec/flashsv.c b/libavcodec/flashsv.c
index 367d189bee..8d6f39d97a 100644
--- a/libavcodec/flashsv.c
+++ b/libavcodec/flashsv.c
@@ -122,10 +122,11 @@ static av_cold int flashsv_decode_init(AVCodecContext *avctx)
}
-static void flashsv2_prime(FlashSVContext *s, uint8_t *src,
- int size, int unp_size)
+static int flashsv2_prime(FlashSVContext *s, uint8_t *src,
+ int size, int unp_size)
{
z_stream zs;
+ int zret; // Zlib return code
zs.zalloc = NULL;
zs.zfree = NULL;
@@ -145,13 +146,18 @@ static void flashsv2_prime(FlashSVContext *s, uint8_t *src,
deflate(&zs, Z_SYNC_FLUSH);
deflateEnd(&zs);
- inflateReset(&s->zstream);
+ if ((zret = inflateReset(&s->zstream)) != Z_OK) {
+ av_log(s->avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", zret);
+ return AVERROR_UNKNOWN;
+ }
s->zstream.next_in = s->deflate_block;
s->zstream.avail_in = s->deflate_block_size - zs.avail_out;
s->zstream.next_out = s->tmpblock;
s->zstream.avail_out = s->block_size * 3;
inflate(&s->zstream, Z_SYNC_FLUSH);
+
+ return 0;
}
static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt,
@@ -164,11 +170,14 @@ static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt,
int k;
int ret = inflateReset(&s->zstream);
if (ret != Z_OK) {
- //return -1;
+ av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", ret);
+ return AVERROR_UNKNOWN;
}
if (s->zlibprime_curr || s->zlibprime_prev) {
- flashsv2_prime(s, s->blocks[blk_idx].pos, s->blocks[blk_idx].size,
+ ret = flashsv2_prime(s, s->blocks[blk_idx].pos, s->blocks[blk_idx].size,
s->blocks[blk_idx].unp_size);
+ if (ret < 0)
+ return ret;
}
s->zstream.next_in = avpkt->data + get_bits_count(gb) / 8;
s->zstream.avail_in = block_size;