|
|
|
@ -71,7 +71,7 @@ static void copy_region(uint8_t *sptr, uint8_t *dptr, |
|
|
|
|
int i; |
|
|
|
|
|
|
|
|
|
for (i = dx + h; i > dx; i--) { |
|
|
|
|
memcpy(dptr + (i * stride) + dy * 3, sptr, w * 3); |
|
|
|
|
memcpy(dptr + i * stride + dy * 3, sptr, w * 3); |
|
|
|
|
sptr += w * 3; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -86,7 +86,7 @@ static av_cold int flashsv_decode_init(AVCodecContext *avctx) |
|
|
|
|
s->zstream.zalloc = Z_NULL; |
|
|
|
|
s->zstream.zfree = Z_NULL; |
|
|
|
|
s->zstream.opaque = Z_NULL; |
|
|
|
|
zret = inflateInit(&(s->zstream)); |
|
|
|
|
zret = inflateInit(&s->zstream); |
|
|
|
|
if (zret != Z_OK) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret); |
|
|
|
|
return 1; |
|
|
|
@ -139,13 +139,13 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
|
s->block_size = s->block_width * s->block_height; |
|
|
|
|
|
|
|
|
|
/* init the image size once */ |
|
|
|
|
if ((avctx->width == 0) && (avctx->height == 0)) { |
|
|
|
|
if (avctx->width == 0 && avctx->height == 0) { |
|
|
|
|
avctx->width = s->image_width; |
|
|
|
|
avctx->height = s->image_height; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* check for changes of image width and image height */ |
|
|
|
|
if ((avctx->width != s->image_width) || (avctx->height != s->image_height)) { |
|
|
|
|
if (avctx->width != s->image_width || avctx->height != s->image_height) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "Frame width or height differs from first frames!\n"); |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "fh = %d, fv %d vs ch = %d, cv = %d\n", avctx->height, |
|
|
|
|
avctx->width, s->image_height, s->image_width); |
|
|
|
@ -187,23 +187,23 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
|
/* no change, don't do anything */ |
|
|
|
|
} else { |
|
|
|
|
/* decompress block */ |
|
|
|
|
int ret = inflateReset(&(s->zstream)); |
|
|
|
|
int ret = inflateReset(&s->zstream); |
|
|
|
|
if (ret != Z_OK) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "error in decompression (reset) of block %dx%d\n", i, j); |
|
|
|
|
/* return -1; */ |
|
|
|
|
} |
|
|
|
|
s->zstream.next_in = buf + (get_bits_count(&gb) / 8); |
|
|
|
|
s->zstream.next_in = buf + get_bits_count(&gb) / 8; |
|
|
|
|
s->zstream.avail_in = size; |
|
|
|
|
s->zstream.next_out = s->tmpblock; |
|
|
|
|
s->zstream.avail_out = s->block_size * 3; |
|
|
|
|
ret = inflate(&(s->zstream), Z_FINISH); |
|
|
|
|
ret = inflate(&s->zstream, Z_FINISH); |
|
|
|
|
if (ret == Z_DATA_ERROR) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "Zlib resync occurred\n"); |
|
|
|
|
inflateSync(&(s->zstream)); |
|
|
|
|
ret = inflate(&(s->zstream), Z_FINISH); |
|
|
|
|
inflateSync(&s->zstream); |
|
|
|
|
ret = inflate(&s->zstream, Z_FINISH); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ((ret != Z_OK) && (ret != Z_STREAM_END)) { |
|
|
|
|
if (ret != Z_OK && ret != Z_STREAM_END) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "error in decompression of block %dx%d: %d\n", i, j, ret); |
|
|
|
|
/* return -1; */ |
|
|
|
|
} |
|
|
|
@ -229,7 +229,7 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
|
static av_cold int flashsv_decode_end(AVCodecContext *avctx) |
|
|
|
|
{ |
|
|
|
|
FlashSVContext *s = avctx->priv_data; |
|
|
|
|
inflateEnd(&(s->zstream)); |
|
|
|
|
inflateEnd(&s->zstream); |
|
|
|
|
/* release the frame if needed */ |
|
|
|
|
if (s->frame.data[0]) |
|
|
|
|
avctx->release_buffer(avctx, &s->frame); |
|
|
|
|