avcodec/dpx: Report color_range from DPX header

Signed-off-by: Harry Mallon <harry.mallon@codex.online>
This commit is contained in:
Harry Mallon 2020-12-07 10:32:12 +00:00 committed by Paul B Mahol
parent a041c0a031
commit 8232e01e41
2 changed files with 25 additions and 2 deletions

View File

@ -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;

View File

@ -1,6 +1,6 @@
[FRAME]
sample_aspect_ratio=1:1
color_range=unknown
color_range=pc
color_space=unknown
color_primaries=unknown
color_transfer=unknown