X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fmotionpixels.c;h=6ef9b0b351074aafc67ed02dd7dfd0378633815c;hb=8b09d917e7dc7d7f2ace31419f802d4ff518236c;hp=8a3c8709863fd585252be2ad6d591c262abfea70;hpb=b5da848facd41169283d7bfe568b83bdfa7fc42e;p=ffmpeg diff --git a/libavcodec/motionpixels.c b/libavcodec/motionpixels.c index 8a3c8709863..6ef9b0b3510 100644 --- a/libavcodec/motionpixels.c +++ b/libavcodec/motionpixels.c @@ -22,6 +22,7 @@ #include "avcodec.h" #include "get_bits.h" #include "dsputil.h" +#include "internal.h" #define MAX_HUFF_CODES 16 @@ -62,7 +63,8 @@ static av_cold int mp_decode_init(AVCodecContext *avctx) mp->offset_bits_len = av_log2(avctx->width * avctx->height) + 1; mp->vpt = av_mallocz(avctx->height * sizeof(YuvPixel)); mp->hpt = av_mallocz(h4 * w4 / 16 * sizeof(YuvPixel)); - avctx->pix_fmt = PIX_FMT_RGB555; + avctx->pix_fmt = AV_PIX_FMT_RGB555; + avcodec_get_frame_defaults(&mp->frame); return 0; } @@ -237,20 +239,18 @@ static void mp_decode_frame_helper(MotionPixelsContext *mp, GetBitContext *gb) } static int mp_decode_frame(AVCodecContext *avctx, - void *data, int *data_size, + void *data, int *got_frame, AVPacket *avpkt) { const uint8_t *buf = avpkt->data; int buf_size = avpkt->size; MotionPixelsContext *mp = avctx->priv_data; GetBitContext gb; - int i, count1, count2, sz; + int i, count1, count2, sz, ret; - mp->frame.reference = 1; - mp->frame.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE; - if (avctx->reget_buffer(avctx, &mp->frame)) { + if ((ret = ff_reget_buffer(avctx, &mp->frame)) < 0) { av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n"); - return -1; + return ret; } /* le32 bitstream msb first */ @@ -295,8 +295,9 @@ static int mp_decode_frame(AVCodecContext *avctx, ff_free_vlc(&mp->vlc); end: - *data_size = sizeof(AVFrame); - *(AVFrame *)data = mp->frame; + if ((ret = av_frame_ref(data, &mp->frame)) < 0) + return ret; + *got_frame = 1; return buf_size; } @@ -308,8 +309,7 @@ static av_cold int mp_decode_end(AVCodecContext *avctx) av_freep(&mp->vpt); av_freep(&mp->hpt); av_freep(&mp->bswapbuf); - if (mp->frame.data[0]) - avctx->release_buffer(avctx, &mp->frame); + av_frame_unref(&mp->frame); return 0; } @@ -317,7 +317,7 @@ static av_cold int mp_decode_end(AVCodecContext *avctx) AVCodec ff_motionpixels_decoder = { .name = "motionpixels", .type = AVMEDIA_TYPE_VIDEO, - .id = CODEC_ID_MOTIONPIXELS, + .id = AV_CODEC_ID_MOTIONPIXELS, .priv_data_size = sizeof(MotionPixelsContext), .init = mp_decode_init, .close = mp_decode_end,