Browse Source

avcodec/dpx: Report color_range from DPX header

Signed-off-by: Harry Mallon <harry.mallon@codex.online>
tags/n4.4
Harry Mallon Paul B Mahol 5 years ago
parent
commit
8232e01e41
2 changed files with 25 additions and 2 deletions
  1. +24
    -1
      libavcodec/dpx.c
  2. +1
    -1
      tests/ref/fate/dpx-probe

+ 24
- 1
libavcodec/dpx.c 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;


+ 1
- 1
tests/ref/fate/dpx-probe 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


Loading…
Cancel
Save