diff options
author | Nuo Mi <nuomi2021@gmail.com> | 2024-02-22 15:13:58 +0800 |
---|---|---|
committer | Nuo Mi <nuomi2021@gmail.com> | 2024-02-24 20:24:55 +0800 |
commit | dd3650cada8ca12cceedd8a506bc2e054e04adca (patch) | |
tree | 97d147e5d534e00e27df507650803c835fe8914c /libavcodec | |
parent | 37ebebd055d8129cb590caf446c1ede4235875a1 (diff) | |
download | ffmpeg-dd3650cada8ca12cceedd8a506bc2e054e04adca.tar.gz |
avcodec/vvcdec: deblock_bs, fix intra check for IBC
An Intra Block Copy clip may use different modes for luma and chroma.
For example, MODE_IBC for luma and MODE_INTRA for chroma.
We have to check luma and chroma CuPredMode (cpm) separately.
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/vvc/vvc_filter.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libavcodec/vvc/vvc_filter.c b/libavcodec/vvc/vvc_filter.c index ca541fd997..379d90d02b 100644 --- a/libavcodec/vvc/vvc_filter.c +++ b/libavcodec/vvc/vvc_filter.c @@ -482,8 +482,10 @@ static av_always_inline int deblock_bs(const VVCLocalContext *lc, const MvField *tab_mvf = fc->tab.mvf; const int log2_min_pu_size = MIN_PU_LOG2; const int log2_min_tu_size = MIN_TU_LOG2; + const int log2_min_cb_size = fc->ps.sps->min_cb_log2_size_y; const int min_pu_width = fc->ps.pps->min_pu_width; const int min_tu_width = fc->ps.pps->min_tu_width; + const int min_cb_width = fc->ps.pps->min_cb_width; const int pu_p = (y_p >> log2_min_pu_size) * min_pu_width + (x_p >> log2_min_pu_size); const int pu_q = (y_q >> log2_min_pu_size) * min_pu_width + (x_q >> log2_min_pu_size); const MvField *mvf_p = &tab_mvf[pu_p]; @@ -492,11 +494,14 @@ static av_always_inline int deblock_bs(const VVCLocalContext *lc, const int tu_p = (y_p >> log2_min_tu_size) * min_tu_width + (x_p >> log2_min_tu_size); const int tu_q = (y_q >> log2_min_tu_size) * min_tu_width + (x_q >> log2_min_tu_size); const uint8_t pcmf = fc->tab.pcmf[chroma][tu_p] && fc->tab.pcmf[chroma][tu_q]; + const int cb_p = (y_p >> log2_min_cb_size) * min_cb_width + (x_p >> log2_min_cb_size); + const int cb_q = (y_q >> log2_min_cb_size) * min_cb_width + (x_q >> log2_min_cb_size); + const uint8_t intra = fc->tab.cpm[chroma][cb_p] == MODE_INTRA || fc->tab.cpm[chroma][cb_q] == MODE_INTRA; if (pcmf) return 0; - if (mvf_p->pred_flag == PF_INTRA || mvf_q->pred_flag == PF_INTRA || mvf_p->ciip_flag || mvf_q->ciip_flag) + if (intra || mvf_p->ciip_flag || mvf_q->ciip_flag) return 2; if (chroma) { |