X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fhevc_ps.c;h=ce3f3dfa8e9f3d1a2f8b652869a0a58c4784898f;hb=c18fdc86928e0b40bb634a8d8ca071270fcac2d2;hp=64d6e2f064ef2824b08db7be07d3b192773cc3b4;hpb=cbe3f28d0ac7e102edf1dfd7733a303016a1b788;p=ffmpeg diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c index 64d6e2f064e..ce3f3dfa8e9 100644 --- a/libavcodec/hevc_ps.c +++ b/libavcodec/hevc_ps.c @@ -561,6 +561,19 @@ static void decode_vui(GetBitContext *gb, AVCodecContext *avctx, vui->transfer_characteristic = AVCOL_TRC_UNSPECIFIED; if (vui->matrix_coeffs >= AVCOL_SPC_NB) vui->matrix_coeffs = AVCOL_SPC_UNSPECIFIED; + if (vui->matrix_coeffs == AVCOL_SPC_RGB) { + switch (sps->pix_fmt) { + case AV_PIX_FMT_YUV444P: + sps->pix_fmt = AV_PIX_FMT_GBRP; + break; + case AV_PIX_FMT_YUV444P10: + sps->pix_fmt = AV_PIX_FMT_GBRP10; + break; + case AV_PIX_FMT_YUV444P12: + sps->pix_fmt = AV_PIX_FMT_GBRP12; + break; + } + } } } @@ -583,11 +596,12 @@ static void decode_vui(GetBitContext *gb, AVCodecContext *avctx, memcpy(&backup, gb, sizeof(backup)); if (vui->default_display_window_flag) { - //TODO: * 2 is only valid for 420 - vui->def_disp_win.left_offset = get_ue_golomb_long(gb) * 2; - vui->def_disp_win.right_offset = get_ue_golomb_long(gb) * 2; - vui->def_disp_win.top_offset = get_ue_golomb_long(gb) * 2; - vui->def_disp_win.bottom_offset = get_ue_golomb_long(gb) * 2; + int vert_mult = 1 + (sps->chroma_format_idc < 2); + int horiz_mult = 1 + (sps->chroma_format_idc < 3); + 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; + vui->def_disp_win.bottom_offset = get_ue_golomb_long(gb) * vert_mult; if (apply_defdispwin && avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP) { @@ -856,11 +870,12 @@ int ff_hevc_parse_sps(HEVCSPS *sps, GetBitContext *gb, unsigned int *sps_id, return ret; if (get_bits1(gb)) { // pic_conformance_flag - //TODO: * 2 is only valid for 420 - sps->pic_conf_win.left_offset = get_ue_golomb_long(gb) * 2; - sps->pic_conf_win.right_offset = get_ue_golomb_long(gb) * 2; - sps->pic_conf_win.top_offset = get_ue_golomb_long(gb) * 2; - sps->pic_conf_win.bottom_offset = get_ue_golomb_long(gb) * 2; + int vert_mult = 1 + (sps->chroma_format_idc < 2); + int horiz_mult = 1 + (sps->chroma_format_idc < 3); + 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; + sps->pic_conf_win.bottom_offset = get_ue_golomb_long(gb) * vert_mult; if (avctx->flags2 & AV_CODEC_FLAG2_IGNORE_CROP) { av_log(avctx, AV_LOG_DEBUG,