From dff6197dfb9b2d145729885c63f865c5fdd184aa Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Wed, 30 Jan 2013 15:04:51 +0100 Subject: nuv: do not rely on get_buffer() initializing the frame. --- libavcodec/nuv.c | 11 +++++++++-- tests/ref/fate/nuv-rtjpeg-fh | 14 +++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/libavcodec/nuv.c b/libavcodec/nuv.c index f7d348a486..bba4df39fc 100644 --- a/libavcodec/nuv.c +++ b/libavcodec/nuv.c @@ -149,7 +149,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVFrame *picture = data; int orig_size = buf_size; int keyframe; - int result; + int result, init_frame = !avctx->frame_number; enum { NUV_UNCOMPRESSED = '0', NUV_RTJPEG = '1', @@ -221,8 +221,10 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, buf_size -= RTJPEG_HEADER_SIZE; } - if (keyframe && c->pic.data[0]) + if (keyframe && c->pic.data[0]) { avctx->release_buffer(avctx, &c->pic); + init_frame = 1; + } c->pic.reference = 3; c->pic.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_READABLE | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE; @@ -231,6 +233,11 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); return result; } + if (init_frame) { + memset(c->pic.data[0], 0, avctx->height * c->pic.linesize[0]); + memset(c->pic.data[1], 0x80, avctx->height * c->pic.linesize[1] / 2); + memset(c->pic.data[2], 0x80, avctx->height * c->pic.linesize[2] / 2); + } c->pic.pict_type = keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; c->pic.key_frame = keyframe; diff --git a/tests/ref/fate/nuv-rtjpeg-fh b/tests/ref/fate/nuv-rtjpeg-fh index 92aa122ac3..71e6bf9713 100644 --- a/tests/ref/fate/nuv-rtjpeg-fh +++ b/tests/ref/fate/nuv-rtjpeg-fh @@ -1,11 +1,11 @@ #tb 0: 1/1000 -0, 0, 0, 0, 221184, 0xf48c94f6 -0, 40, 40, 0, 221184, 0x89b625b2 -0, 60, 60, 0, 221184, 0x37e04714 -0, 80, 80, 0, 221184, 0x4f4c5224 -0, 100, 100, 0, 221184, 0x9193c9f1 -0, 120, 120, 0, 221184, 0x5d1a6197 -0, 140, 140, 0, 221184, 0x40cd51e7 +0, 0, 0, 0, 221184, 0xdaf54f83 +0, 40, 40, 0, 221184, 0xeea3e3b4 +0, 60, 60, 0, 221184, 0x5f1a8525 +0, 80, 80, 0, 221184, 0x950bb170 +0, 100, 100, 0, 221184, 0x6262e94c +0, 120, 120, 0, 221184, 0x28752197 +0, 140, 140, 0, 221184, 0x0c2811e7 0, 160, 160, 0, 221184, 0xb2c1a729 0, 200, 200, 0, 221184, 0x998d6144 0, 220, 220, 0, 221184, 0xf5d52311 -- cgit v1.2.3