nuv: do not rely on get_buffer() initializing the frame.
authorAnton Khirnov <anton@khirnov.net>
Wed, 30 Jan 2013 14:04:51 +0000 (15:04 +0100)
committerAnton Khirnov <anton@khirnov.net>
Wed, 6 Feb 2013 09:21:52 +0000 (10:21 +0100)
libavcodec/nuv.c
tests/ref/fate/nuv-rtjpeg-fh

index f7d348a..bba4df3 100644 (file)
@@ -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;
index 92aa122..71e6bf9 100644 (file)
@@ -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