From: Nuo Mi <nuomi2021@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Cc: Nuo Mi <nuomi2021@gmail.com>
Subject: [FFmpeg-devel] [PATCH 10/14] avcodec/vvcdec: sao, refact out tile_edge arrays
Date: Mon, 18 Mar 2024 22:16:22 +0800
Message-ID: <TYSPR06MB64336E9E6D33CFA59BF4467CAA2D2@TYSPR06MB6433.apcprd06.prod.outlook.com> (raw)
In-Reply-To: <20240318141626.3375-1-nuomi2021@gmail.com>
---
libavcodec/vvc/vvc_filter.c | 36 ++++++++++++++----------------------
1 file changed, 14 insertions(+), 22 deletions(-)
diff --git a/libavcodec/vvc/vvc_filter.c b/libavcodec/vvc/vvc_filter.c
index ecb004d245..1a3cd02a9f 100644
--- a/libavcodec/vvc/vvc_filter.c
+++ b/libavcodec/vvc/vvc_filter.c
@@ -157,56 +157,48 @@ void ff_vvc_sao_filter(VVCLocalContext *lc, int x, int y)
const int ctb_size_y = fc->ps.sps->ctb_size_y;
static const uint8_t sao_tab[16] = { 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8 };
int c_idx;
- int edges[4]; // 0 left 1 top 2 right 3 bottom
const int rx = x >> fc->ps.sps->ctb_log2_size_y;
const int ry = y >> fc->ps.sps->ctb_log2_size_y;
+ int edges[4] = { !rx, !ry, rx == fc->ps.pps->ctb_width - 1, ry == fc->ps.pps->ctb_height - 1 };
const SAOParams *sao = &CTB(fc->tab.sao, rx, ry);
// flags indicating unfilterable edges
uint8_t vert_edge[] = { 0, 0 };
uint8_t horiz_edge[] = { 0, 0 };
uint8_t diag_edge[] = { 0, 0, 0, 0 };
+ uint8_t tile_edge[] = { 0, 0, 0, 0 };
const uint8_t lfase = fc->ps.pps->r->pps_loop_filter_across_slices_enabled_flag;
const uint8_t no_tile_filter = fc->ps.pps->r->num_tiles_in_pic > 1 &&
!fc->ps.pps->r->pps_loop_filter_across_tiles_enabled_flag;
const uint8_t restore = no_tile_filter || !lfase;
- uint8_t left_tile_edge = 0;
- uint8_t right_tile_edge = 0;
- uint8_t up_tile_edge = 0;
- uint8_t bottom_tile_edge = 0;
-
- edges[LEFT] = rx == 0;
- edges[TOP] = ry == 0;
- edges[RIGHT] = rx == fc->ps.pps->ctb_width - 1;
- edges[BOTTOM] = ry == fc->ps.pps->ctb_height - 1;
if (restore) {
if (!edges[LEFT]) {
- left_tile_edge = no_tile_filter && fc->ps.pps->ctb_to_col_bd[rx] == rx;
- vert_edge[0] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx - 1, ry)) || left_tile_edge;
+ tile_edge[LEFT] = no_tile_filter && fc->ps.pps->ctb_to_col_bd[rx] == rx;
+ vert_edge[0] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx - 1, ry)) || tile_edge[LEFT];
}
if (!edges[RIGHT]) {
- right_tile_edge = no_tile_filter && fc->ps.pps->ctb_to_col_bd[rx] != fc->ps.pps->ctb_to_col_bd[rx + 1];
- vert_edge[1] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx + 1, ry)) || right_tile_edge;
+ tile_edge[RIGHT] = no_tile_filter && fc->ps.pps->ctb_to_col_bd[rx] != fc->ps.pps->ctb_to_col_bd[rx + 1];
+ vert_edge[1] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx + 1, ry)) || tile_edge[RIGHT];
}
if (!edges[TOP]) {
- up_tile_edge = no_tile_filter && fc->ps.pps->ctb_to_row_bd[ry] == ry;
- horiz_edge[0] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx, ry - 1)) || up_tile_edge;
+ tile_edge[TOP] = no_tile_filter && fc->ps.pps->ctb_to_row_bd[ry] == ry;
+ horiz_edge[0] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx, ry - 1)) || tile_edge[TOP];
}
if (!edges[BOTTOM]) {
- bottom_tile_edge = no_tile_filter && fc->ps.pps->ctb_to_row_bd[ry] != fc->ps.pps->ctb_to_row_bd[ry + 1];
- horiz_edge[1] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx, ry + 1)) || bottom_tile_edge;
+ tile_edge[BOTTOM] = no_tile_filter && fc->ps.pps->ctb_to_row_bd[ry] != fc->ps.pps->ctb_to_row_bd[ry + 1];
+ horiz_edge[1] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx, ry + 1)) || tile_edge[BOTTOM];
}
if (!edges[LEFT] && !edges[TOP]) {
- diag_edge[0] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx - 1, ry - 1)) || left_tile_edge || up_tile_edge;
+ diag_edge[0] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx - 1, ry - 1)) || tile_edge[LEFT] || tile_edge[TOP];
}
if (!edges[TOP] && !edges[RIGHT]) {
- diag_edge[1] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx + 1, ry - 1)) || right_tile_edge || up_tile_edge;
+ diag_edge[1] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx + 1, ry - 1)) || tile_edge[RIGHT] || tile_edge[TOP];
}
if (!edges[RIGHT] && !edges[BOTTOM]) {
- diag_edge[2] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx + 1, ry + 1)) || right_tile_edge || bottom_tile_edge;
+ diag_edge[2] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx + 1, ry + 1)) || tile_edge[RIGHT] || tile_edge[BOTTOM];
}
if (!edges[LEFT] && !edges[BOTTOM]) {
- diag_edge[3] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx - 1, ry + 1)) || left_tile_edge || bottom_tile_edge;
+ diag_edge[3] = (!lfase && CTB(fc->tab.slice_idx, rx, ry) != CTB(fc->tab.slice_idx, rx - 1, ry + 1)) || tile_edge[LEFT] || tile_edge[BOTTOM];
}
}
--
2.25.1
_______________________________________________
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".
next prev parent reply other threads:[~2024-03-18 14:19 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20240318141626.3375-1-nuomi2021@gmail.com>
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 01/14] avcodec/vvcdec: NoBackwardPredFlag, only check active pictures Nuo Mi
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 02/14] avcodec/cbs_h266: fix sh_collocated_from_l0_flag and sh_collocated_ref_idx infer Nuo Mi
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 03/14] avcodec/vvcdec: support rectangular single-slice subpics Nuo Mi
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 04/14] avcodec/vvcdec: derive subpic postion for PPS Nuo Mi
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 05/14] avcodec/vvcdec: ff_vvc_decode_neighbour, support subpicture Nuo Mi
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 06/14] avcodec/vvcdec: misc, rename x_ctb, y_ctb, ctu_x, ctu_y to rx, ry to avoid misleading Nuo Mi
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 07/14] avcodec/vvcdec: refact out deblock_is_boundary Nuo Mi
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 08/14] avcodec/vvcdec: deblock, support subpicture Nuo Mi
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 09/14] avcodec/vvcdec: refact, movie the lc->sc assignment to task_run_stage to simplify the code Nuo Mi
2024-03-18 14:16 ` Nuo Mi [this message]
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 11/14] avcodec/vvcdec: sao, support subpicture Nuo Mi
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 12/14] avcodec/vvcdec: alf, " Nuo Mi
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 13/14] avcodec/vvcdec: mvs, " Nuo Mi
2024-03-18 14:16 ` [FFmpeg-devel] [PATCH 14/14] avcodec/vvcdec: inter prediction, " Nuo Mi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=TYSPR06MB64336E9E6D33CFA59BF4467CAA2D2@TYSPR06MB6433.apcprd06.prod.outlook.com \
--to=nuomi2021@gmail.com \
--cc=ffmpeg-devel@ffmpeg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git