vp8: initialize color space and range properties
authorVittorio Giovara <vittorio.giovara@gmail.com>
Sun, 5 Oct 2014 21:58:50 +0000 (22:58 +0100)
committerVittorio Giovara <vittorio.giovara@gmail.com>
Wed, 8 Oct 2014 17:17:50 +0000 (18:17 +0100)
libavcodec/vp8.c
libavcodec/vp8.h

index 5426555..0d2cab3 100644 (file)
@@ -670,9 +670,10 @@ static int vp8_decode_frame_header(VP8Context *s, const uint8_t *buf, int buf_si
     buf_size -= header_size;
 
     if (s->keyframe) {
-        if (vp8_rac_get(c))
+        s->colorspace = vp8_rac_get(c);
+        if (s->colorspace)
             av_log(s->avctx, AV_LOG_WARNING, "Unspecified colorspace\n");
-        vp8_rac_get(c); // whether we can skip clamping in dsp functions
+        s->fullrange = vp8_rac_get(c);
     }
 
     if ((s->segmentation.enabled = vp8_rac_get(c)))
@@ -2490,6 +2491,13 @@ int vp78_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
 
     curframe = s->framep[VP56_FRAME_CURRENT] = vp8_find_free_buffer(s);
 
+    if (!s->colorspace)
+        avctx->colorspace = AVCOL_SPC_BT470BG;
+    if (s->fullrange)
+        avctx->color_range = AVCOL_RANGE_JPEG;
+    else
+        avctx->color_range = AVCOL_RANGE_MPEG;
+
     /* Given that arithmetic probabilities are updated every frame, it's quite
      * likely that the values we have on a random interframe are complete
      * junk if we didn't start decode on a keyframe. So just don't display
index 365e7b7..2919a14 100644 (file)
@@ -264,6 +264,9 @@ typedef struct VP8Context {
     vp8_mc_func put_pixels_tab[3][3][3];
     VP8Frame frames[5];
 
+    uint8_t colorspace; ///< 0 is the only value allowed (meaning bt601)
+    uint8_t fullrange;  ///< whether we can skip clamping in dsp functions
+
     int num_jobs;
     /**
      * This describes the macroblock memory layout.