CONFIG_CONTROL_LOOPFILTERS_ACROSS_TILES + CONFIG_DISABLE_LOOP_FILTERS_LOSSLESS: Missed code in CCSO
CONFIG_CONTROL_LOOPFILTERS_ACROSS_TILES optionally disables filters across tile edges.
CONFIG_DISABLE_LOOP_FILTERS_LOSSLESS disables filters for lossless blocks.
The CCSO code seems to have had a rebase problem when both of these experiments are on:
void ccso_apply_luma_mb_filter(AV1_COMMON *cm, MACROBLOCKD *xd, const int plane,
...
#if CONFIG_CONTROL_LOOPFILTERS_ACROSS_TILES
if (cm->seq_params.disable_loopfilters_across_tiles) {
...
ccso_filter_block_hbd_wo_buf_c(
...
return;
}
#endif // CONFIG_CONTROL_LOOPFILTERS_ACROSS_TILES
...
#if CONFIG_DISABLE_LOOP_FILTERS_LOSSLESS
if (cm->features.has_lossless_segment) {
ccso_filter_block_hbd_wo_buf_4x4_c(
cm, src_unit_y, dst_unit_yuv, x + unit_x, y + unit_y, pic_width,
pic_height, src_cls, cm->ccso_info.filter_offset[plane],
ccso_ext_stride, dst_stride, 0, 0, thr, neg_thr, src_loc,
max_val, unit_size, unit_size, false, shift_bits, edge_clf,
cm->ccso_info.ccso_bo_only[plane]);
} else {
#endif // CONFIG_DISABLE_LOOP_FILTERS_LOSSLESS
if (cm->ccso_info.ccso_bo_only[plane]) {
ccso_filter_block_hbd_wo_buf_c(
Note that the new code that uses cm->features.has_lossless_segment is only reached when disable_loopfilters_across_tiles is equal to 0.
In other words, if disable_loopfilters_across_tiles is equal to 1, then the filters are disabled across tile edges, but enabled for lossless blocks.
Suggested fix
Add the code to call ccso_filter_block_hbd_wo_buf_4x4_c into the disable_loopfilters_across_tiles path.