aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2013-01-30 15:04:51 +0100
committerAnton Khirnov <anton@khirnov.net>2013-02-06 10:21:52 +0100
commitdff6197dfb9b2d145729885c63f865c5fdd184aa (patch)
treed86e7f8585069d213d39fea8d695ff84dc94f719
parent39a9fdd00fea6d2e40d4b9ecba38337549603a7d (diff)
downloadffmpeg-dff6197dfb9b2d145729885c63f865c5fdd184aa.tar.gz
nuv: do not rely on get_buffer() initializing the frame.
-rw-r--r--libavcodec/nuv.c11
-rw-r--r--tests/ref/fate/nuv-rtjpeg-fh14
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