diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2012-10-18 11:08:01 +0200 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2012-10-19 07:58:51 +0200 |
commit | 8774d5835806e02e875e833f6a0b48b26413c730 (patch) | |
tree | 002adfeb3c313711e6399cac957b0d52265210b9 /libavcodec/bmv.c | |
parent | 1cd432e167b1a80853760c89a33606e2b5f229c2 (diff) | |
download | ffmpeg-8774d5835806e02e875e833f6a0b48b26413c730.tar.gz |
bmv: get a new frame on every decode_frame(), so we can use direct rendering
Diffstat (limited to 'libavcodec/bmv.c')
-rw-r--r-- | libavcodec/bmv.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/libavcodec/bmv.c b/libavcodec/bmv.c index 876c13f923..461111967d 100644 --- a/libavcodec/bmv.c +++ b/libavcodec/bmv.c @@ -196,7 +196,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac { BMVDecContext * const c = avctx->priv_data; int type, scr_off; - int i; + int i, ret; uint8_t *srcptr, *outptr; c->stream = pkt->data; @@ -237,6 +237,15 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac scr_off = 0; } + if (c->pic.data[0]) + avctx->release_buffer(avctx, &c->pic); + + c->pic.reference = 3; + if ((ret = avctx->get_buffer(avctx, &c->pic)) < 0) { + av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); + return ret; + } + if (decode_bmv_frame(c->stream, pkt->size - (c->stream - pkt->data), c->frame, scr_off)) { av_log(avctx, AV_LOG_ERROR, "Error decoding frame data\n"); return AVERROR_INVALIDDATA; @@ -268,12 +277,6 @@ static av_cold int decode_init(AVCodecContext *avctx) c->avctx = avctx; avctx->pix_fmt = AV_PIX_FMT_PAL8; - c->pic.reference = 1; - if (avctx->get_buffer(avctx, &c->pic) < 0) { - av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); - return -1; - } - c->frame = c->frame_base + 640; return 0; @@ -365,6 +368,7 @@ AVCodec ff_bmv_video_decoder = { .init = decode_init, .close = decode_end, .decode = decode_frame, + .capabilities = CODEC_CAP_DR1, .long_name = NULL_IF_CONFIG_SMALL("Discworld II BMV video"), }; |