diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-11-04 21:37:18 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-11-04 21:37:34 +0100 |
commit | b906d0488119f85ba871c8a7f089cdc499ce3500 (patch) | |
tree | d8b200b88dca39fa41ed156cad4fc8b0fd64f923 | |
parent | be41f21a3d6deb2714debe42530a28a6f3ee68d5 (diff) | |
parent | 885ec9242554ad25922258a595ec5e317922a412 (diff) | |
download | ffmpeg-b906d0488119f85ba871c8a7f089cdc499ce3500.tar.gz |
Merge commit '885ec9242554ad25922258a595ec5e317922a412'
* commit '885ec9242554ad25922258a595ec5e317922a412':
hevc: Use parsed VUI colorimetry in avcodec
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/hevc.c | 16 | ||||
-rw-r--r-- | libavcodec/hevc_ps.c | 8 |
2 files changed, 24 insertions, 0 deletions
diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c index 39365eded4..5564a697cb 100644 --- a/libavcodec/hevc.c +++ b/libavcodec/hevc.c @@ -296,6 +296,22 @@ static int set_sps(HEVCContext *s, const HEVCSPS *sps) s->avctx->sample_aspect_ratio = sps->vui.sar; s->avctx->has_b_frames = sps->temporal_layer[sps->max_sub_layers - 1].num_reorder_pics; + if (sps->vui.video_signal_type_present_flag) + s->avctx->color_range = sps->vui.video_full_range_flag ? AVCOL_RANGE_JPEG + : AVCOL_RANGE_MPEG; + else + s->avctx->color_range = AVCOL_RANGE_MPEG; + + if (sps->vui.colour_description_present_flag) { + s->avctx->color_primaries = sps->vui.colour_primaries; + s->avctx->color_trc = sps->vui.transfer_characteristic; + s->avctx->colorspace = sps->vui.matrix_coeffs; + } else { + s->avctx->color_primaries = AVCOL_PRI_UNSPECIFIED; + s->avctx->color_trc = AVCOL_TRC_UNSPECIFIED; + s->avctx->colorspace = AVCOL_SPC_UNSPECIFIED; + } + ff_hevc_pred_init(&s->hpc, sps->bit_depth); ff_hevc_dsp_init (&s->hevcdsp, sps->bit_depth); ff_videodsp_init (&s->vdsp, sps->bit_depth); diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c index 247e1f76bb..c6489f7948 100644 --- a/libavcodec/hevc_ps.c +++ b/libavcodec/hevc_ps.c @@ -461,6 +461,14 @@ static void decode_vui(HEVCContext *s, HEVCSPS *sps) vui->colour_primaries = get_bits(gb, 8); vui->transfer_characteristic = get_bits(gb, 8); vui->matrix_coeffs = get_bits(gb, 8); + + // Set invalid values to "unspecified" + if (vui->colour_primaries >= AVCOL_PRI_NB) + vui->colour_primaries = AVCOL_PRI_UNSPECIFIED; + if (vui->transfer_characteristic >= AVCOL_TRC_NB) + vui->transfer_characteristic = AVCOL_TRC_UNSPECIFIED; + if (vui->matrix_coeffs >= AVCOL_SPC_NB) + vui->matrix_coeffs = AVCOL_SPC_UNSPECIFIED; } } |