diff options
author | Paul B Mahol <onemda@gmail.com> | 2016-12-26 19:34:57 +0300 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2016-12-26 19:34:57 +0300 |
commit | 12461636ea8c2fd014bc835e1d95129f03ecf182 (patch) | |
tree | 22baac5c32018d43d927a994d7bde781c651614b /libavcodec/magicyuv.c | |
parent | 67db4ff3b66e96a20ddf1c264d07e146334ae88e (diff) |
avcodec/magicyuv: export colorspace and color_range for YUV
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavcodec/magicyuv.c')
-rw-r--r-- | libavcodec/magicyuv.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/libavcodec/magicyuv.c b/libavcodec/magicyuv.c index 16d70274a1..526df6f72f 100644 --- a/libavcodec/magicyuv.c +++ b/libavcodec/magicyuv.c @@ -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; |