X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=libavcodec%2Fzmbv.c;h=bfd6067cd3e861c06f6f79807b10e55c0c367970;hb=b92d483bac3c833430a48eefbd0bfbe636772c27;hp=76d8b654a30c3631e5e685cb1b0d0cacb1d25ad3;hpb=19b95df09ec3ca56b00104e68def64b8b29560b0;p=ffmpeg diff --git a/libavcodec/zmbv.c b/libavcodec/zmbv.c index 76d8b654a30..bfd6067cd3e 100644 --- a/libavcodec/zmbv.c +++ b/libavcodec/zmbv.c @@ -20,13 +20,14 @@ */ /** - * @file zmbv.c + * @file libavcodec/zmbv.c * Zip Motion Blocks Video decoder */ #include #include +#include "libavutil/intreadwrite.h" #include "avcodec.h" #include @@ -391,8 +392,10 @@ static int zmbv_decode_intra(ZmbvContext *c) return 0; } -static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8_t *buf, int buf_size) +static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt) { + const uint8_t *buf = avpkt->data; + int buf_size = avpkt->size; ZmbvContext * const c = avctx->priv_data; uint8_t *outptr; int zret = Z_OK; // Zlib return code @@ -431,6 +434,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8 } if(c->bw == 0 || c->bh == 0) { av_log(avctx, AV_LOG_ERROR, "Unsupported block size %ix%i\n", c->bw, c->bh); + return -1; } if(c->comp != 0 && c->comp != 1) { av_log(avctx, AV_LOG_ERROR, "Unsupported compression type %i\n", c->comp); @@ -504,7 +508,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8 } else { c->pic.key_frame = 0; c->pic.pict_type = FF_P_TYPE; - c->decode_xor(c); + if(c->decomp_len) + c->decode_xor(c); } /* update frames */ @@ -588,21 +593,17 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8 * Init zmbv decoder * */ -static int decode_init(AVCodecContext *avctx) +static av_cold int decode_init(AVCodecContext *avctx) { ZmbvContext * const c = avctx->priv_data; int zret; // Zlib return code c->avctx = avctx; - c->pic.data[0] = NULL; c->width = avctx->width; c->height = avctx->height; - if (avcodec_check_dimensions(avctx, avctx->width, avctx->height) < 0) { - return 1; - } - c->bpp = avctx->bits_per_sample; + c->bpp = avctx->bits_per_coded_sample; // Needed if zlib unused or init aborted before inflateInit memset(&(c->zstream), 0, sizeof(z_stream)); @@ -637,7 +638,7 @@ static int decode_init(AVCodecContext *avctx) * Uninit zmbv decoder * */ -static int decode_end(AVCodecContext *avctx) +static av_cold int decode_end(AVCodecContext *avctx) { ZmbvContext * const c = avctx->priv_data; @@ -654,12 +655,14 @@ static int decode_end(AVCodecContext *avctx) AVCodec zmbv_decoder = { "zmbv", - CODEC_TYPE_VIDEO, + AVMEDIA_TYPE_VIDEO, CODEC_ID_ZMBV, sizeof(ZmbvContext), decode_init, NULL, decode_end, - decode_frame + decode_frame, + CODEC_CAP_DR1, + .long_name = NULL_IF_CONFIG_SMALL("Zip Motion Blocks Video"), };