diff options
author | Anton Khirnov <anton@khirnov.net> | 2012-11-21 21:34:46 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2013-03-08 07:38:30 +0100 |
commit | 759001c534287a96dc96d1e274665feb7059145d (patch) | |
tree | 6ace9560c20aa30db92067c5b45d7bd86e458d10 /libavcodec/dsicinav.c | |
parent | 6e7b50b4270116ded8b874d76cb7c5b1a0341827 (diff) | |
download | ffmpeg-759001c534287a96dc96d1e274665feb7059145d.tar.gz |
lavc decoders: work with refcounted frames.
Diffstat (limited to 'libavcodec/dsicinav.c')
-rw-r--r-- | libavcodec/dsicinav.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/libavcodec/dsicinav.c b/libavcodec/dsicinav.c index 4da7d26670..39479546cc 100644 --- a/libavcodec/dsicinav.c +++ b/libavcodec/dsicinav.c @@ -281,10 +281,9 @@ static int cinvideo_decode_frame(AVCodecContext *avctx, break; } - cin->frame.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE; - if (avctx->reget_buffer(avctx, &cin->frame)) { + if ((res = ff_reget_buffer(avctx, &cin->frame)) < 0) { av_log(cin->avctx, AV_LOG_ERROR, "delphinecinvideo: reget_buffer() failed to allocate a frame\n"); - return -1; + return res; } memcpy(cin->frame.data[1], cin->palette, sizeof(cin->palette)); @@ -296,8 +295,10 @@ static int cinvideo_decode_frame(AVCodecContext *avctx, FFSWAP(uint8_t *, cin->bitmap_table[CIN_CUR_BMP], cin->bitmap_table[CIN_PRE_BMP]); + if ((res = av_frame_ref(data, &cin->frame)) < 0) + return res; + *got_frame = 1; - *(AVFrame *)data = cin->frame; return buf_size; } @@ -307,8 +308,7 @@ static av_cold int cinvideo_decode_end(AVCodecContext *avctx) CinVideoContext *cin = avctx->priv_data; int i; - if (cin->frame.data[0]) - avctx->release_buffer(avctx, &cin->frame); + av_frame_unref(&cin->frame); for (i = 0; i < 3; ++i) av_free(cin->bitmap_table[i]); @@ -341,7 +341,7 @@ static int cinaudio_decode_frame(AVCodecContext *avctx, void *data, /* get output buffer */ frame->nb_samples = avpkt->size - cin->initial_decode_frame; - if ((ret = ff_get_buffer(avctx, frame)) < 0) { + if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) { av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return ret; } |