]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/magicyuv: export colorspace and color_range for YUV
authorPaul B Mahol <onemda@gmail.com>
Mon, 26 Dec 2016 16:34:57 +0000 (17:34 +0100)
committerPaul B Mahol <onemda@gmail.com>
Mon, 26 Dec 2016 16:34:57 +0000 (17:34 +0100)
Signed-off-by: Paul B Mahol <onemda@gmail.com>
libavcodec/magicyuv.c

index 16d70274a1415c624577529c1ee30aaccf4d5495..526df6f72f6e811351f3103b8e2855ce0f600fbd 100644 (file)
@@ -57,6 +57,8 @@ typedef struct MagicYUVContext {
     int               nb_slices;
     int               planes;         // number of encoded planes in bitstream
     int               decorrelate;    // postprocessing work
+    int               color_matrix;   // video color matrix
+    int               flags;
     int               interlaced;     // video is interlaced
     uint8_t          *buf;            // pointer to AVPacket->data
     int               hshift[4];
@@ -568,8 +570,10 @@ static int magy_decode_frame(AVCodecContext *avctx, void *data,
     }
     s->planes = av_pix_fmt_count_planes(avctx->pix_fmt);
 
-    bytestream2_skip(&gbyte, 2);
-    s->interlaced = !!(bytestream2_get_byte(&gbyte) & 2);
+    bytestream2_skip(&gbyte, 1);
+    s->color_matrix = bytestream2_get_byte(&gbyte);
+    s->flags        = bytestream2_get_byte(&gbyte);
+    s->interlaced   = !!(s->flags & 2);
     bytestream2_skip(&gbyte, 3);
 
     width  = bytestream2_get_le32(&gbyte);
@@ -659,6 +663,16 @@ static int magy_decode_frame(AVCodecContext *avctx, void *data,
         avctx->pix_fmt == AV_PIX_FMT_GBRAP10) {
         FFSWAP(uint8_t*, p->data[0], p->data[1]);
         FFSWAP(int, p->linesize[0], p->linesize[1]);
+    } else {
+        switch (s->color_matrix) {
+        case 1:
+            p->colorspace = AVCOL_SPC_BT470BG;
+            break;
+        case 2:
+            p->colorspace = AVCOL_SPC_BT709;
+            break;
+        }
+        p->color_range = (s->flags & 4) ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG;
     }
 
     *got_frame = 1;