diff mbox series

[FFmpeg-devel] lavc/vvc: Fix check whether QG is in first tile col

Message ID 20240319194751.34086-1-post@frankplowman.com
State Accepted
Commit dfcf5f828df93df9f07c26fc39a010325522c120
Headers show
Series [FFmpeg-devel] lavc/vvc: Fix check whether QG is in first tile col | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Frank Plowman March 19, 2024, 7:47 p.m. UTC
The second part of this condition is intended to check whether the
current quantisation group is in the first CTU column of the current
tile.  The issue is that ctb_to_col_bd gives the x-ordinate of the first
column of the current tile *in CTUs*, while xQg gives the x-ordinate of
the quantisation group *in samples*.  Rectify this by shifting xQg by
ctb_log2_size to get xQg in CTUs before comparing.

Fixes FFVVC issues #201 and #203.
---
 libavcodec/vvc/vvc_ctu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Nuo Mi March 20, 2024, 2:30 p.m. UTC | #1
On Wed, Mar 20, 2024 at 3:48 AM Frank Plowman <post@frankplowman.com> wrote:

> The second part of this condition is intended to check whether the
> current quantisation group is in the first CTU column of the current
> tile.  The issue is that ctb_to_col_bd gives the x-ordinate of the first
> column of the current tile *in CTUs*, while xQg gives the x-ordinate of
> the quantisation group *in samples*.  Rectify this by shifting xQg by
> ctb_log2_size to get xQg in CTUs before comparing.
>
> Fixes FFVVC issues #201 and #203.
>
Thank you, Frank.
Pushed.

> ---
>  libavcodec/vvc/vvc_ctu.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/libavcodec/vvc/vvc_ctu.c b/libavcodec/vvc/vvc_ctu.c
> index 519bd1ba76..8ba12c8d9f 100644
> --- a/libavcodec/vvc/vvc_ctu.c
> +++ b/libavcodec/vvc/vvc_ctu.c
> @@ -96,7 +96,7 @@ static int get_qp_y_pred(const VVCLocalContext *lc)
>      if (lc->na.cand_up) {
>          const int first_qg_in_ctu = !(xQg & ctb_size_mask) &&  !(yQg &
> ctb_size_mask);
>          const int qPy_up          = fc->tab.qp[LUMA][x_cb + (y_cb - 1) *
> min_cb_width];
> -        if (first_qg_in_ctu && pps->ctb_to_col_bd[xQg >> ctb_log2_size]
> == xQg)
> +        if (first_qg_in_ctu && pps->ctb_to_col_bd[xQg >> ctb_log2_size]
> == xQg >> ctb_log2_size)
>              return qPy_up;
>      }
>
> --
> 2.42.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>
diff mbox series

Patch

diff --git a/libavcodec/vvc/vvc_ctu.c b/libavcodec/vvc/vvc_ctu.c
index 519bd1ba76..8ba12c8d9f 100644
--- a/libavcodec/vvc/vvc_ctu.c
+++ b/libavcodec/vvc/vvc_ctu.c
@@ -96,7 +96,7 @@  static int get_qp_y_pred(const VVCLocalContext *lc)
     if (lc->na.cand_up) {
         const int first_qg_in_ctu = !(xQg & ctb_size_mask) &&  !(yQg & ctb_size_mask);
         const int qPy_up          = fc->tab.qp[LUMA][x_cb + (y_cb - 1) * min_cb_width];
-        if (first_qg_in_ctu && pps->ctb_to_col_bd[xQg >> ctb_log2_size] == xQg)
+        if (first_qg_in_ctu && pps->ctb_to_col_bd[xQg >> ctb_log2_size] == xQg >> ctb_log2_size)
             return qPy_up;
     }