See 8.4.3 Derivation process for chroma intra prediction mode
Showing the changes to libavcodec (1 of 1 file). Show all
Unified · Split
| @@ -895,7 +895,7 @@ static void derive_chroma_intra_pred_mode(VVCLocalContext *lc, · 894 unmodified lines | ||
| 895 | 895 | enum IntraPredMode luma_intra_pred_mode = SAMPLE_CTB(fc->tab.ipm, x_cb, y_cb); |
| 896 | 896 | |
| 897 | 897 | if (cu->tree_type == SINGLE_TREE && sps->r->sps_chroma_format_idc == CHROMA_FORMAT_444 && |
| 898 | − intra_chroma_pred_mode == 4 && intra_mip_flag) { | |
| 898 | + (intra_chroma_pred_mode == 4 || cu->act_enabled_flag) && intra_mip_flag) { | |
| 899 | 899 | cu->mip_chroma_direct_flag = 1; |
| 900 | 900 | cu->intra_pred_mode_c = luma_intra_pred_mode; |
| 901 | 901 | return; |
| @@ -1007,34 +1007,38 @@ static void intra_luma_pred_modes(VVCLocalContext *lc) · 105 unmodified lines | ||
| 1007 | 1007 | |
| 1008 | 1008 | static void intra_chroma_pred_modes(VVCLocalContext *lc) |
| 1009 | 1009 | { |
| 1010 | − const VVCSPS *sps = lc->fc->ps.sps; | |
| 1011 | − CodingUnit *cu = lc->cu; | |
| 1012 | − const int hs = sps->hshift[CHROMA]; | |
| 1013 | − const int vs = sps->vshift[CHROMA]; | |
| 1010 | + const VVCSPS *sps = lc->fc->ps.sps; | |
| 1011 | + CodingUnit *cu = lc->cu; | |
| 1012 | + const int hs = sps->hshift[CHROMA]; | |
| 1013 | + const int vs = sps->vshift[CHROMA]; | |
| 1014 | + int cclm_mode_flag = 0; | |
| 1015 | + int cclm_mode_idx = 0; | |
| 1016 | + int intra_chroma_pred_mode = 0; | |
| 1017 | + | |
| 1018 | + if (!cu->act_enabled_flag) { | |
| 1019 | + cu->mip_chroma_direct_flag = 0; | |
| 1020 | + if (sps->r->sps_bdpcm_enabled_flag && | |
| 1021 | + (cu->cb_width >> hs) <= sps->max_ts_size && | |
| 1022 | + (cu->cb_height >> vs) <= sps->max_ts_size) { | |
| 1023 | + cu->bdpcm_flag[CB] = cu->bdpcm_flag[CR] = ff_vvc_intra_bdpcm_chroma_flag(lc); | |
| 1024 | + } | |
| 1025 | + if (cu->bdpcm_flag[CHROMA]) { | |
| 1026 | + cu->intra_pred_mode_c = ff_vvc_intra_bdpcm_chroma_dir_flag(lc) ? INTRA_VERT : INTRA_HORZ; | |
| 1027 | + } else { | |
| 1028 | + const int cclm_enabled = get_cclm_enabled(lc, cu->x0, cu->y0); | |
| 1014 | 1029 | |
| 1015 | − cu->mip_chroma_direct_flag = 0; | |
| 1016 | − if (sps->r->sps_bdpcm_enabled_flag && | |
| 1017 | − (cu->cb_width >> hs) <= sps->max_ts_size && | |
| 1018 | − (cu->cb_height >> vs) <= sps->max_ts_size) { | |
| 1019 | − cu->bdpcm_flag[CB] = cu->bdpcm_flag[CR] = ff_vvc_intra_bdpcm_chroma_flag(lc); | |
| 1020 | − } | |
| 1021 | − if (cu->bdpcm_flag[CHROMA]) { | |
| 1022 | − cu->intra_pred_mode_c = ff_vvc_intra_bdpcm_chroma_dir_flag(lc) ? INTRA_VERT : INTRA_HORZ; | |
| 1023 | − } else { | |
| 1024 | − const int cclm_enabled = get_cclm_enabled(lc, cu->x0, cu->y0); | |
| 1025 | − int cclm_mode_flag = 0; | |
| 1026 | − int cclm_mode_idx = 0; | |
| 1027 | − int intra_chroma_pred_mode = 0; | |
| 1030 | + if (cclm_enabled) | |
| 1031 | + cclm_mode_flag = ff_vvc_cclm_mode_flag(lc); | |
| 1028 | 1032 | |
| 1029 | − if (cclm_enabled) | |
| 1030 | − cclm_mode_flag = ff_vvc_cclm_mode_flag(lc); | |
| 1033 | + if (cclm_mode_flag) | |
| 1034 | + cclm_mode_idx = ff_vvc_cclm_mode_idx(lc); | |
| 1035 | + else | |
| 1036 | + intra_chroma_pred_mode = ff_vvc_intra_chroma_pred_mode(lc); | |
| 1037 | + } | |
| 1038 | + } | |
| 1031 | 1039 | |
| 1032 | − if (cclm_mode_flag) | |
| 1033 | − cclm_mode_idx = ff_vvc_cclm_mode_idx(lc); | |
| 1034 | − else | |
| 1035 | − intra_chroma_pred_mode = ff_vvc_intra_chroma_pred_mode(lc); | |
| 1040 | + if (!cu->bdpcm_flag[CHROMA]) | |
| 1036 | 1041 | derive_chroma_intra_pred_mode(lc, cclm_mode_flag, cclm_mode_idx, intra_chroma_pred_mode); |
| 1037 | − } | |
| 1038 | 1042 | } |
| 1039 | 1043 | |
| 1040 | 1044 | static PredMode pred_mode_decode(VVCLocalContext *lc, |
| @@ -2122,8 +2126,7 @@ static int intra_data(VVCLocalContext *lc) · 1081 unmodified lines | ||
| 2122 | 2126 | if ((ret = hls_palette_coding(lc, tree_type)) < 0) |
| 2123 | 2127 | return ret; |
| 2124 | 2128 | } else if (!pred_mode_plt_flag) { |
| 2125 | − if (!cu->act_enabled_flag) | |
| 2126 | − intra_chroma_pred_modes(lc); | |
| 2129 | + intra_chroma_pred_modes(lc); | |
| 2127 | 2130 | } |
| 2128 | 2131 | } |
| 2129 | 2132 | |