X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fflashsv.c;h=dd8236018a94f69375ad0e182d4885d89bf5a259;hb=2ba8301769b770ec96ea8f4c02da78a25c6458fe;hp=fea8e2224cd948829a1ba07873558d73c2a4340e;hpb=b78e7197a81e193827cf2408fe25bc1f14843a72;p=ffmpeg diff --git a/libavcodec/flashsv.c b/libavcodec/flashsv.c index fea8e2224cd..dd8236018a9 100644 --- a/libavcodec/flashsv.c +++ b/libavcodec/flashsv.c @@ -21,7 +21,7 @@ */ /** - * @file flashsv.c + * @file libavcodec/flashsv.c * Flash Screen Video decoder * @author Alex Beregszaszi * @author Benjamin Larsson @@ -50,13 +50,10 @@ #include #include -#include "common.h" #include "avcodec.h" -#include "bitstream.h" +#include "get_bits.h" -#ifdef CONFIG_ZLIB #include -#endif typedef struct FlashSVContext { AVCodecContext *avctx; @@ -65,9 +62,7 @@ typedef struct FlashSVContext { int block_width, block_height; uint8_t* tmpblock; int block_size; -#ifdef CONFIG_ZLIB z_stream zstream; -#endif } FlashSVContext; @@ -84,13 +79,12 @@ static void copy_region(uint8_t *sptr, uint8_t *dptr, } -static int flashsv_decode_init(AVCodecContext *avctx) +static av_cold int flashsv_decode_init(AVCodecContext *avctx) { - FlashSVContext *s = (FlashSVContext *)avctx->priv_data; + FlashSVContext *s = avctx->priv_data; int zret; // Zlib return code s->avctx = avctx; -#ifdef CONFIG_ZLIB s->zstream.zalloc = Z_NULL; s->zstream.zfree = Z_NULL; s->zstream.opaque = Z_NULL; @@ -99,12 +93,7 @@ static int flashsv_decode_init(AVCodecContext *avctx) av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret); return 1; } -#else - av_log(avctx, AV_LOG_ERROR, "Zlib support not compiled. Needed for the decoder.\n"); - return 1; -#endif avctx->pix_fmt = PIX_FMT_BGR24; - avctx->has_b_frames = 0; s->frame.data[0] = NULL; return 0; @@ -113,9 +102,11 @@ static int flashsv_decode_init(AVCodecContext *avctx) static int flashsv_decode_frame(AVCodecContext *avctx, void *data, int *data_size, - uint8_t *buf, int buf_size) + AVPacket *avpkt) { - FlashSVContext *s = (FlashSVContext *)avctx->priv_data; + const uint8_t *buf = avpkt->data; + int buf_size = avpkt->size; + FlashSVContext *s = avctx->priv_data; int h_blocks, v_blocks, h_part, v_part, i, j; GetBitContext gb; @@ -145,12 +136,12 @@ static int flashsv_decode_frame(AVCodecContext *avctx, if(s->block_size < s->block_width*s->block_height) { if (s->tmpblock != NULL) av_free(s->tmpblock); - s->block_size = s->block_width*s->block_height; - if ((s->tmpblock = av_malloc(3*s->block_size)) == NULL) { + if ((s->tmpblock = av_malloc(3*s->block_width*s->block_height)) == NULL) { av_log(avctx, AV_LOG_ERROR, "Can't allocate decompression buffer.\n"); return -1; } } + s->block_size = s->block_width*s->block_height; /* init the image size once */ if((avctx->width==0) && (avctx->height==0)){ @@ -198,7 +189,6 @@ static int flashsv_decode_frame(AVCodecContext *avctx, /* no change, don't do anything */ } else { /* decompress block */ -#ifdef CONFIG_ZLIB int ret = inflateReset(&(s->zstream)); if (ret != Z_OK) { @@ -212,7 +202,7 @@ static int flashsv_decode_frame(AVCodecContext *avctx, ret = inflate(&(s->zstream), Z_FINISH); if (ret == Z_DATA_ERROR) { - av_log(avctx, AV_LOG_ERROR, "Zlib resync occured\n"); + av_log(avctx, AV_LOG_ERROR, "Zlib resync occurred\n"); inflateSync(&(s->zstream)); ret = inflate(&(s->zstream), Z_FINISH); } @@ -222,12 +212,8 @@ static int flashsv_decode_frame(AVCodecContext *avctx, av_log(avctx, AV_LOG_ERROR, "error in decompression of block %dx%d: %d\n", i, j, ret); /* return -1; */ } -#else - av_log(avctx, AV_LOG_ERROR, "Zlib support not compiled in.\n"); - return -1; -#endif copy_region(s->tmpblock, s->frame.data[0], s->image_height-(hp+hs+1), wp, hs, ws, s->frame.linesize[0]); - skip_bits(&gb, 8*size); /* skip the consumed bits */ + skip_bits_long(&gb, 8*size); /* skip the consumed bits */ } } } @@ -244,12 +230,10 @@ static int flashsv_decode_frame(AVCodecContext *avctx, } -static int flashsv_decode_end(AVCodecContext *avctx) +static av_cold int flashsv_decode_end(AVCodecContext *avctx) { - FlashSVContext *s = (FlashSVContext *)avctx->priv_data; -#ifdef CONFIG_ZLIB + FlashSVContext *s = avctx->priv_data; inflateEnd(&(s->zstream)); -#endif /* release the frame if needed */ if (s->frame.data[0]) avctx->release_buffer(avctx, &s->frame); @@ -272,5 +256,6 @@ AVCodec flashsv_decoder = { flashsv_decode_end, flashsv_decode_frame, CODEC_CAP_DR1, - .pix_fmts = (enum PixelFormat[]){PIX_FMT_BGR24, -1}, + .pix_fmts = (const enum PixelFormat[]){PIX_FMT_BGR24, PIX_FMT_NONE}, + .long_name = NULL_IF_CONFIG_SMALL("Flash Screen Video v1"), };