From 74dd822640b359beff6c843143e878fe39fc92c5 Mon Sep 17 00:00:00 2001
From: Zhao Zhili <quinkblack@foxmail.com>
Date: Wed, 22 Aug 2018 17:37:15 +0800
Subject: [PATCH] lavc/hevc_ps: fix crop info for monochrome
The values of SubWidthC and SubHeightC are 1 in the ITU-T H.265. The
current code use the value of 2.
---
libavcodec/hevc_ps.c | 16 ++++++++++++----
tests/fate/hevc.mak | 3 +++
tests/ref/fate/hevc-monochrome-crop | 6 ++++++
3 files changed, 21 insertions(+), 4 deletions(-)
create mode 100644 tests/ref/fate/hevc-monochrome-crop
@@ -70,6 +70,14 @@ static const AVRational vui_sar[] = {
{ 2, 1 },
};
+static const uint8_t hevc_sub_width_c[] = {
+ 1, 2, 2, 1
+};
+
+static const uint8_t hevc_sub_height_c[] = {
+ 1, 2, 1, 1
+};
+
static void remove_pps(HEVCParamSets *s, int id)
{
if (s->pps_list[id] && s->pps == (const HEVCPPS*)s->pps_list[id]->data)
@@ -628,8 +636,8 @@ static void decode_vui(GetBitContext *gb, AVCodecContext *avctx,
vui->default_display_window_flag = get_bits1(gb);
if (vui->default_display_window_flag) {
- int vert_mult = 1 + (sps->chroma_format_idc < 2);
- int horiz_mult = 1 + (sps->chroma_format_idc < 3);
+ int vert_mult = hevc_sub_height_c[sps->chroma_format_idc];
+ int horiz_mult = hevc_sub_width_c[sps->chroma_format_idc];
vui->def_disp_win.left_offset = get_ue_golomb_long(gb) * horiz_mult;
vui->def_disp_win.right_offset = get_ue_golomb_long(gb) * horiz_mult;
vui->def_disp_win.top_offset = get_ue_golomb_long(gb) * vert_mult;
@@ -923,8 +931,8 @@ int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id,
return ret;
if (get_bits1(gb)) { // pic_conformance_flag
- int vert_mult = 1 + (sps->chroma_format_idc < 2);
- int horiz_mult = 1 + (sps->chroma_format_idc < 3);
+ int vert_mult = hevc_sub_height_c[sps->chroma_format_idc];
+ int horiz_mult = hevc_sub_width_c[sps->chroma_format_idc];
sps->pic_conf_win.left_offset = get_ue_golomb_long(gb) * horiz_mult;
sps->pic_conf_win.right_offset = get_ue_golomb_long(gb) * horiz_mult;
sps->pic_conf_win.top_offset = get_ue_golomb_long(gb) * vert_mult;
@@ -250,6 +250,9 @@ FATE_HEVC-$(call DEMDEC, MOV, HEVC) += fate-hevc-extradata-reload
fate-hevc-extradata-reload: CMD = framemd5 -i $(TARGET_SAMPLES)/hevc/extradata-reload-multi-stsd.mov -sws_flags bitexact
+fate-hevc-monochrome-crop: CMD = ffprobe$(PROGSSUF)$(EXESUF) -show_entries stream=width,height,coded_width,coded_height $(TARGET_SAMPLES)/hevc/hevc-monochrome.hevc
+FATE_HEVC_FFPROBE-$(call DEMDEC, HEVC, HEVC) += fate-hevc-monochrome-crop
+
FATE_SAMPLES_AVCONV += $(FATE_HEVC-yes)
FATE_SAMPLES_FFPROBE += $(FATE_HEVC_FFPROBE-yes)
new file mode 100644
@@ -0,0 +1,6 @@
+[STREAM]
+width=384
+height=240
+coded_width=384
+coded_height=256
+[/STREAM]
--
2.9.5