diff options
author | Harry Mallon <harry.mallon@codex.online> | 2020-12-07 10:32:12 +0000 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2020-12-17 13:02:49 +0100 |
commit | 8232e01e41488bc3f4504b3de241106a4cca7cb7 (patch) | |
tree | 128f68bef18559865bd290590b155d0fbc442ea1 /libavcodec/dpx.c | |
parent | a041c0a0315f0941ddc2b3258c74edf40f86c8f5 (diff) | |
download | ffmpeg-8232e01e41488bc3f4504b3de241106a4cca7cb7.tar.gz |
avcodec/dpx: Report color_range from DPX header
Signed-off-by: Harry Mallon <harry.mallon@codex.online>
Diffstat (limited to 'libavcodec/dpx.c')
-rw-r--r-- | libavcodec/dpx.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/libavcodec/dpx.c b/libavcodec/dpx.c index 51428459ef..577171258a 100644 --- a/libavcodec/dpx.c +++ b/libavcodec/dpx.c @@ -132,7 +132,7 @@ static int decode_frame(AVCodecContext *avctx, unsigned int offset; int magic_num, endian; - int x, y, stride, i, ret; + int x, y, stride, i, j, ret; int w, h, bits_per_color, descriptor, elements, packing; int encoding, need_align = 0; @@ -268,6 +268,29 @@ static int decode_frame(AVCodecContext *avctx, } } + /* color range from television header */ + if (offset >= 1964 + 4) { + buf = avpkt->data + 1952; + i = read32(&buf, endian); + + buf = avpkt->data + 1964; + j = read32(&buf, endian); + + if (i != 0xFFFFFFFF && j != 0xFFFFFFFF) { + float minCV, maxCV; + minCV = av_int2float(i); + maxCV = av_int2float(j); + if (bits_per_color >= 1 && + minCV == 0.0f && maxCV == ((1<<bits_per_color) - 1)) { + avctx->color_range = AVCOL_RANGE_JPEG; + } else if (bits_per_color >= 8 && + minCV == (1 <<(bits_per_color - 4)) && + maxCV == (235<<(bits_per_color - 8))) { + avctx->color_range = AVCOL_RANGE_MPEG; + } + } + } + switch (descriptor) { case 6: // Y elements = 1; |