10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/****************************************************************************** 20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore 40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Licensed under the Apache License, Version 2.0 (the "License"); 60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* you may not use this file except in compliance with the License. 70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* You may obtain a copy of the License at: 80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* http://www.apache.org/licenses/LICENSE-2.0 100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Unless required by applicable law or agreed to in writing, software 120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* distributed under the License is distributed on an "AS IS" BASIS, 130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* See the License for the specific language governing permissions and 150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* limitations under the License. 160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************/ 180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ******************************************************************************* 200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @file 210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * ihevc_sao.c 220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @brief 240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Contains function definitions for sample adaptive offset process 250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @author 270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Srinivas T 280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @par List of Functions: 300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * @remarks 320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * None 330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ******************************************************************************* 350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h> 380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stddef.h> 390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdlib.h> 400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <string.h> 410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <assert.h> 420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h" 440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "iv.h" 450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ivd.h" 460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_cxa.h" 470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ithread.h" 480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h" 500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_debug.h" 510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h" 520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_structs.h" 530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h" 540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h" 550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_cabac_tables.h" 560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_sao.h" 570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_mem_fns.h" 580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_error.h" 600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_common_tables.h" 610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_trace.h" 630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_defs.h" 640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_function_selector.h" 650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_structs.h" 660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_error.h" 670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_nal.h" 680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_bitstream.h" 690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_job_queue.h" 700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_utils.h" 710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_deblk.h" 730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_deblk_tables.h" 740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_profile.h" 750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_sao.h" 760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_debug.h" 770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define SAO_SHIFT_CTB 8 790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/** 810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * SAO at CTB level is implemented for a shifted CTB(8 pixels in x and y directions) 820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_sao_ctb(sao_ctxt_t *ps_sao_ctxt) 840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar codec_t *ps_codec = ps_sao_ctxt->ps_codec; 860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_luma; 870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_chroma; 880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd; 890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctb_size; 900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 log2_ctb_size; 910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_t *ps_sps; 920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_t *ps_sao; 930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_avail_luma[8]; 950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_avail_chroma[8]; 960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_top_luma; 980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_top_chroma; 990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_left_luma; 1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_left_chroma; 1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_src_top_right[2]; 1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_src_bot_left[2]; 1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_no_loop_filter_flag; 1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 loop_filter_strd; 1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 ai1_offset_y[5]; 1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 ai1_offset_cb[5]; 1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 ai1_offset_cr[5]; 1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar PROFILE_DISABLE_SAO(); 1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[0] = 0; 1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[0] = 0; 1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[0] = 0; 1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps = ps_sao_ctxt->ps_sps; 1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2_ctb_size = ps_sps->i1_log2_ctb_size; 1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctb_size = (1 << log2_ctb_size); 1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd = ps_sao_ctxt->ps_codec->i4_strd; 1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_luma = ps_sao_ctxt->pu1_cur_pic_luma + ((ps_sao_ctxt->i4_ctb_x + ps_sao_ctxt->i4_ctb_y * ps_sao_ctxt->ps_codec->i4_strd) << (log2_ctb_size)); 1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_chroma = ps_sao_ctxt->pu1_cur_pic_chroma + ((ps_sao_ctxt->i4_ctb_x + ps_sao_ctxt->i4_ctb_y * ps_sao_ctxt->ps_codec->i4_strd / 2) << (log2_ctb_size)); 1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao = ps_sao_ctxt->ps_pic_sao + ps_sao_ctxt->i4_ctb_x + ps_sao_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb; 1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar loop_filter_strd = (ps_sps->i2_pic_width_in_luma_samples + 63) / 64; 1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Current CTB */ 1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_wd_luma; 1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_wd_chroma; 1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_ht_luma; 1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_ht_chroma; 1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_rows; 1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_cols; 1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_cols = ps_sps->i2_pic_width_in_luma_samples - (ps_sao_ctxt->i4_ctb_x << log2_ctb_size); 1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma = MIN(ctb_size, remaining_cols); 1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma = MIN(ctb_size, remaining_cols); 1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_rows = ps_sps->i2_pic_height_in_luma_samples - (ps_sao_ctxt->i4_ctb_y << log2_ctb_size); 1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma = MIN(ctb_size, remaining_rows); 1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma = MIN(ctb_size, remaining_rows) / 2; 1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size); 1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size); 1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size); 1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma = ps_sao_ctxt->pu1_sao_src_left_chroma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size); 1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_no_loop_filter_flag = ps_sao_ctxt->pu1_pic_no_loop_filter_flag + 1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ((ps_sao_ctxt->i4_ctb_y * ctb_size) / 8) * loop_filter_strd + 1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ((ps_sao_ctxt->i4_ctb_x * ctb_size) / 64); 1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[1] = ps_sao->b4_y_offset_1; 1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[2] = ps_sao->b4_y_offset_2; 1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[3] = ps_sao->b4_y_offset_3; 1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[4] = ps_sao->b4_y_offset_4; 1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[1] = ps_sao->b4_cb_offset_1; 1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[2] = ps_sao->b4_cb_offset_2; 1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[3] = ps_sao->b4_cb_offset_3; 1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[4] = ps_sao->b4_cb_offset_4; 1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[1] = ps_sao->b4_cr_offset_1; 1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[2] = ps_sao->b4_cr_offset_2; 1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[3] = ps_sao->b4_cr_offset_3; 1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[4] = ps_sao->b4_cr_offset_4; 1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[i] = 255; 1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[i] = 255; 1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[0] = 0; 1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[4] = 0; 1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[6] = 0; 1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[0] = 0; 1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[4] = 0; 1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[6] = 0; 1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_wd_in_ctb - 1 == ps_sao_ctxt->i4_ctb_x) 1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[1] = 0; 1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[5] = 0; 1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[7] = 0; 1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[1] = 0; 1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[5] = 0; 1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[7] = 0; 1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[2] = 0; 2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[4] = 0; 2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[5] = 0; 2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[2] = 0; 2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[4] = 0; 2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[5] = 0; 2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_ht_in_ctb - 1 == ps_sao_ctxt->i4_ctb_y) 2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[3] = 0; 2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[6] = 0; 2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[7] = 0; 2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[3] = 0; 2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[6] = 0; 2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[7] = 0; 2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao->b3_y_type_idx) 2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update left, top and top-left */ 2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < sao_ht_luma; row++) 2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)]; 2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao_ctxt->pu1_sao_src_top_left_luma_curr_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1]; 2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma); 2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_src_copy[(MAX_CTB_SIZE + 2) * (MAX_CTB_SIZE + 2)]; 2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_copy = au1_src_copy + (MAX_CTB_SIZE + 2) + 1; 2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp_strd = MAX_CTB_SIZE + 2; 2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 no_loop_filter_enabled = 0; 2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Check the loop filter flags and copy the original values for back up */ 2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_no_loop_filter_flag; 2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 min_cu = 8; 2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_tmp = pu1_src_luma; 2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < (sao_ht_luma + min_cu - 1) / min_cu; i++) 2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >> 2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ((((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma) / 8) % 8); 2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag &= (1 << ((sao_wd_luma + (min_cu - 1)) / min_cu)) - 1; 2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_no_loop_filter_flag) 2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp_wd = sao_wd_luma; 2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar no_loop_filter_enabled = 1; 2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(tmp_wd > 0) 2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(CTZ(u4_no_loop_filter_flag)) 2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(u4_no_loop_filter_flag)); 260707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp += MIN((WORD32)CTZ(u4_no_loop_filter_flag), tmp_wd); 261707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_copy += MIN((WORD32)CTZ(u4_no_loop_filter_flag), tmp_wd); 2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(u4_no_loop_filter_flag) * min_cu; 2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < MIN(min_cu, sao_ht_luma - (i - 1) * min_cu); row++) 2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 268707042fda96ebede81408b854385173483798bcdHarish Mahendrakar for(col = 0; col < MIN((WORD32)CTZ(~u4_no_loop_filter_flag) * min_cu, tmp_wd); col++) 2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_copy[row * src_strd + col] = pu1_src_tmp[row * tmp_strd + col]; 2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(~u4_no_loop_filter_flag)); 275707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp += MIN((WORD32)CTZ(~u4_no_loop_filter_flag), tmp_wd); 276707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_copy += MIN((WORD32)CTZ(~u4_no_loop_filter_flag), tmp_wd); 2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(~u4_no_loop_filter_flag) * min_cu; 2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp -= sao_wd_luma; 2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp += min_cu * src_strd; 2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_copy += min_cu * tmp_strd; 2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(1 == ps_sao->b3_y_type_idx) 2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr(pu1_src_luma, 2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma, 2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma, 2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao_ctxt->pu1_sao_src_top_left_luma_curr_ctb, 2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_y_band_pos, 2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y, 2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma, 2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma); 3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else // if(2 <= ps_sao->b3_y_type_idx) 3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[0] = pu1_src_top_luma[sao_wd_luma]; 3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_bot_left[0] = pu1_src_luma[sao_ht_luma * src_strd - 1]; 3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma, 3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma, 3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma, 3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao_ctxt->pu1_sao_src_top_left_luma_curr_ctb, 3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_bot_left, 3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma, 3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y, 3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma, 3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma); 3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Check the loop filter flags and copy the original values back if they are set */ 3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(no_loop_filter_enabled) 3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_no_loop_filter_flag; 3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 min_cu = 8; 3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_tmp = pu1_src_luma; 3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < (sao_ht_luma + min_cu - 1) / min_cu; i++) 3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >> ((((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma) / 8) % 8); 3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag &= (1 << ((sao_wd_luma + (min_cu - 1)) / min_cu)) - 1; 3290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_no_loop_filter_flag) 3310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp_wd = sao_wd_luma; 3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(tmp_wd > 0) 3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(CTZ(u4_no_loop_filter_flag)) 3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(u4_no_loop_filter_flag)); 338707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp += MIN((WORD32)CTZ(u4_no_loop_filter_flag), tmp_wd); 339707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_copy += MIN((WORD32)CTZ(u4_no_loop_filter_flag), tmp_wd); 3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(u4_no_loop_filter_flag) * min_cu; 3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < MIN(min_cu, sao_ht_luma - (i - 1) * min_cu); row++) 3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 346707042fda96ebede81408b854385173483798bcdHarish Mahendrakar for(col = 0; col < MIN((WORD32)CTZ(~u4_no_loop_filter_flag) * min_cu, tmp_wd); col++) 3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp[row * src_strd + col] = pu1_src_copy[row * tmp_strd + col]; 3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(~u4_no_loop_filter_flag)); 353707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp += MIN((WORD32)CTZ(~u4_no_loop_filter_flag), tmp_wd); 354707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_copy += MIN((WORD32)CTZ(~u4_no_loop_filter_flag), tmp_wd); 3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(~u4_no_loop_filter_flag) * min_cu; 3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp -= sao_wd_luma; 3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp += min_cu * src_strd; 3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_copy += min_cu * tmp_strd; 3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao->b3_cb_type_idx) 3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < sao_ht_chroma; row++) 3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)]; 3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)]; 3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao_ctxt->pu1_sao_src_top_left_chroma_curr_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2]; 3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao_ctxt->pu1_sao_src_top_left_chroma_curr_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1]; 3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma); 3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_src_copy[(MAX_CTB_SIZE + 4) * (MAX_CTB_SIZE + 2)]; 3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_copy = au1_src_copy + (MAX_CTB_SIZE + 4) + 2; 3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp_strd = MAX_CTB_SIZE + 4; 3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 no_loop_filter_enabled = 0; 3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Check the loop filter flags and copy the original values for back up */ 3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_no_loop_filter_flag; 3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 min_cu = 4; 3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_tmp = pu1_src_chroma; 3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < (sao_ht_chroma + min_cu - 1) / min_cu; i++) 3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >> ((((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma) / 8) % 8); 3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag &= (1 << ((sao_wd_chroma + (min_cu - 1)) / min_cu)) - 1; 3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_no_loop_filter_flag) 4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp_wd = sao_wd_chroma; 4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar no_loop_filter_enabled = 1; 4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(tmp_wd > 0) 4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(CTZ(u4_no_loop_filter_flag)) 4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(u4_no_loop_filter_flag)); 408707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp += MIN((WORD32)CTZ(u4_no_loop_filter_flag), tmp_wd); 409707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_copy += MIN((WORD32)CTZ(u4_no_loop_filter_flag), tmp_wd); 4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(u4_no_loop_filter_flag) * min_cu; 4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < MIN(min_cu, sao_ht_chroma - (i - 1) * min_cu); row++) 4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 416707042fda96ebede81408b854385173483798bcdHarish Mahendrakar for(col = 0; col < MIN((WORD32)CTZ(~u4_no_loop_filter_flag) * min_cu, tmp_wd); col++) 4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_copy[row * src_strd + col] = pu1_src_tmp[row * tmp_strd + col]; 4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(~u4_no_loop_filter_flag)); 423707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp += MIN((WORD32)CTZ(~u4_no_loop_filter_flag), tmp_wd); 424707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_copy += MIN((WORD32)CTZ(~u4_no_loop_filter_flag), tmp_wd); 4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(~u4_no_loop_filter_flag) * min_cu; 4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp -= sao_wd_chroma; 4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp += min_cu * src_strd; 4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_copy += min_cu * tmp_strd; 4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(1 == ps_sao->b3_cb_type_idx) 4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma, 4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao_ctxt->pu1_sao_src_top_left_chroma_curr_ctb, 4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cb_band_pos, 4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cr_band_pos, 4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma 4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else // if(2 <= ps_sao->b3_cb_type_idx) 4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[0] = pu1_src_top_chroma[sao_wd_chroma]; 4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[1] = pu1_src_top_chroma[sao_wd_chroma + 1]; 4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_bot_left[0] = pu1_src_chroma[sao_ht_chroma * src_strd - 2]; 4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_bot_left[1] = pu1_src_chroma[sao_ht_chroma * src_strd - 1]; 4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, 4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao_ctxt->pu1_sao_src_top_left_chroma_curr_ctb, 4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_bot_left, 4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma, 4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 4690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma); 4700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Check the loop filter flags and copy the original values back if they are set */ 4730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(no_loop_filter_enabled) 4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_no_loop_filter_flag; 4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 min_cu = 4; 4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_tmp = pu1_src_chroma; 4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < (sao_ht_chroma + min_cu - 1) / min_cu; i++) 4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >> ((((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma) / 8) % 8); 4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag &= (1 << ((sao_wd_chroma + (min_cu - 1)) / min_cu)) - 1; 4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_no_loop_filter_flag) 4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp_wd = sao_wd_chroma; 4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(tmp_wd > 0) 4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(CTZ(u4_no_loop_filter_flag)) 4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(u4_no_loop_filter_flag)); 492707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp += MIN((WORD32)CTZ(u4_no_loop_filter_flag), tmp_wd); 493707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_copy += MIN((WORD32)CTZ(u4_no_loop_filter_flag), tmp_wd); 4940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(u4_no_loop_filter_flag) * min_cu; 4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < MIN(min_cu, sao_ht_chroma - (i - 1) * min_cu); row++) 4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 500707042fda96ebede81408b854385173483798bcdHarish Mahendrakar for(col = 0; col < MIN((WORD32)CTZ(~u4_no_loop_filter_flag) * min_cu, tmp_wd); col++) 5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp[row * src_strd + col] = pu1_src_copy[row * tmp_strd + col]; 5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(~u4_no_loop_filter_flag)); 507707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp += MIN((WORD32)CTZ(~u4_no_loop_filter_flag), tmp_wd); 508707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_copy += MIN((WORD32)CTZ(~u4_no_loop_filter_flag), tmp_wd); 5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(~u4_no_loop_filter_flag) * min_cu; 5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp -= sao_wd_chroma; 5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp += min_cu * src_strd; 5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_copy += min_cu * tmp_strd; 5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_sao_shift_ctb(sao_ctxt_t *ps_sao_ctxt) 5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ 5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar codec_t *ps_codec = ps_sao_ctxt->ps_codec; 5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_luma; 5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_chroma; 5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 src_strd; 5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctb_size; 5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 log2_ctb_size; 5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sps_t *ps_sps; 5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_t *ps_sao; 5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pps_t *ps_pps; 5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar slice_header_t *ps_slice_hdr, *ps_slice_hdr_base; 5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tile_t *ps_tile; 5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD16 *pu1_slice_idx; 5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD16 *pu1_tile_idx; 5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 row, col; 5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_avail_luma[8]; 5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_avail_chroma[8]; 5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_tile_slice_boundary[8]; 5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au4_ilf_across_tile_slice_enable[8]; 5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 i; 5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_top_luma; 5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_top_chroma; 5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_left_luma; 5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_left_chroma; 5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_src_top_right[2]; 5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 au1_src_bot_left[2]; 5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_no_loop_filter_flag; 5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_backup_luma; 5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_backup_chroma; 5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 backup_strd; 5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 loop_filter_strd; 5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 no_loop_filter_enabled_luma = 0; 5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 no_loop_filter_enabled_chroma = 0; 5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_sao_src_top_left_chroma_curr_ctb; 5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_sao_src_top_left_luma_curr_ctb; 5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_sao_src_luma_top_left_ctb; 5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_sao_src_chroma_top_left_ctb; 5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_sao_src_top_left_luma_top_right; 5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_sao_src_top_left_chroma_top_right; 5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 u1_sao_src_top_left_luma_bot_left; 5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_sao_src_top_left_luma_bot_left; 5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *au1_sao_src_top_left_chroma_bot_left; 5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_sao_src_top_left_chroma_bot_left; 5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 ai1_offset_y[5]; 5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 ai1_offset_cb[5]; 5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD8 ai1_offset_cr[5]; 5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 chroma_yuv420sp_vu = ps_sao_ctxt->is_chroma_yuv420sp_vu; 5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar PROFILE_DISABLE_SAO(); 5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[0] = 0; 5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[0] = 0; 5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[0] = 0; 5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sps = ps_sao_ctxt->ps_sps; 5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_pps = ps_sao_ctxt->ps_pps; 5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_tile = ps_sao_ctxt->ps_tile; 5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar log2_ctb_size = ps_sps->i1_log2_ctb_size; 5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctb_size = (1 << log2_ctb_size); 5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd = ps_sao_ctxt->ps_codec->i4_strd; 5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_slice_hdr_base = ps_sao_ctxt->ps_codec->ps_slice_hdr_base; 5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_slice_hdr = ps_slice_hdr_base + (ps_sao_ctxt->i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1)); 5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_slice_idx = ps_sao_ctxt->pu1_slice_idx; 5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_tile_idx = ps_sao_ctxt->pu1_tile_idx; 5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_luma = ps_sao_ctxt->pu1_cur_pic_luma + ((ps_sao_ctxt->i4_ctb_x + ps_sao_ctxt->i4_ctb_y * ps_sao_ctxt->ps_codec->i4_strd) << (log2_ctb_size)); 5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_chroma = ps_sao_ctxt->pu1_cur_pic_chroma + ((ps_sao_ctxt->i4_ctb_x + ps_sao_ctxt->i4_ctb_y * ps_sao_ctxt->ps_codec->i4_strd / 2) << (log2_ctb_size)); 5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Stores the left value for each row ctbs- Needed for column tiles*/ 5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_curr_ctb = ps_sao_ctxt->pu1_sao_src_top_left_luma_curr_ctb + ((ps_sao_ctxt->i4_ctb_y)); 6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb = ps_sao_ctxt->pu1_sao_src_top_left_chroma_curr_ctb + (2 * (ps_sao_ctxt->i4_ctb_y)); 6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_luma_top_left_ctb = ps_sao_ctxt->pu1_sao_src_luma_top_left_ctb + ((ps_sao_ctxt->i4_ctb_y)); 6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb = ps_sao_ctxt->pu1_sao_src_chroma_top_left_ctb + (2 * ps_sao_ctxt->i4_ctb_y); 6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u1_sao_src_top_left_luma_bot_left = ps_sao_ctxt->u1_sao_src_top_left_luma_bot_left; // + ((ps_sao_ctxt->i4_ctb_y)); 6040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_bot_left = ps_sao_ctxt->pu1_sao_src_top_left_luma_bot_left + ((ps_sao_ctxt->i4_ctb_y)); 6050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left = ps_sao_ctxt->au1_sao_src_top_left_chroma_bot_left; // + (2 * ps_sao_ctxt->i4_ctb_y); 6060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_bot_left = ps_sao_ctxt->pu1_sao_src_top_left_chroma_bot_left + (2 * ps_sao_ctxt->i4_ctb_y); 6070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_top_right = ps_sao_ctxt->pu1_sao_src_top_left_luma_top_right + ((ps_sao_ctxt->i4_ctb_x)); 6080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_top_right = ps_sao_ctxt->pu1_sao_src_top_left_chroma_top_right + (2 * ps_sao_ctxt->i4_ctb_x); 6090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao = ps_sao_ctxt->ps_pic_sao + ps_sao_ctxt->i4_ctb_x + ps_sao_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb; 6110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar loop_filter_strd = (ps_sps->i2_pic_width_in_luma_samples + 63) >> 6; 6120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar backup_strd = 2 * MAX_CTB_SIZE; 6130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar DEBUG_INIT_TMP_BUF(ps_sao_ctxt->pu1_tmp_buf_luma, ps_sao_ctxt->pu1_tmp_buf_chroma); 6150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Check the loop filter flags and copy the original values for back up */ 6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Luma */ 6199663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 6209663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy /* Done unconditionally since SAO is done on a shifted CTB and the constituent CTBs 6219663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy * can belong to different slice with their own sao_enable flag */ 6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_no_loop_filter_flag; 6240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 loop_filter_bit_pos; 6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 log2_min_cu = 3; 6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 min_cu = (1 << log2_min_cu); 6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_tmp_luma = pu1_src_luma; 6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_blk_ht = ctb_size - SAO_SHIFT_CTB; 6290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_blk_wd = ctb_size; 6300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_rows; 6310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_cols; 6320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + ctb_size - SAO_SHIFT_CTB); 6340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + ctb_size - SAO_SHIFT_CTB); 6350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_rows <= SAO_SHIFT_CTB) 6360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_blk_ht += remaining_rows; 6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_cols <= SAO_SHIFT_CTB) 6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_blk_wd += remaining_cols; 6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_luma -= ps_sao_ctxt->i4_ctb_x ? SAO_SHIFT_CTB : 0; 6410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_luma -= ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB * src_strd : 0; 6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_luma = ps_sao_ctxt->pu1_tmp_buf_luma; 6440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar loop_filter_bit_pos = (ps_sao_ctxt->i4_ctb_x << (log2_ctb_size - 3)) + 6460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 3)) * (loop_filter_strd << 3); 6470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_x > 0) 6480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar loop_filter_bit_pos -= 1; 6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_no_loop_filter_flag = ps_sao_ctxt->pu1_pic_no_loop_filter_flag + 6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (loop_filter_bit_pos >> 3); 6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = -(ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB : 0) >> log2_min_cu; 6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i < (sao_blk_ht + (min_cu - 1)) >> log2_min_cu; i++) 6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp_wd = sao_blk_wd; 6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >> 6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (loop_filter_bit_pos & 7); 6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag &= (1 << ((tmp_wd + (min_cu - 1)) >> log2_min_cu)) - 1; 6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_no_loop_filter_flag) 6630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar no_loop_filter_enabled_luma = 1; 6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(tmp_wd > 0) 6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(CTZ(u4_no_loop_filter_flag)) 6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 669707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp_luma += MIN((WORD32)(CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 670707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_backup_luma += MIN((WORD32)(CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 6710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(u4_no_loop_filter_flag) << log2_min_cu; 6720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(u4_no_loop_filter_flag)); 6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < min_cu; row++) 6770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 678707042fda96ebede81408b854385173483798bcdHarish Mahendrakar for(col = 0; col < MIN((WORD32)(CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); col++) 6790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_luma[row * backup_strd + col] = pu1_src_tmp_luma[row * src_strd + col]; 6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 683707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp_luma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 684707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_backup_luma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 6850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(~u4_no_loop_filter_flag) << log2_min_cu; 6860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(~u4_no_loop_filter_flag)); 6870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_luma -= sao_blk_wd; 6910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_luma -= sao_blk_wd; 6920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_luma += (src_strd << log2_min_cu); 6950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_luma += (backup_strd << log2_min_cu); 6960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 6980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 6990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Chroma */ 7009663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 7010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_no_loop_filter_flag; 7030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 loop_filter_bit_pos; 7040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 log2_min_cu = 3; 7050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 min_cu = (1 << log2_min_cu); 7060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_tmp_chroma = pu1_src_chroma; 7070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_blk_ht = ctb_size - 2 * SAO_SHIFT_CTB; 7080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_blk_wd = ctb_size; 7090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_rows; 7100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_cols; 7110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + ctb_size - 2 * SAO_SHIFT_CTB); 7130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + ctb_size - 2 * SAO_SHIFT_CTB); 7140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_rows <= 2 * SAO_SHIFT_CTB) 7150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_blk_ht += remaining_rows; 7160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_cols <= 2 * SAO_SHIFT_CTB) 7170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_blk_wd += remaining_cols; 7180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_chroma -= ps_sao_ctxt->i4_ctb_x ? SAO_SHIFT_CTB * 2 : 0; 7200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_chroma -= ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB * src_strd : 0; 7210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_chroma = ps_sao_ctxt->pu1_tmp_buf_chroma; 7230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar loop_filter_bit_pos = (ps_sao_ctxt->i4_ctb_x << (log2_ctb_size - 3)) + 7250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 3)) * (loop_filter_strd << 3); 7260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_x > 0) 7270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar loop_filter_bit_pos -= 2; 7280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_no_loop_filter_flag = ps_sao_ctxt->pu1_pic_no_loop_filter_flag + 7300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (loop_filter_bit_pos >> 3); 7310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = -(ps_sao_ctxt->i4_ctb_y ? 2 * SAO_SHIFT_CTB : 0) >> log2_min_cu; 7330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i < (sao_blk_ht + (min_cu - 1)) >> log2_min_cu; i++) 7340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp_wd = sao_blk_wd; 7360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >> 7380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (loop_filter_bit_pos & 7); 7390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag &= (1 << ((tmp_wd + (min_cu - 1)) >> log2_min_cu)) - 1; 7400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_no_loop_filter_flag) 7420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar no_loop_filter_enabled_chroma = 1; 7440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(tmp_wd > 0) 7450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(CTZ(u4_no_loop_filter_flag)) 7470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 748707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp_chroma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 749707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_backup_chroma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 7500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(u4_no_loop_filter_flag) << log2_min_cu; 7510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(u4_no_loop_filter_flag)); 7520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 7540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < min_cu / 2; row++) 7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 757707042fda96ebede81408b854385173483798bcdHarish Mahendrakar for(col = 0; col < MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); col++) 7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_chroma[row * backup_strd + col] = pu1_src_tmp_chroma[row * src_strd + col]; 7600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 763707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp_chroma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 764707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_backup_chroma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 7650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(~u4_no_loop_filter_flag) << log2_min_cu; 7660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(~u4_no_loop_filter_flag)); 7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_chroma -= sao_blk_wd; 7710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_chroma -= sao_blk_wd; 7720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_chroma += ((src_strd / 2) << log2_min_cu); 7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_chroma += ((backup_strd / 2) << log2_min_cu); 7760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar DEBUG_PROCESS_TMP_BUF(ps_sao_ctxt->pu1_tmp_buf_luma, ps_sao_ctxt->pu1_tmp_buf_chroma); 7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Top-left CTB */ 7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_x > 0 && ps_sao_ctxt->i4_ctb_y > 0) 7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_wd_luma = SAO_SHIFT_CTB; 7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_wd_chroma = 2 * SAO_SHIFT_CTB; 7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_ht_luma = SAO_SHIFT_CTB; 7880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_ht_chroma = SAO_SHIFT_CTB; 7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctbx_tl_t = 0, ctbx_tl_l = 0, ctbx_tl_r = 0, ctbx_tl_d = 0, ctbx_tl = 0; 7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctby_tl_t = 0, ctby_tl_l = 0, ctby_tl_r = 0, ctby_tl_d = 0, ctby_tl = 0; 7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 au4_idx_tl[8], idx_tl; 7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 7949663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy slice_header_t *ps_slice_hdr_top_left; 7959663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 7969663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy WORD32 top_left_ctb_indx = (ps_sao_ctxt->i4_ctb_y - 1) * ps_sps->i2_pic_wd_in_ctb + 7979663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy (ps_sao_ctxt->i4_ctb_x - 1); 7989663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy ps_slice_hdr_top_left = ps_slice_hdr_base + pu1_slice_idx[top_left_ctb_indx]; 7999663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 8009663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 8010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_luma -= (sao_wd_luma + sao_ht_luma * src_strd); 8030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_chroma -= (sao_wd_chroma + sao_ht_chroma * src_strd); 8040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao -= (1 + ps_sps->i2_pic_wd_in_ctb); 8050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma; 8060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma; 8070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_luma; 8080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma = ps_sao_ctxt->pu1_sao_src_left_chroma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - (2 * sao_ht_chroma); 8090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8109663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(ps_slice_hdr_top_left->i1_slice_sao_luma_flag) 8110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao->b3_y_type_idx) 8130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update left, top and top-left */ 8150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < sao_ht_luma; row++) 8160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)]; 8180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_luma_top_left_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1]; 8200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma); 8220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(1 == ps_sao->b3_y_type_idx) 8270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[1] = ps_sao->b4_y_offset_1; 8290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[2] = ps_sao->b4_y_offset_2; 8300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[3] = ps_sao->b4_y_offset_3; 8310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[4] = ps_sao->b4_y_offset_4; 8320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr(pu1_src_luma, 8340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 8350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma, 8360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma, 8370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_luma_top_left_ctb, 8380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_y_band_pos, 8390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y, 8400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma, 8410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma 8420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 8430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else // if(2 <= ps_sao->b3_y_type_idx) 8460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[1] = ps_sao->b4_y_offset_1; 8480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[2] = ps_sao->b4_y_offset_2; 8490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[3] = ps_sao->b4_y_offset_3; 8500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[4] = ps_sao->b4_y_offset_4; 8510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 8530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[i] = 255; 8550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 0; 8560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[i] = 0; 8570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 8580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /****************************************************************** 8610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Derive the Top-left CTB's neighbor pixel's slice indices. 8620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 8630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * TL_T 8640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 4 _2__5________ 8650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 0 | | | 8660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * TL_L | TL | 1 TL_R| 8670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * |____|_______|____ 8680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 6|TL_D|7 | | 8690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | 3 | | | 8700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * |____|_______| | 8710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | 8720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | 8730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * |____________| 8740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 8750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *****************************************************************/ 8760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*In case of slices, unless we encounter multiple slice/tiled clips, don't enter*/ 8780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 8800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Assuming that sao shift is uniform along x and y directions*/ 8830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == (1 << log2_ctb_size) - sao_wd_luma) && (ps_sao_ctxt->i4_ctb_y > 1) && (ps_sao_ctxt->i4_ctb_x > 1)) 8840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl_t = ps_sao_ctxt->i4_ctb_y - 2; 8860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl_l = ps_sao_ctxt->i4_ctb_x - 2; 8870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(!(0 == (1 << log2_ctb_size) - sao_wd_luma)) 8890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 8900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl_t = ps_sao_ctxt->i4_ctb_y - 1; 8910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl_l = ps_sao_ctxt->i4_ctb_x - 1; 8920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 8930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl_t = ps_sao_ctxt->i4_ctb_x - 1; 8940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl_l = ps_sao_ctxt->i4_ctb_y - 1; 8950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl_r = ps_sao_ctxt->i4_ctb_x; 8970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl_r = ps_sao_ctxt->i4_ctb_y - 1; 8980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 8990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl_d = ps_sao_ctxt->i4_ctb_x - 1; 9000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl_d = ps_sao_ctxt->i4_ctb_y; 9010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl = ps_sao_ctxt->i4_ctb_x - 1; 9030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl = ps_sao_ctxt->i4_ctb_y - 1; 9040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_slice_hdr->i1_first_slice_in_pic_flag) 9070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Calculate slice indices for neighbor pixels*/ 9090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_tl = pu1_slice_idx[ctbx_tl + (ctby_tl * ps_sps->i2_pic_wd_in_ctb)]; 9100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[2] = au4_idx_tl[4] = *(pu1_slice_idx + ctbx_tl_t + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)); 9110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[0] = pu1_slice_idx[ctbx_tl_l + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)]; 9120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[1] = au4_idx_tl[5] = pu1_slice_idx[ctbx_tl_r + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)]; 9130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[3] = au4_idx_tl[6] = pu1_slice_idx[ctbx_tl_d + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 9140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[7] = pu1_slice_idx[ctbx_tl_d + 1 + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 9150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == (1 << log2_ctb_size) - sao_wd_luma)) 9170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_x == 1) 9190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[6] = -1; 9210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = -1; 9220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 9240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[6] = pu1_slice_idx[(ctbx_tl_d - 1) + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)]; 9260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_y == 1) 9280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[5] = -1; 9300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = -1; 9310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 9330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[5] = pu1_slice_idx[(ctbx_tl_l + 1) + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)]; 9350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = pu1_slice_idx[(ctbx_tl_t - 1) + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)]; 9360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[7] = pu1_slice_idx[(ctbx_tl_d + 1) + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 9380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Verify that the neighbor ctbs dont cross pic boundary. 9410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag 9420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * of the pixel having a greater address is checked. Accordingly, set the availability flags. 9430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Hence, for top and left pixels, current ctb flag is checked. For right and down pixels, 9440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * the respective pixel's flags are checked 9450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 9460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma)) 9480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 9500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] = 0; 9510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 9530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + au4_idx_tl[6])->i1_slice_loop_filter_across_slices_enabled_flag; 9550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_luma)) 9570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = 0; 9590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 9600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 9620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag; 9640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag; 9650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag; 9670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[0] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag; 9680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_tl[1])->i1_slice_loop_filter_across_slices_enabled_flag; 9690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_tl[3])->i1_slice_loop_filter_across_slices_enabled_flag; 9700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_tl[7])->i1_slice_loop_filter_across_slices_enabled_flag; 9710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9729663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(au4_idx_tl[5] > idx_tl) 9739663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 9749663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + au4_idx_tl[5])->i1_slice_loop_filter_across_slices_enabled_flag; 9759663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 9769663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 9770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 9780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag 9790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * of the pixel having a greater address is checked. Accordingly, set the availability flags. 9800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Hence, for top and left pixels, current ctb flag is checked. For right and down pixels, 9810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * the respective pixel's flags are checked 9820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 9830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 9840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 9860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_tl[i] != idx_tl) 9870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 1; 9890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 9910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 9920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 9930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memset_mul_8_fptr((UWORD8 *)au4_idx_tl, 0, 8 * sizeof(WORD32)); 9970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 9980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 9990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_tiles_enabled_flag) 10000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Calculate availability flags at slice boundary */ 10020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y)))) 10030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */ 10050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag) 10060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Set the boundary arrays*/ 10080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Calculate tile indices for neighbor pixels*/ 10090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_tl = pu1_tile_idx[ctbx_tl + (ctby_tl * ps_sps->i2_pic_wd_in_ctb)]; 10100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[2] = au4_idx_tl[4] = *(pu1_tile_idx + ctbx_tl_t + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)); 10110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[0] = pu1_tile_idx[ctbx_tl_l + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)]; 10120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[1] = au4_idx_tl[5] = pu1_tile_idx[ctbx_tl_r + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)]; 10130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[3] = au4_idx_tl[6] = pu1_tile_idx[ctbx_tl_d + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 10140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[7] = pu1_tile_idx[ctbx_tl_d + 1 + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 10150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == (1 << log2_ctb_size) - sao_wd_luma)) 10170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_x == 1) 10190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[6] = -1; 10210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = -1; 10220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 10240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[6] = pu1_tile_idx[(ctbx_tl_d - 1) + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)]; 10260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_y == 1) 10280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[5] = -1; 10300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = -1; 10310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 10330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[5] = pu1_tile_idx[(ctbx_tl_l + 1) + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)]; 10350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = pu1_tile_idx[(ctbx_tl_t - 1) + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)]; 10360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[7] = pu1_tile_idx[(ctbx_tl_d + 1) + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 10380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 10400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the tile boundary*/ 10420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_tl[i] != idx_tl) 10430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] |= 1; 10450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; //=0 10460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Set availability flags based on tile and slice boundaries*/ 10540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 10550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 10570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i])) 10580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[i] = 0; 10600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma) 10660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[0] = 0; 10680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[4] = 0; 10690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[6] = 0; 10700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_wd_in_ctb == ps_sao_ctxt->i4_ctb_x) 10730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[1] = 0; 10750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[5] = 0; 10760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[7] = 0; 10770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //y==1 case 10790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_luma)) 10800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[2] = 0; 10820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[4] = 0; 10830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[5] = 0; 10840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_ht_in_ctb == ps_sao_ctxt->i4_ctb_y) 10860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[3] = 0; 10880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[6] = 0; 10890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[7] = 0; 10900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 10910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 10920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 10930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[0] = pu1_src_top_luma[sao_wd_luma]; 10940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u1_sao_src_top_left_luma_bot_left = pu1_src_left_luma[sao_ht_luma]; 10950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma, 10960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 10970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma, 10980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma, 10990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_luma_top_left_ctb, 11000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 11010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar &u1_sao_src_top_left_luma_bot_left, 11020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma, 11030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y, 11040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma, 11050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma); 11060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11109663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 11119663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 11129663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy /* Update left, top and top-left */ 11139663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy for(row = 0; row < sao_ht_luma; row++) 11149663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 11159663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)]; 11169663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 11179663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_luma_top_left_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1]; 11180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11199663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma); 11209663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 11219663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 11229663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(ps_slice_hdr_top_left->i1_slice_sao_chroma_flag) 11230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao->b3_cb_type_idx) 11250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < sao_ht_chroma; row++) 11270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)]; 11290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)]; 11300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2]; 11320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1]; 11330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma); 11350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(1 == ps_sao->b3_cb_type_idx) 11390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[1] = ps_sao->b4_cb_offset_1; 11410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[2] = ps_sao->b4_cb_offset_2; 11420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[3] = ps_sao->b4_cb_offset_3; 11430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[4] = ps_sao->b4_cb_offset_4; 11440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[1] = ps_sao->b4_cr_offset_1; 11460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[2] = ps_sao->b4_cr_offset_2; 11470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[3] = ps_sao->b4_cr_offset_3; 11480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[4] = ps_sao->b4_cr_offset_4; 11490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(chroma_yuv420sp_vu) 11510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma, 11530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 11540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 11550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 11560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb, 11570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cr_band_pos, 11580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cb_band_pos, 11590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 11600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 11610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 11620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma 11630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 11640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 11660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma, 11680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 11690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 11700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 11710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb, 11720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cb_band_pos, 11730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cr_band_pos, 11740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 11750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 11760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 11770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma 11780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 11790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 11810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else // if(2 <= ps_sao->b3_cb_type_idx) 11830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[1] = ps_sao->b4_cb_offset_1; 11850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[2] = ps_sao->b4_cb_offset_2; 11860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[3] = ps_sao->b4_cb_offset_3; 11870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[4] = ps_sao->b4_cb_offset_4; 11880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 11890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[1] = ps_sao->b4_cr_offset_1; 11900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[2] = ps_sao->b4_cr_offset_2; 11910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[3] = ps_sao->b4_cr_offset_3; 11920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[4] = ps_sao->b4_cr_offset_4; 11930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 11940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 11950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[i] = 255; 11960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 0; 11970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[i] = 0; 11980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 11990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*In case of slices*/ 12010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 12030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == (1 << log2_ctb_size) - sao_wd_chroma) && (ps_sao_ctxt->i4_ctb_y > 1) && (ps_sao_ctxt->i4_ctb_x > 1)) 12050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl_t = ps_sao_ctxt->i4_ctb_y - 2; 12070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl_l = ps_sao_ctxt->i4_ctb_x - 2; 12080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(!(0 == (1 << log2_ctb_size) - sao_wd_chroma)) 12100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl_t = ps_sao_ctxt->i4_ctb_y - 1; 12120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl_l = ps_sao_ctxt->i4_ctb_x - 1; 12130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl_t = ps_sao_ctxt->i4_ctb_x - 1; 12150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl_l = ps_sao_ctxt->i4_ctb_y - 1; 12160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl_r = ps_sao_ctxt->i4_ctb_x; 12180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl_r = ps_sao_ctxt->i4_ctb_y - 1; 12190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl_d = ps_sao_ctxt->i4_ctb_x - 1; 12210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl_d = ps_sao_ctxt->i4_ctb_y; 12220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_tl = ps_sao_ctxt->i4_ctb_x - 1; 12240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_tl = ps_sao_ctxt->i4_ctb_y - 1; 12250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_slice_hdr->i1_first_slice_in_pic_flag) 12270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_tl = pu1_slice_idx[ctbx_tl + (ctby_tl * ps_sps->i2_pic_wd_in_ctb)]; 12300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[2] = au4_idx_tl[4] = *(pu1_slice_idx + ctbx_tl_t + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)); 12310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[0] = pu1_slice_idx[ctbx_tl_l + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)]; 12320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[1] = au4_idx_tl[5] = pu1_slice_idx[ctbx_tl_r + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)]; 12330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[3] = au4_idx_tl[6] = pu1_slice_idx[ctbx_tl_d + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 12340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[7] = pu1_slice_idx[ctbx_tl_d + 1 + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 12350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == (1 << log2_ctb_size) - sao_wd_chroma)) 12370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_x == 1) 12390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[6] = -1; 12410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = -1; 12420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 12440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[6] = pu1_slice_idx[(ctbx_tl_d - 1) + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)]; 12460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_y == 1) 12480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[5] = -1; 12500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = -1; 12510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 12530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[5] = pu1_slice_idx[(ctbx_tl_l + 1) + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)]; 12550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = pu1_slice_idx[(ctbx_tl_t - 1) + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)]; 12560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[7] = pu1_slice_idx[(ctbx_tl_d + 1) + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 12580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 12600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Verify that the neighbor ctbs don't cross pic boundary 12610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Also, the ILF flag belonging to the higher pixel address (between neighbor and current pixels) must be assigned*/ 12620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma)) 12630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 12650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] = 0; 12660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 12680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + au4_idx_tl[6])->i1_slice_loop_filter_across_slices_enabled_flag; 12700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) - sao_ht_chroma)) 12720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = 0; 12740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 12750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 12770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag; 12799663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + au4_idx_tl[5])->i1_slice_loop_filter_across_slices_enabled_flag; 12800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag; 12820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[0] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag; 12830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_tl[1])->i1_slice_loop_filter_across_slices_enabled_flag; 12840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_tl[3])->i1_slice_loop_filter_across_slices_enabled_flag; 12850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_tl[7])->i1_slice_loop_filter_across_slices_enabled_flag; 12860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 12870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag 12880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * of the pixel having a greater address is checked. Accordingly, set the availability flags 12890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 12900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 12910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 12930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_tl[i] != idx_tl) 12940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 1; 12960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 12970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 12980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 12990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 13000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Reset indices*/ 13040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 13050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[i] = 0; 13070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_tiles_enabled_flag) 13100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Calculate availability flags at slice boundary */ 13120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y)))) 13130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */ 13150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag) 13160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Set the boundary arrays*/ 13180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Calculate tile indices for neighbor pixels*/ 13190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_tl = pu1_tile_idx[ctbx_tl + (ctby_tl * ps_sps->i2_pic_wd_in_ctb)]; 13200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[2] = au4_idx_tl[4] = *(pu1_tile_idx + ctbx_tl_t + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)); 13210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[0] = pu1_tile_idx[ctbx_tl_l + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)]; 13220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[1] = au4_idx_tl[5] = pu1_tile_idx[ctbx_tl_r + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)]; 13230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[3] = au4_idx_tl[6] = pu1_tile_idx[ctbx_tl_d + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 13240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[7] = pu1_tile_idx[ctbx_tl_d + 1 + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 13250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 == (1 << log2_ctb_size) - sao_wd_luma)) 13270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_x == 1) 13290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[6] = -1; 13310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = -1; 13320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 13340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[6] = pu1_tile_idx[(ctbx_tl_d - 1) + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)]; 13360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_y == 1) 13380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[5] = -1; 13400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = -1; 13410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 13430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[5] = pu1_tile_idx[(ctbx_tl_l + 1) + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)]; 13450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[4] = pu1_tile_idx[(ctbx_tl_t - 1) + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)]; 13460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_tl[7] = pu1_tile_idx[(ctbx_tl_d + 1) + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)]; 13480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 13500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the tile boundary*/ 13520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_tl[i] != idx_tl) 13530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] |= 1; 13550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; //=0 13560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 13630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 13650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i])) 13660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[i] = 0; 13680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma) 13740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[0] = 0; 13760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[4] = 0; 13770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[6] = 0; 13780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_wd_in_ctb == ps_sao_ctxt->i4_ctb_x) 13800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[1] = 0; 13820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[5] = 0; 13830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[7] = 0; 13840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) - sao_ht_chroma) 13870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[2] = 0; 13890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[4] = 0; 13900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[5] = 0; 13910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_ht_in_ctb == ps_sao_ctxt->i4_ctb_y) 13930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 13940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[3] = 0; 13950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[6] = 0; 13960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[7] = 0; 13970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 13980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 13990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[0] = pu1_src_top_chroma[sao_wd_chroma]; 14010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[1] = pu1_src_top_chroma[sao_wd_chroma + 1]; 14020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left[0] = pu1_src_left_chroma[2 * sao_ht_chroma]; 14030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left[1] = pu1_src_left_chroma[2 * sao_ht_chroma + 1]; 14040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ctb_size == 16) && (ps_sao_ctxt->i4_ctb_y != ps_sps->i2_pic_ht_in_ctb - 1)) 14050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left[0] = pu1_src_chroma[sao_ht_chroma * src_strd - 2]; 14070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left[1] = pu1_src_chroma[sao_ht_chroma * src_strd - 1]; 14080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(chroma_yuv420sp_vu) 14110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, 14130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 14140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 14150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 14160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb, 14170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 14180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left, 14190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma, 14200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 14210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 14220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 14230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma); 14240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 14260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, 14280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 14290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 14300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 14310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb, 14320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 14330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left, 14340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma, 14350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 14360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 14370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 14380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma); 14390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14439663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 14449663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 14459663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy for(row = 0; row < sao_ht_chroma; row++) 14469663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 14479663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)]; 14489663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)]; 14499663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 14509663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_chroma_top_left_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2]; 14519663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_chroma_top_left_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1]; 14529663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 14539663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma); 14549663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 14550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_luma += sao_wd_luma + sao_ht_luma * src_strd; 14570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_chroma += sao_wd_chroma + sao_ht_chroma * src_strd; 14580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao += (1 + ps_sps->i2_pic_wd_in_ctb); 14590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Top CTB */ 14630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ps_sao_ctxt->i4_ctb_y > 0)) 14640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_wd_luma = ctb_size - SAO_SHIFT_CTB; 14660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_wd_chroma = ctb_size - 2 * SAO_SHIFT_CTB; 14670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_ht_luma = SAO_SHIFT_CTB; 14680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_ht_chroma = SAO_SHIFT_CTB; 14690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctbx_t_t = 0, ctbx_t_l = 0, ctbx_t_r = 0, ctbx_t_d = 0, ctbx_t = 0; 14710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctby_t_t = 0, ctby_t_l = 0, ctby_t_r = 0, ctby_t_d = 0, ctby_t = 0; 14720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 au4_idx_t[8], idx_t; 14730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_cols; 14750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14769663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy slice_header_t *ps_slice_hdr_top; 14779663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 14789663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy WORD32 top_ctb_indx = (ps_sao_ctxt->i4_ctb_y - 1) * ps_sps->i2_pic_wd_in_ctb + 14799663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy (ps_sao_ctxt->i4_ctb_x); 14809663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy ps_slice_hdr_top = ps_slice_hdr_base + pu1_slice_idx[top_ctb_indx]; 14819663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 14829663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 14830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + sao_wd_luma); 14840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_cols <= SAO_SHIFT_CTB) 14850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma += remaining_cols; 14870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + sao_wd_chroma); 14890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_cols <= 2 * SAO_SHIFT_CTB) 14900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 14910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma += remaining_cols; 14920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 14930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 14940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_luma -= (sao_ht_luma * src_strd); 14950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_chroma -= (sao_ht_chroma * src_strd); 14960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao -= (ps_sps->i2_pic_wd_in_ctb); 14970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size); 14980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size); 14990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_chroma; 15000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma = ps_sao_ctxt->pu1_sao_src_left_chroma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - (2 * sao_ht_chroma); 15010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != sao_wd_luma) 15030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15049663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(ps_slice_hdr_top->i1_slice_sao_luma_flag) 15050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao->b3_y_type_idx) 15070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update left, top and top-left */ 15090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < sao_ht_luma; row++) 15100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)]; 15120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 15130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_luma_top_left_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1]; 15140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma); 15160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 15180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(1 == ps_sao->b3_y_type_idx) 15200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[1] = ps_sao->b4_y_offset_1; 15220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[2] = ps_sao->b4_y_offset_2; 15230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[3] = ps_sao->b4_y_offset_3; 15240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[4] = ps_sao->b4_y_offset_4; 15250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr(pu1_src_luma, 15270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 15280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma, 15290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma, 15300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_luma_top_left_ctb, 15310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_y_band_pos, 15320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y, 15330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma, 15340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma 15350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 15360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 15370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else // if(2 <= ps_sao->b3_y_type_idx) 15390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[1] = ps_sao->b4_y_offset_1; 15410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[2] = ps_sao->b4_y_offset_2; 15420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[3] = ps_sao->b4_y_offset_3; 15430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[4] = ps_sao->b4_y_offset_4; 15440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memset_mul_8_fptr(au1_avail_luma, 255, 8); 15460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memset_mul_8_fptr(au1_tile_slice_boundary, 0, 8); 15470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memset_mul_8_fptr((UWORD8 *)au4_idx_t, 0, 8 * sizeof(WORD32)); 15480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 15500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 15530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 15540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /****************************************************************** 15550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Derive the Top-left CTB's neighbor pixel's slice indices. 15560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 15570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * T_T 15580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * ____________ 15590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | | 15600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | T_L| T |T_R 15610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | ______|____ 15620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | T_D | | 15630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | | | 15640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * |____|_______| | 15650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | 15660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | 15670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * |____________| 15680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 15690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *****************************************************************/ 15700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*In case of slices*/ 15720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 15740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_t_t = ps_sao_ctxt->i4_ctb_x; 15770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_t_t = ps_sao_ctxt->i4_ctb_y - 1; 15780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_t_l = ps_sao_ctxt->i4_ctb_x - 1; 15800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_t_l = ps_sao_ctxt->i4_ctb_y - 1; 15810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_t_r = ps_sao_ctxt->i4_ctb_x; 15830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_t_r = ps_sao_ctxt->i4_ctb_y - 1; 15840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_t_d = ps_sao_ctxt->i4_ctb_x; 15860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_t_d = ps_sao_ctxt->i4_ctb_y; 15870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_t = ps_sao_ctxt->i4_ctb_x; 15890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_t = ps_sao_ctxt->i4_ctb_y - 1; 15900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 15910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_slice_hdr->i1_first_slice_in_pic_flag) 15920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Calculate neighbor ctb slice indices*/ 15940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 15950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 15960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[0] = -1; 15970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[6] = -1; 15980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[4] = -1; 15990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 16010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[0] = au4_idx_t[4] = pu1_slice_idx[ctbx_t_l + (ctby_t_l * ps_sps->i2_pic_wd_in_ctb)]; 16030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[6] = pu1_slice_idx[ctbx_t_d - 1 + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)]; 16040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_t = pu1_slice_idx[ctbx_t + (ctby_t * ps_sps->i2_pic_wd_in_ctb)]; 16060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[2] = au4_idx_t[5] = pu1_slice_idx[ctbx_t_t + (ctby_t_t * ps_sps->i2_pic_wd_in_ctb)]; 16070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[1] = pu1_slice_idx[ctbx_t_r + (ctby_t_r * ps_sps->i2_pic_wd_in_ctb)]; 16080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[3] = au4_idx_t[7] = pu1_slice_idx[ctbx_t_d + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)]; 16090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Verify that the neighbor ctbs don't cross pic boundary.*/ 16110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 16120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 16140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] = 0; 16150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[0] = 0; 16160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 16180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[0] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag; 16200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + au4_idx_t[6])->i1_slice_loop_filter_across_slices_enabled_flag; 16210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag; 16260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag; 16270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_t[1])->i1_slice_loop_filter_across_slices_enabled_flag; 16280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_t[3])->i1_slice_loop_filter_across_slices_enabled_flag; 16290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_t[7])->i1_slice_loop_filter_across_slices_enabled_flag; 16309663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 16319663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(au4_idx_t[6] < idx_t) 16329663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 16339663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag; 16349663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 16359663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 16360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 16370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag 16380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * of the pixel having a greater address is checked. Accordingly, set the availability flags 16390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 16400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 16420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 16440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_t[i] != idx_t) 16450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 1; 16470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Check for slice flag at such boundaries*/ 16480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 16500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 16520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Reset indices*/ 16550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 16560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[i] = 0; 16580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_tiles_enabled_flag) 16620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Calculate availability flags at slice boundary */ 16640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y)))) 16650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */ 16670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag) 16680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Calculate neighbor ctb slice indices*/ 16700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 16710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[0] = -1; 16730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[6] = -1; 16740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[4] = -1; 16750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 16770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[0] = au4_idx_t[4] = pu1_tile_idx[ctbx_t_l + (ctby_t_l * ps_sps->i2_pic_wd_in_ctb)]; 16790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[6] = pu1_tile_idx[ctbx_t_d - 1 + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)]; 16800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_t = pu1_tile_idx[ctbx_t + (ctby_t * ps_sps->i2_pic_wd_in_ctb)]; 16820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[2] = au4_idx_t[5] = pu1_tile_idx[ctbx_t_t + (ctby_t_t * ps_sps->i2_pic_wd_in_ctb)]; 16830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[1] = pu1_tile_idx[ctbx_t_r + (ctby_t_r * ps_sps->i2_pic_wd_in_ctb)]; 16840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[3] = au4_idx_t[7] = pu1_tile_idx[ctbx_t_d + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)]; 16850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 16870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the tile boundary*/ 16890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_t[i] != idx_t) 16900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 16910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] |= 1; 16920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; 16930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 16980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 16990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 17000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 17020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i])) 17030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[i] = 0; 17050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 17120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[0] = 0; 17140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[4] = 0; 17150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[6] = 0; 17160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_width_in_luma_samples - (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) <= sao_wd_luma) 17190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[1] = 0; 17210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[5] = 0; 17220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[7] = 0; 17230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_luma) 17260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[2] = 0; 17280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[4] = 0; 17290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[5] = 0; 17300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_ht_in_ctb == ps_sao_ctxt->i4_ctb_y) 17330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[3] = 0; 17350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[6] = 0; 17360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[7] = 0; 17370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[0] = pu1_sao_src_top_left_luma_top_right[0]; 17410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u1_sao_src_top_left_luma_bot_left = pu1_src_luma[sao_ht_luma * src_strd - 1]; 17420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma, 17430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 17440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma, 17450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma, 17460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_luma_top_left_ctb, 17470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 17480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar &u1_sao_src_top_left_luma_bot_left, 17490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma, 17500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y, 17510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma, 17520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma); 17530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17569663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 17579663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 17589663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy /* Update left, top and top-left */ 17599663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy for(row = 0; row < sao_ht_luma; row++) 17609663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 17619663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)]; 17629663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 17639663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_luma_top_left_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1]; 17649663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 17659663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma); 17669663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 17670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != sao_wd_chroma) 17700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17719663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(ps_slice_hdr_top->i1_slice_sao_chroma_flag) 17720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao->b3_cb_type_idx) 17740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < sao_ht_chroma; row++) 17770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)]; 17790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)]; 17800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2]; 17820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1]; 17830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma); 17850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 17870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(1 == ps_sao->b3_cb_type_idx) 17890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 17900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[1] = ps_sao->b4_cb_offset_1; 17910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[2] = ps_sao->b4_cb_offset_2; 17920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[3] = ps_sao->b4_cb_offset_3; 17930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[4] = ps_sao->b4_cb_offset_4; 17940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 17950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[1] = ps_sao->b4_cr_offset_1; 17960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[2] = ps_sao->b4_cr_offset_2; 17970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[3] = ps_sao->b4_cr_offset_3; 17980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[4] = ps_sao->b4_cr_offset_4; 17990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(chroma_yuv420sp_vu) 18010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma, 18030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 18040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 18050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 18060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb, 18070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cr_band_pos, 18080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cb_band_pos, 18090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 18100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 18110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 18120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma 18130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 18140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 18150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 18160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma, 18180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 18190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 18200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 18210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb, 18220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cb_band_pos, 18230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cr_band_pos, 18240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 18250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 18260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 18270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma 18280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 18290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 18300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 18310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else // if(2 <= ps_sao->b3_cb_type_idx) 18320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[1] = ps_sao->b4_cb_offset_1; 18340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[2] = ps_sao->b4_cb_offset_2; 18350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[3] = ps_sao->b4_cb_offset_3; 18360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[4] = ps_sao->b4_cb_offset_4; 18370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[1] = ps_sao->b4_cr_offset_1; 18390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[2] = ps_sao->b4_cr_offset_2; 18400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[3] = ps_sao->b4_cr_offset_3; 18410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[4] = ps_sao->b4_cr_offset_4; 18420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 18440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[i] = 255; 18460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 0; 18470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[i] = 0; 18480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 18490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 18500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 18530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_t_t = ps_sao_ctxt->i4_ctb_x; 18550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_t_t = ps_sao_ctxt->i4_ctb_y - 1; 18560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_t_l = ps_sao_ctxt->i4_ctb_x - 1; 18580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_t_l = ps_sao_ctxt->i4_ctb_y - 1; 18590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_t_r = ps_sao_ctxt->i4_ctb_x; 18610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_t_r = ps_sao_ctxt->i4_ctb_y - 1; 18620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_t_d = ps_sao_ctxt->i4_ctb_x; 18640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_t_d = ps_sao_ctxt->i4_ctb_y; 18650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_t = ps_sao_ctxt->i4_ctb_x; 18670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_t = ps_sao_ctxt->i4_ctb_y - 1; 18680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_slice_hdr->i1_first_slice_in_pic_flag) 18700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 18720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[0] = -1; 18740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[6] = -1; 18750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[4] = -1; 18760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 18770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 18780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[0] = au4_idx_t[4] = pu1_slice_idx[ctbx_t_l + (ctby_t_l * ps_sps->i2_pic_wd_in_ctb)]; 18800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[6] = pu1_slice_idx[ctbx_t_d - 1 + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)]; 18810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 18820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_t = pu1_slice_idx[ctbx_t + (ctby_t * ps_sps->i2_pic_wd_in_ctb)]; 18830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[2] = au4_idx_t[5] = pu1_slice_idx[ctbx_t_t + (ctby_t_t * ps_sps->i2_pic_wd_in_ctb)]; 18840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[1] = pu1_slice_idx[ctbx_t_r + (ctby_t_r * ps_sps->i2_pic_wd_in_ctb)]; 18850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[3] = au4_idx_t[7] = pu1_slice_idx[ctbx_t_d + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)]; 18860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Verify that the neighbor ctbs don't cross pic boundary.*/ 18880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 18890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 18900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 18920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] = 0; 18930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[0] = 0; 18940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 18950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 18960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 18970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[0] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag; 18980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + au4_idx_t[6])->i1_slice_loop_filter_across_slices_enabled_flag; 18990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19019663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + au4_idx_t[5])->i1_slice_loop_filter_across_slices_enabled_flag; 19020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag; 19030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_t[1])->i1_slice_loop_filter_across_slices_enabled_flag; 19040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_t[3])->i1_slice_loop_filter_across_slices_enabled_flag; 19050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_t[7])->i1_slice_loop_filter_across_slices_enabled_flag; 19069663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 19079663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(idx_t > au4_idx_t[6]) 19089663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 19099663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag; 19109663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 19119663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 19120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 19130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag 19140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * of the pixel having a greater address is checked. Accordingly, set the availability flags 19150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 19160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 19170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 19190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_t[i] != idx_t) 19200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 1; 19220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 19240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Indicates that the neighbour belongs to same/dependent slice*/ 19260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 19270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Reset indices*/ 19300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 19310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[i] = 0; 19330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_tiles_enabled_flag) 19360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Calculate availability flags at slice boundary */ 19380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y)))) 19390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */ 19410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag) 19420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Calculate neighbor ctb slice indices*/ 19440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 19450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[0] = -1; 19470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[6] = -1; 19480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[4] = -1; 19490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 19510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[0] = au4_idx_t[4] = pu1_tile_idx[ctbx_t_l + (ctby_t_l * ps_sps->i2_pic_wd_in_ctb)]; 19530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[6] = pu1_tile_idx[ctbx_t_d - 1 + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)]; 19540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_t = pu1_tile_idx[ctbx_t + (ctby_t * ps_sps->i2_pic_wd_in_ctb)]; 19560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[2] = au4_idx_t[5] = pu1_tile_idx[ctbx_t_t + (ctby_t_t * ps_sps->i2_pic_wd_in_ctb)]; 19570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[1] = pu1_tile_idx[ctbx_t_r + (ctby_t_r * ps_sps->i2_pic_wd_in_ctb)]; 19580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_t[3] = au4_idx_t[7] = pu1_tile_idx[ctbx_t_d + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)]; 19590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 19610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the tile boundary*/ 19630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_t[i] != idx_t) 19640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] |= 1; 19660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; 19670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 19730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 19750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i])) 19760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[i] = 0; 19780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 19840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[0] = 0; 19860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[4] = 0; 19870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[6] = 0; 19880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_width_in_luma_samples - (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) <= sao_wd_chroma) 19910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[1] = 0; 19930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[5] = 0; 19940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[7] = 0; 19950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 19960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 19970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) - sao_ht_chroma) 19980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 19990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[2] = 0; 20000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[4] = 0; 20010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[5] = 0; 20020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_ht_in_ctb == ps_sao_ctxt->i4_ctb_y) 20050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[3] = 0; 20070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[6] = 0; 20080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[7] = 0; 20090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[0] = pu1_sao_src_top_left_chroma_top_right[0]; 20130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[1] = pu1_sao_src_top_left_chroma_top_right[1]; 20140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left[0] = pu1_src_chroma[sao_ht_chroma * src_strd - 2]; 20150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left[1] = pu1_src_chroma[sao_ht_chroma * src_strd - 1]; 20160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(chroma_yuv420sp_vu) 20180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, 20200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 20210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 20220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 20230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb, 20240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 20250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left, 20260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma, 20270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 20280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 20290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 20300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma); 20310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 20330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, 20350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 20360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 20370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 20380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_chroma_top_left_ctb, 20390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 20400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left, 20410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma, 20420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 20430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 20440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 20450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma); 20460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20519663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 20529663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 20539663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy for(row = 0; row < sao_ht_chroma; row++) 20549663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 20559663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)]; 20569663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)]; 20579663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 20589663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_chroma_top_left_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2]; 20599663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_chroma_top_left_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1]; 20609663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 20619663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma); 20629663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 20630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_luma += sao_ht_luma * src_strd; 20660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_chroma += sao_ht_chroma * src_strd; 20670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao += (ps_sps->i2_pic_wd_in_ctb); 20680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Left CTB */ 20710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_x > 0) 20720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_wd_luma = SAO_SHIFT_CTB; 20740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_wd_chroma = 2 * SAO_SHIFT_CTB; 20750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_ht_luma = ctb_size - SAO_SHIFT_CTB; 20760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_ht_chroma = ctb_size / 2 - SAO_SHIFT_CTB; 20770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctbx_l_t = 0, ctbx_l_l = 0, ctbx_l_r = 0, ctbx_l_d = 0, ctbx_l = 0; 20790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctby_l_t = 0, ctby_l_l = 0, ctby_l_r = 0, ctby_l_d = 0, ctby_l = 0; 20800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 au4_idx_l[8], idx_l; 20810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 20820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_rows; 20839663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy slice_header_t *ps_slice_hdr_left; 20849663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 20859663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy WORD32 left_ctb_indx = (ps_sao_ctxt->i4_ctb_y) * ps_sps->i2_pic_wd_in_ctb + 20869663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy (ps_sao_ctxt->i4_ctb_x - 1); 20879663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy ps_slice_hdr_left = ps_slice_hdr_base + pu1_slice_idx[left_ctb_indx]; 20889663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 20899663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 20900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + sao_ht_luma); 20910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_rows <= SAO_SHIFT_CTB) 20920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma += remaining_rows; 20940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 20950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_rows = ps_sps->i2_pic_height_in_luma_samples / 2 - ((ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) + sao_ht_chroma); 20960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_rows <= SAO_SHIFT_CTB) 20970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 20980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma += remaining_rows; 20990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 21000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_luma -= sao_wd_luma; 21020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_chroma -= sao_wd_chroma; 21030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao -= 1; 21040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma; 21050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma; 21060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size); 21070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma = ps_sao_ctxt->pu1_sao_src_left_chroma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size); 21080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != sao_ht_luma) 21110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 21129663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(ps_slice_hdr_left->i1_slice_sao_luma_flag) 21130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 21140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao->b3_y_type_idx) 21150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 21160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update left, top and top-left */ 21170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < sao_ht_luma; row++) 21180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 21190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)]; 21200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 21210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Update in next location*/ 21220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_curr_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1]; 21230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma); 21250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 21270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(1 == ps_sao->b3_y_type_idx) 21290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 21300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[1] = ps_sao->b4_y_offset_1; 21310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[2] = ps_sao->b4_y_offset_2; 21320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[3] = ps_sao->b4_y_offset_3; 21330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[4] = ps_sao->b4_y_offset_4; 21340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr(pu1_src_luma, 21360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 21370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma, 21380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma, 21390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_curr_ctb, 21400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_y_band_pos, 21410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y, 21420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma, 21430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma 21440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 21450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 21460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else // if(2 <= ps_sao->b3_y_type_idx) 21480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 21490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[1] = ps_sao->b4_y_offset_1; 21500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[2] = ps_sao->b4_y_offset_2; 21510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[3] = ps_sao->b4_y_offset_3; 21520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[4] = ps_sao->b4_y_offset_4; 21530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 21550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 21560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[i] = 255; 21570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 0; 21580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[i] = 0; 21590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 21600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 21610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /****************************************************************** 21620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Derive the Top-left CTB's neighbour pixel's slice indices. 21630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 21640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 21650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * ____________ 21660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | | 21670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | L_T| | 21680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * |____|_______|____ 21690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | | | 21700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * L_L | L | L_R | | 21710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * |____|_______| | 21720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | 21730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * L_D | | 21740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * |____________| 21750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 21760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *****************************************************************/ 21770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*In case of slices or tiles*/ 21790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 21800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 21810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 21820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_l_t = ps_sao_ctxt->i4_ctb_x - 1; 21830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_l_t = ps_sao_ctxt->i4_ctb_y - 1; 21840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_l_l = ps_sao_ctxt->i4_ctb_x - 1; 21860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_l_l = ps_sao_ctxt->i4_ctb_y; 21870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_l_r = ps_sao_ctxt->i4_ctb_x; 21890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_l_r = ps_sao_ctxt->i4_ctb_y; 21900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_l_d = ps_sao_ctxt->i4_ctb_x - 1; 21920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_l_d = ps_sao_ctxt->i4_ctb_y; 21930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_l = ps_sao_ctxt->i4_ctb_x - 1; 21950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_l = ps_sao_ctxt->i4_ctb_y; 21960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 21970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_slice_hdr->i1_first_slice_in_pic_flag) 21980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 21990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 22000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[2] = -1; 22020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[4] = -1; 22030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[5] = -1; 22040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 22060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[2] = au4_idx_l[4] = pu1_slice_idx[ctbx_l_t + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)]; 22080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[5] = pu1_slice_idx[ctbx_l_t + 1 + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)]; 22090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_l = au4_idx_l[6] = pu1_slice_idx[ctbx_l + (ctby_l * ps_sps->i2_pic_wd_in_ctb)]; 22110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[0] = pu1_slice_idx[ctbx_l_l + (ctby_l_l * ps_sps->i2_pic_wd_in_ctb)]; 22120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[1] = au4_idx_l[7] = pu1_slice_idx[ctbx_l_r + (ctby_l_r * ps_sps->i2_pic_wd_in_ctb)]; 22130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[3] = pu1_slice_idx[ctbx_l_d + (ctby_l_d * ps_sps->i2_pic_wd_in_ctb)]; 22140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 22150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Verify that the neighbor ctbs don't cross pic boundary.*/ 22160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 22170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] = 0; 22190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 22200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = 0; 22210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 22230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_l)->i1_slice_loop_filter_across_slices_enabled_flag; 22250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[2]; 22260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 22270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //TODO: ILF flag checks for [0] and [6] is missing. 22290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_l[1])->i1_slice_loop_filter_across_slices_enabled_flag; 22300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_l[3])->i1_slice_loop_filter_across_slices_enabled_flag; 22310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_l[7])->i1_slice_loop_filter_across_slices_enabled_flag; 22329663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 22339663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(idx_l < au4_idx_l[5]) 22349663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 22359663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + au4_idx_l[5])->i1_slice_loop_filter_across_slices_enabled_flag; 22369663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 22379663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 22380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 22390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag 22400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * of the pixel having a greater address is checked. Accordingly, set the availability flags 22410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 22420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 22430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 22450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_l[i] != idx_l) 22460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 1; 22480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 22500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 22520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Reset indices*/ 22550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 22560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[i] = 0; 22580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 22610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_tiles_enabled_flag) 22620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Calculate availability flags at slice boundary */ 22640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y)))) 22650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */ 22670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag) 22680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 22700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[2] = -1; 22720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[4] = -1; 22730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[5] = -1; 22740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 22760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[2] = au4_idx_l[4] = pu1_tile_idx[ctbx_l_t + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)]; 22780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[5] = pu1_tile_idx[ctbx_l_t + 1 + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)]; 22790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 22810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_l = au4_idx_l[6] = pu1_tile_idx[ctbx_l + (ctby_l * ps_sps->i2_pic_wd_in_ctb)]; 22820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[0] = pu1_tile_idx[ctbx_l_l + (ctby_l_l * ps_sps->i2_pic_wd_in_ctb)]; 22830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[1] = au4_idx_l[7] = pu1_tile_idx[ctbx_l_r + (ctby_l_r * ps_sps->i2_pic_wd_in_ctb)]; 22840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[3] = pu1_tile_idx[ctbx_l_d + (ctby_l_d * ps_sps->i2_pic_wd_in_ctb)]; 22850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 22860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 22870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 22890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_l[i] != idx_l) 22900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 22910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] |= 1; 22920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; 22930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 22980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 22990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 23000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 23020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i])) 23030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[i] = 0; 23050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma) 23100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[0] = 0; 23120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[4] = 0; 23130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[6] = 0; 23140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_wd_in_ctb == ps_sao_ctxt->i4_ctb_x) 23160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[1] = 0; 23180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[5] = 0; 23190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[7] = 0; 23200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 23220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 23230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[2] = 0; 23250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[4] = 0; 23260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[5] = 0; 23270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 23290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_height_in_luma_samples - (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) <= sao_ht_luma) 23300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[3] = 0; 23320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[6] = 0; 23330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[7] = 0; 23340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 23360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[0] = pu1_src_top_luma[sao_wd_luma]; 23380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u1_sao_src_top_left_luma_bot_left = pu1_sao_src_top_left_luma_bot_left[0]; 23390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma, 23400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 23410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma, 23420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma, 23430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_curr_ctb, 23440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 23450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar &u1_sao_src_top_left_luma_bot_left, 23460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma, 23470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y, 23480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma, 23490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma); 23500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 23520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23549663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 23559663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 23569663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy /* Update left, top and top-left */ 23579663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy for(row = 0; row < sao_ht_luma; row++) 23589663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 23599663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)]; 23609663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 23619663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy /*Update in next location*/ 23629663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_top_left_luma_curr_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1]; 23639663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 23649663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma); 23659663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 23660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 23680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 != sao_ht_chroma) 23690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23709663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(ps_slice_hdr_left->i1_slice_sao_chroma_flag) 23710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao->b3_cb_type_idx) 23730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < sao_ht_chroma; row++) 23750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)]; 23770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)]; 23780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2]; 23800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1]; 23810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 23820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma); 23830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 23840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 23850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(1 == ps_sao->b3_cb_type_idx) 23860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[1] = ps_sao->b4_cb_offset_1; 23880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[2] = ps_sao->b4_cb_offset_2; 23890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[3] = ps_sao->b4_cb_offset_3; 23900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[4] = ps_sao->b4_cb_offset_4; 23910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 23920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[1] = ps_sao->b4_cr_offset_1; 23930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[2] = ps_sao->b4_cr_offset_2; 23940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[3] = ps_sao->b4_cr_offset_3; 23950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[4] = ps_sao->b4_cr_offset_4; 23960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 23970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(chroma_yuv420sp_vu) 23980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 23990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma, 24000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 24010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 24020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 24030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb, 24040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cr_band_pos, 24050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cb_band_pos, 24060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 24070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 24080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 24090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma 24100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 24110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 24120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 24130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 24140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma, 24150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 24160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 24170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 24180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb, 24190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cb_band_pos, 24200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cr_band_pos, 24210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 24220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 24230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 24240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma 24250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 24260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 24270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 24280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 24290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else // if(2 <= ps_sao->b3_cb_type_idx) 24300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 24310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[1] = ps_sao->b4_cb_offset_1; 24320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[2] = ps_sao->b4_cb_offset_2; 24330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[3] = ps_sao->b4_cb_offset_3; 24340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[4] = ps_sao->b4_cb_offset_4; 24350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 24360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[1] = ps_sao->b4_cr_offset_1; 24370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[2] = ps_sao->b4_cr_offset_2; 24380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[3] = ps_sao->b4_cr_offset_3; 24390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[4] = ps_sao->b4_cr_offset_4; 24400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 24410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 24420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 24430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[i] = 255; 24440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 0; 24450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[i] = 0; 24460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 24470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 24480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*In case of slices*/ 24490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 24500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 24510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 24520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_l_t = ps_sao_ctxt->i4_ctb_x - 1; 24530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_l_t = ps_sao_ctxt->i4_ctb_y - 1; 24540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 24550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_l_l = ps_sao_ctxt->i4_ctb_x - 1; 24560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_l_l = ps_sao_ctxt->i4_ctb_y; 24570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 24580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_l_r = ps_sao_ctxt->i4_ctb_x; 24590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_l_r = ps_sao_ctxt->i4_ctb_y; 24600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 24610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_l_d = ps_sao_ctxt->i4_ctb_x - 1; 24620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_l_d = ps_sao_ctxt->i4_ctb_y; 24630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 24640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_l = ps_sao_ctxt->i4_ctb_x - 1; 24650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_l = ps_sao_ctxt->i4_ctb_y; 24660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 24670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_slice_hdr->i1_first_slice_in_pic_flag) 24680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 24690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 24700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 24710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[2] = -1; 24720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[4] = -1; 24730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[5] = -1; 24740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 24750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 24760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 24770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[2] = au4_idx_l[4] = pu1_slice_idx[ctbx_l_t + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)]; 24780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[5] = pu1_slice_idx[ctbx_l_t + 1 + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)]; 24790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 24800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_l = au4_idx_l[6] = pu1_slice_idx[ctbx_l + (ctby_l * ps_sps->i2_pic_wd_in_ctb)]; 24810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[0] = pu1_slice_idx[ctbx_l_l + (ctby_l_l * ps_sps->i2_pic_wd_in_ctb)]; 24820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[1] = au4_idx_l[7] = pu1_slice_idx[ctbx_l_r + (ctby_l_r * ps_sps->i2_pic_wd_in_ctb)]; 24830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[3] = pu1_slice_idx[ctbx_l_d + (ctby_l_d * ps_sps->i2_pic_wd_in_ctb)]; 24840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 24850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Verify that the neighbour ctbs dont cross pic boundary.*/ 24860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 24870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 24880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] = 0; 24890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 24900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = 0; 24910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 24920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 24930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 24940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_l)->i1_slice_loop_filter_across_slices_enabled_flag; 24950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[2]; 24960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 24979663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 24989663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(au4_idx_l[5] > idx_l) 24999663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 25009663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + au4_idx_l[5])->i1_slice_loop_filter_across_slices_enabled_flag; 25019663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 25029663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 25030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar // au4_ilf_across_tile_slice_enable[5] = au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_l)->i1_slice_loop_filter_across_slices_enabled_flag; 25040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_l[1])->i1_slice_loop_filter_across_slices_enabled_flag; 25050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_l[3])->i1_slice_loop_filter_across_slices_enabled_flag; 25060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_l[7])->i1_slice_loop_filter_across_slices_enabled_flag; 25070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 25080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag 25090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * of the pixel having a greater address is checked. Accordingly, set the availability flags 25100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 25110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 25120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 25140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_l[i] != idx_l) 25150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 1; 25170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 25190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 25210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Reset indices*/ 25240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 25250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[i] = 0; 25270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_tiles_enabled_flag) 25300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Calculate availability flags at slice boundary */ 25320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y)))) 25330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */ 25350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag) 25360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 25380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[2] = -1; 25400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[4] = -1; 25410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[5] = -1; 25420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 25440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[2] = au4_idx_l[4] = pu1_tile_idx[ctbx_l_t + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)]; 25460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[5] = pu1_tile_idx[ctbx_l_t + 1 + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)]; 25470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 25490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_l = au4_idx_l[6] = pu1_tile_idx[ctbx_l + (ctby_l * ps_sps->i2_pic_wd_in_ctb)]; 25500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[0] = pu1_tile_idx[ctbx_l_l + (ctby_l_l * ps_sps->i2_pic_wd_in_ctb)]; 25510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[1] = au4_idx_l[7] = pu1_tile_idx[ctbx_l_r + (ctby_l_r * ps_sps->i2_pic_wd_in_ctb)]; 25520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_l[3] = pu1_tile_idx[ctbx_l_d + (ctby_l_d * ps_sps->i2_pic_wd_in_ctb)]; 25530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 25540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 25550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 25570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_l[i] != idx_l) 25580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] |= 1; 25600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; //=0 25610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 25670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 25690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i])) 25700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[i] = 0; 25720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma) 25770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[0] = 0; 25790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[4] = 0; 25800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[6] = 0; 25810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 25830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_wd_in_ctb == ps_sao_ctxt->i4_ctb_x) 25840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[1] = 0; 25860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[5] = 0; 25870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[7] = 0; 25880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 25900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 25910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[2] = 0; 25930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[4] = 0; 25940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[5] = 0; 25950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 25960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 25970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_height_in_luma_samples / 2 - (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) <= sao_ht_chroma) 25980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 25990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[3] = 0; 26000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[6] = 0; 26010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[7] = 0; 26020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 26030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 26040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 26050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[0] = pu1_src_top_chroma[sao_wd_chroma]; 26060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[1] = pu1_src_top_chroma[sao_wd_chroma + 1]; 26070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_bot_left[0] = pu1_sao_src_top_left_chroma_bot_left[0]; 26080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_bot_left[1] = pu1_sao_src_top_left_chroma_bot_left[1]; 26090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //au1_src_bot_left[0] = pu1_src_chroma[sao_ht_chroma * src_strd - 2]; 26100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar //au1_src_bot_left[1] = pu1_src_chroma[sao_ht_chroma * src_strd - 1]; 26110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((ctb_size == 16) && (ps_sao_ctxt->i4_ctb_x != ps_sps->i2_pic_wd_in_ctb - 1)) 26120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 26130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[0] = pu1_src_chroma[sao_wd_chroma - src_strd]; 26140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[1] = pu1_src_chroma[sao_wd_chroma - src_strd + 1]; 26150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 26160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 26170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 26180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(chroma_yuv420sp_vu) 26190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 26200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, 26210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 26220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 26230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 26240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb, 26250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 26260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_bot_left, 26270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma, 26280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 26290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 26300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 26310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma); 26320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 26330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 26340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 26350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, 26360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 26370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 26380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 26390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb, 26400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 26410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_bot_left, 26420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma, 26430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 26440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 26450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 26460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma); 26470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 26480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 26490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 26500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 26510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 26529663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 26539663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 26549663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy for(row = 0; row < sao_ht_chroma; row++) 26559663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 26569663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)]; 26579663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)]; 26589663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 26599663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_top_left_chroma_curr_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2]; 26609663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_top_left_chroma_curr_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1]; 26619663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 26629663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma); 26639663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 26640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 26650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 26660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_luma += sao_wd_luma; 26670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_chroma += sao_wd_chroma; 26680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao += 1; 26690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 26700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 26710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 26720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Current CTB */ 26730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 26740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_wd_luma = ctb_size - SAO_SHIFT_CTB; 26750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_wd_chroma = ctb_size - SAO_SHIFT_CTB * 2; 26760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_ht_luma = ctb_size - SAO_SHIFT_CTB; 26770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_ht_chroma = ctb_size / 2 - SAO_SHIFT_CTB; 26780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctbx_c_t = 0, ctbx_c_l = 0, ctbx_c_r = 0, ctbx_c_d = 0, ctbx_c = 0; 26790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 ctby_c_t = 0, ctby_c_l = 0, ctby_c_r = 0, ctby_c_d = 0, ctby_c = 0; 26800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 au4_idx_c[8], idx_c; 26810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 26820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_rows; 26830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_cols; 26840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 26850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + sao_wd_luma); 26860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_cols <= SAO_SHIFT_CTB) 26870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 26880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma += remaining_cols; 26890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 26900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + sao_wd_chroma); 26910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_cols <= 2 * SAO_SHIFT_CTB) 26920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 26930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma += remaining_cols; 26940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 26950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 26960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + sao_ht_luma); 26970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_rows <= SAO_SHIFT_CTB) 26980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 26990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma += remaining_rows; 27000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 27010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_rows = ps_sps->i2_pic_height_in_luma_samples / 2 - ((ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) + sao_ht_chroma); 27020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_rows <= SAO_SHIFT_CTB) 27030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 27040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma += remaining_rows; 27050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 27060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size); 27080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size); 27090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size); 27100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma = ps_sao_ctxt->pu1_sao_src_left_chroma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size); 27110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 != sao_wd_luma) && (0 != sao_ht_luma)) 27130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 27140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->ps_slice_hdr->i1_slice_sao_luma_flag) 27150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 27160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao->b3_y_type_idx) 27170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 27180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Update left, top and top-left */ 27190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < sao_ht_luma; row++) 27200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 27210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)]; 27220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 27230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_curr_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1]; 27240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma); 27260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_top_right[0] = pu1_src_luma[(sao_ht_luma - 1) * src_strd + sao_wd_luma]; 27280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 27300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(1 == ps_sao->b3_y_type_idx) 27320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 27330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[1] = ps_sao->b4_y_offset_1; 27340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[2] = ps_sao->b4_y_offset_2; 27350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[3] = ps_sao->b4_y_offset_3; 27360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[4] = ps_sao->b4_y_offset_4; 27370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr(pu1_src_luma, 27390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 27400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma, 27410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma, 27420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_curr_ctb, 27430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_y_band_pos, 27440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y, 27450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma, 27460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma 27470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 27480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 27490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else // if(2 <= ps_sao->b3_y_type_idx) 27510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 27520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[1] = ps_sao->b4_y_offset_1; 27530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[2] = ps_sao->b4_y_offset_2; 27540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[3] = ps_sao->b4_y_offset_3; 27550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y[4] = ps_sao->b4_y_offset_4; 27560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 27580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 27590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[i] = 255; 27600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 0; 27610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[i] = 0; 27620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 27630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 27640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /****************************************************************** 27650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Derive the Top-left CTB's neighbour pixel's slice indices. 27660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 27670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 27680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * ____________ 27690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | | 27700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | C_T | 27710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * |____|_______|____ 27720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | | | 27730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | C_L| C | C_R| 27740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * |____|_______| | 27750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | C_D | 27760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * | | 27770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * |____________| 27780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * 27790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar *****************************************************************/ 27800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*In case of slices*/ 27820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 27830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 27840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 27850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_c_t = ps_sao_ctxt->i4_ctb_x; 27860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_c_t = ps_sao_ctxt->i4_ctb_y - 1; 27870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_c_l = ps_sao_ctxt->i4_ctb_x - 1; 27890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_c_l = ps_sao_ctxt->i4_ctb_y; 27900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_c_r = ps_sao_ctxt->i4_ctb_x; 27920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_c_r = ps_sao_ctxt->i4_ctb_y; 27930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_c_d = ps_sao_ctxt->i4_ctb_x; 27950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_c_d = ps_sao_ctxt->i4_ctb_y; 27960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 27970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_c = ps_sao_ctxt->i4_ctb_x; 27980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_c = ps_sao_ctxt->i4_ctb_y; 27990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 28000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_slice_hdr->i1_first_slice_in_pic_flag) 28010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 28030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[6] = -1; 28050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[0] = -1; 28060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = -1; 28070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 28090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[0] = au4_idx_c[6] = pu1_slice_idx[ctbx_c_l + (ctby_c_l * ps_sps->i2_pic_wd_in_ctb)]; 28110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 28130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 28140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[2] = -1; 28160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[5] = -1; 28170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = -1; 28180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 28200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = pu1_slice_idx[ctbx_c_t - 1 + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)]; 28220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[2] = au4_idx_c[5] = pu1_slice_idx[ctbx_c_t + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)]; 28230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_c = pu1_slice_idx[ctbx_c + (ctby_c * ps_sps->i2_pic_wd_in_ctb)]; 28250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[1] = au4_idx_c[7] = pu1_slice_idx[ctbx_c_r + (ctby_c_r * ps_sps->i2_pic_wd_in_ctb)]; 28260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[3] = pu1_slice_idx[ctbx_c_d + (ctby_c_d * ps_sps->i2_pic_wd_in_ctb)]; 28270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 28280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 28290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] = 0; 28310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[0] = 0; 28320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 28330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 28350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + au4_idx_c[6])->i1_slice_loop_filter_across_slices_enabled_flag; 28370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[0] = (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag;; 28380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 28400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] = 0; 28420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 28430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = 0; 28440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 28460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag; 28480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[2]; 28490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_c[1])->i1_slice_loop_filter_across_slices_enabled_flag; 28510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_c[3])->i1_slice_loop_filter_across_slices_enabled_flag; 28520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_c[7])->i1_slice_loop_filter_across_slices_enabled_flag; 28530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 28549663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(au4_idx_c[6] < idx_c) 28559663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 28569663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag; 28579663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 28589663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 28590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 28600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag 28610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * of the pixel having a greater address is checked. Accordingly, set the availability flags 28620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 28630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 28640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 28660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_c[i] != idx_c) 28670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 1; 28690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 28710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 28730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Reset indices*/ 28760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 28770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[i] = 0; 28790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 28820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_tiles_enabled_flag) 28830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Calculate availability flags at slice boundary */ 28850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y)))) 28860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */ 28880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag) 28890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 28910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[6] = -1; 28930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[0] = -1; 28940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = -1; 28950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 28960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 28970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 28980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[0] = au4_idx_c[6] = pu1_tile_idx[ctbx_c_l + (ctby_c_l * ps_sps->i2_pic_wd_in_ctb)]; 28990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 29020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[2] = -1; 29040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[5] = -1; 29050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = -1; 29060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 29080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = pu1_tile_idx[ctbx_c_t - 1 + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)]; 29100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[2] = au4_idx_c[5] = pu1_tile_idx[ctbx_c_t + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)]; 29110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_c = pu1_tile_idx[ctbx_c + (ctby_c * ps_sps->i2_pic_wd_in_ctb)]; 29130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[1] = au4_idx_c[7] = pu1_tile_idx[ctbx_c_r + (ctby_c_r * ps_sps->i2_pic_wd_in_ctb)]; 29140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[3] = pu1_tile_idx[ctbx_c_d + (ctby_c_d * ps_sps->i2_pic_wd_in_ctb)]; 29150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 29170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 29190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_c[i] != idx_c) 29200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] |= 1; 29220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; //=0 29230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 29300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 29320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i])) 29330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[i] = 0; 29350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 29410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[0] = 0; 29430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[4] = 0; 29440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[6] = 0; 29450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_width_in_luma_samples - (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) <= sao_wd_luma) 29480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[1] = 0; 29500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[5] = 0; 29510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[7] = 0; 29520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 29550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[2] = 0; 29570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[4] = 0; 29580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[5] = 0; 29590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_height_in_luma_samples - (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) <= sao_ht_luma) 29620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[3] = 0; 29640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[6] = 0; 29650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma[7] = 0; 29660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 29690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[0] = pu1_src_luma[sao_wd_luma - src_strd]; 29700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u1_sao_src_top_left_luma_bot_left = pu1_src_luma[sao_ht_luma * src_strd - 1]; 29710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 29720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma, 29730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 29740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_luma, 29750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_luma, 29760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_curr_ctb, 29770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 29780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar &u1_sao_src_top_left_luma_bot_left, 29790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_luma, 29800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_y, 29810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_luma, 29820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_luma); 29830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_top_right[0] = pu1_src_luma[(sao_ht_luma - 1) * src_strd + sao_wd_luma]; 29850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_luma_bot_left[0] = pu1_src_luma[(sao_ht_luma)*src_strd + sao_wd_luma - 1]; 29860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 29889663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 29899663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 29909663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy /* Update left, top and top-left */ 29919663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy for(row = 0; row < sao_ht_luma; row++) 29929663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 29939663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)]; 29949663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 29959663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_top_left_luma_curr_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1]; 29969663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 29979663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma); 29989663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 29999663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_top_left_luma_top_right[0] = pu1_src_luma[(sao_ht_luma - 1) * src_strd + sao_wd_luma]; 30009663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 30010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 30020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((0 != sao_wd_chroma) && (0 != sao_ht_chroma)) 30040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 30050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->ps_slice_hdr->i1_slice_sao_chroma_flag) 30060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 30070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao->b3_cb_type_idx) 30080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 30090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < sao_ht_chroma; row++) 30100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 30110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)]; 30120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)]; 30130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 30140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2]; 30150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1]; 30160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma); 30180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_top_right[0] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma]; 30200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_top_right[1] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma + 1]; 30210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 30220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else if(1 == ps_sao->b3_cb_type_idx) 30240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 30250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[1] = ps_sao->b4_cb_offset_1; 30260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[2] = ps_sao->b4_cb_offset_2; 30270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[3] = ps_sao->b4_cb_offset_3; 30280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[4] = ps_sao->b4_cb_offset_4; 30290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[1] = ps_sao->b4_cr_offset_1; 30310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[2] = ps_sao->b4_cr_offset_2; 30320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[3] = ps_sao->b4_cr_offset_3; 30330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[4] = ps_sao->b4_cr_offset_4; 30340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(chroma_yuv420sp_vu) 30360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 30370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma, 30380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 30390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 30400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 30410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb, 30420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cr_band_pos, 30430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cb_band_pos, 30440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 30450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 30460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 30470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma 30480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 30490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 30500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 30510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 30520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma, 30530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 30540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 30550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 30560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb, 30570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cb_band_pos, 30580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_sao->b5_cr_band_pos, 30590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 30600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 30610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 30620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma 30630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ); 30640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 30650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 30660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else // if(2 <= ps_sao->b3_cb_type_idx) 30680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 30690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[1] = ps_sao->b4_cb_offset_1; 30700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[2] = ps_sao->b4_cb_offset_2; 30710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[3] = ps_sao->b4_cb_offset_3; 30720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb[4] = ps_sao->b4_cb_offset_4; 30730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[1] = ps_sao->b4_cr_offset_1; 30750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[2] = ps_sao->b4_cr_offset_2; 30760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[3] = ps_sao->b4_cr_offset_3; 30770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr[4] = ps_sao->b4_cr_offset_4; 30780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 30800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 30810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[i] = 255; 30820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 0; 30830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[i] = 0; 30840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 30850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 30860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 30870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 30880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 30890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_c_t = ps_sao_ctxt->i4_ctb_x; 30900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_c_t = ps_sao_ctxt->i4_ctb_y - 1; 30910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_c_l = ps_sao_ctxt->i4_ctb_x - 1; 30930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_c_l = ps_sao_ctxt->i4_ctb_y; 30940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_c_r = ps_sao_ctxt->i4_ctb_x; 30960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_c_r = ps_sao_ctxt->i4_ctb_y; 30970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 30980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_c_d = ps_sao_ctxt->i4_ctb_x; 30990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_c_d = ps_sao_ctxt->i4_ctb_y; 31000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 31010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctbx_c = ps_sao_ctxt->i4_ctb_x; 31020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ctby_c = ps_sao_ctxt->i4_ctb_y; 31030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 31040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_slice_hdr->i1_first_slice_in_pic_flag) 31050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 31070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[0] = -1; 31090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = -1; 31100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[6] = -1; 31110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 31130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[0] = au4_idx_c[6] = pu1_slice_idx[ctbx_c_l + (ctby_c_l * ps_sps->i2_pic_wd_in_ctb)]; 31150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 31170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 31180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[2] = -1; 31200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = -1; 31210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[5] = -1; 31220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 31240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[2] = au4_idx_c[5] = pu1_slice_idx[ctbx_c_t + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)]; 31260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = pu1_slice_idx[ctbx_c_t - 1 + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)]; 31270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_c = pu1_slice_idx[ctbx_c + (ctby_c * ps_sps->i2_pic_wd_in_ctb)]; 31290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[1] = au4_idx_c[7] = pu1_slice_idx[ctbx_c_r + (ctby_c_r * ps_sps->i2_pic_wd_in_ctb)]; 31300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[3] = pu1_slice_idx[ctbx_c_d + (ctby_c_d * ps_sps->i2_pic_wd_in_ctb)]; 31310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 31320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 31330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[0] = 0; 31350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 31360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] = 0; 31370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 31390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[6] &= (ps_slice_hdr_base + au4_idx_c[6])->i1_slice_loop_filter_across_slices_enabled_flag; 31410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[0] &= (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag; 31420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 31440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 31450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] = 0; 31470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[4] = 0; 31480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = 0; 31490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 31510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[2] &= (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag; 31530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[5] = au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[2]; 31540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 31560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[1] &= (ps_slice_hdr_base + au4_idx_c[1])->i1_slice_loop_filter_across_slices_enabled_flag; 31570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[3] &= (ps_slice_hdr_base + au4_idx_c[3])->i1_slice_loop_filter_across_slices_enabled_flag; 31580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[7] &= (ps_slice_hdr_base + au4_idx_c[7])->i1_slice_loop_filter_across_slices_enabled_flag; 31590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 31609663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(idx_c > au4_idx_c[6]) 31619663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 31629663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag; 31639663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 31649663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 31650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* 31660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag 31670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar * of the pixel having a greater address is checked. Accordingly, set the availability flags 31680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar */ 31690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 31700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 31720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_c[i] != idx_c) 31730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] = 1; 31750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 31770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] = 1; 31790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Reset indices*/ 31820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 31830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[i] = 0; 31850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 31870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 31880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_pps->i1_tiles_enabled_flag) 31890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Calculate availability flags at slice boundary */ 31910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y)))) 31920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */ 31940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag) 31950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 31970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 31980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[6] = -1; 31990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[0] = -1; 32000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = -1; 32010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 32030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[0] = au4_idx_c[6] = pu1_tile_idx[ctbx_c_l + (ctby_c_l * ps_sps->i2_pic_wd_in_ctb)]; 32050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 32070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 32080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[2] = -1; 32100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[5] = -1; 32110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = -1; 32120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 32140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[4] = pu1_tile_idx[ctbx_c_t - 1 + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)]; 32160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[2] = au4_idx_c[5] = pu1_tile_idx[ctbx_c_t + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)]; 32170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar idx_c = pu1_tile_idx[ctbx_c + (ctby_c * ps_sps->i2_pic_wd_in_ctb)]; 32190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[1] = au4_idx_c[7] = pu1_tile_idx[ctbx_c_r + (ctby_c_r * ps_sps->i2_pic_wd_in_ctb)]; 32200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_idx_c[3] = pu1_tile_idx[ctbx_c_d + (ctby_c_d * ps_sps->i2_pic_wd_in_ctb)]; 32210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 32220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 32230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 32250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(au4_idx_c[i] != idx_c) 32260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_tile_slice_boundary[i] |= 1; 32280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; //=0 32290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 32350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = 0; i < 8; i++) 32360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /*Sets the edges that lie on the slice/tile boundary*/ 32380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i])) 32390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[i] = 0; 32410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 32460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_x) 32470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[0] = 0; 32490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[4] = 0; 32500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[6] = 0; 32510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 32530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_width_in_luma_samples - (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) <= sao_wd_chroma) 32540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[1] = 0; 32560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[5] = 0; 32570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[7] = 0; 32580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 32600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(0 == ps_sao_ctxt->i4_ctb_y) 32610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[2] = 0; 32630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[4] = 0; 32640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[5] = 0; 32650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 32670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sps->i2_pic_height_in_luma_samples / 2 - (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) <= sao_ht_chroma) 32680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[3] = 0; 32700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[6] = 0; 32710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma[7] = 0; 32720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 32740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[0] = pu1_src_chroma[sao_wd_chroma - src_strd]; 32760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right[1] = pu1_src_chroma[sao_wd_chroma - src_strd + 1]; 32770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 32780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left[0] = pu1_src_chroma[sao_ht_chroma * src_strd - 2]; 32790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left[1] = pu1_src_chroma[sao_ht_chroma * src_strd - 1]; 32800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 32810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(chroma_yuv420sp_vu) 32820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, 32840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 32850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 32860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 32870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb, 32880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 32890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left, 32900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma, 32910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 32920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 32930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 32940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma); 32950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 32960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 32970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 32980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma, 32990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar src_strd, 33000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_left_chroma, 33010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_top_chroma, 33020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_curr_ctb, 33030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_src_top_right, 33040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_sao_src_top_left_chroma_bot_left, 33050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar au1_avail_chroma, 33060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cb, 33070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar ai1_offset_cr, 33080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_wd_chroma, 33090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_ht_chroma); 33100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 33110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 33120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 33140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_top_right[0] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma]; 33150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_top_right[1] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma + 1]; 33160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_bot_left[0] = pu1_src_chroma[(sao_ht_chroma)*src_strd + sao_wd_chroma - 2]; 33180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_sao_src_top_left_chroma_bot_left[1] = pu1_src_chroma[(sao_ht_chroma)*src_strd + sao_wd_chroma - 1]; 33190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 33209663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag)) 33219663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 33229663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy for(row = 0; row < sao_ht_chroma; row++) 33239663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy { 33249663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)]; 33259663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)]; 33269663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 33279663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_top_left_chroma_curr_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2]; 33289663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_top_left_chroma_curr_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1]; 33299663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 33309663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma); 33319663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy 33329663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_top_left_chroma_top_right[0] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma]; 33339663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy pu1_sao_src_top_left_chroma_top_right[1] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma + 1]; 33349663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy } 33350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 33370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 33380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* If no loop filter is enabled copy the backed up values */ 33430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 33440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Luma */ 33459663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(no_loop_filter_enabled_luma) 33460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 33470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_no_loop_filter_flag; 33480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 loop_filter_bit_pos; 33490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 log2_min_cu = 3; 33500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 min_cu = (1 << log2_min_cu); 33510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_tmp_luma = pu1_src_luma; 33520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_blk_ht = ctb_size - SAO_SHIFT_CTB; 33530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_blk_wd = ctb_size; 33540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_rows; 33550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_cols; 33560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + ctb_size - SAO_SHIFT_CTB); 33580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + ctb_size - SAO_SHIFT_CTB); 33590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_rows <= SAO_SHIFT_CTB) 33600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_blk_ht += remaining_rows; 33610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_cols <= SAO_SHIFT_CTB) 33620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_blk_wd += remaining_cols; 33630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_luma -= ps_sao_ctxt->i4_ctb_x ? SAO_SHIFT_CTB : 0; 33650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_luma -= ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB * src_strd : 0; 33660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_luma = ps_sao_ctxt->pu1_tmp_buf_luma; 33680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar loop_filter_bit_pos = (ps_sao_ctxt->i4_ctb_x << (log2_ctb_size - 3)) + 33700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 3)) * (loop_filter_strd << 3); 33710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_x > 0) 33720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar loop_filter_bit_pos -= 1; 33730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_no_loop_filter_flag = ps_sao_ctxt->pu1_pic_no_loop_filter_flag + 33750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (loop_filter_bit_pos >> 3); 33760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = -(ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB : 0) >> log2_min_cu; 33780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i < (sao_blk_ht + (min_cu - 1)) >> log2_min_cu; i++) 33790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 33800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp_wd = sao_blk_wd; 33810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >> 33830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (loop_filter_bit_pos & 7); 33840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag &= (1 << ((tmp_wd + (min_cu - 1)) >> log2_min_cu)) - 1; 33850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 33860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_no_loop_filter_flag) 33870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 33880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(tmp_wd > 0) 33890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 33900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(CTZ(u4_no_loop_filter_flag)) 33910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3392707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp_luma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 3393707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_backup_luma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 33940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(u4_no_loop_filter_flag) << log2_min_cu; 33950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(u4_no_loop_filter_flag)); 33960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 33970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 33980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 33990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < min_cu; row++) 34000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3401707042fda96ebede81408b854385173483798bcdHarish Mahendrakar for(col = 0; col < MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); col++) 34020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 34030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_luma[row * src_strd + col] = pu1_src_backup_luma[row * backup_strd + col]; 34040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 3406707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp_luma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 3407707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_backup_luma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 34080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(~u4_no_loop_filter_flag) << log2_min_cu; 34090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(~u4_no_loop_filter_flag)); 34100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_luma -= sao_blk_wd; 34140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_luma -= sao_blk_wd; 34150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_luma += (src_strd << log2_min_cu); 34180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_luma += (backup_strd << log2_min_cu); 34190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* Chroma */ 34239663ae211632948494bebd703d4d8f7cb576d7d6Naveen Kumar Ponnusamy if(no_loop_filter_enabled_chroma) 34240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 34250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD32 u4_no_loop_filter_flag; 34260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 loop_filter_bit_pos; 34270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 log2_min_cu = 3; 34280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 min_cu = (1 << log2_min_cu); 34290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar UWORD8 *pu1_src_tmp_chroma = pu1_src_chroma; 34300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_blk_ht = ctb_size - 2 * SAO_SHIFT_CTB; 34310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sao_blk_wd = ctb_size; 34320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_rows; 34330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 remaining_cols; 34340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + ctb_size - 2 * SAO_SHIFT_CTB); 34360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + ctb_size - 2 * SAO_SHIFT_CTB); 34370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_rows <= 2 * SAO_SHIFT_CTB) 34380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_blk_ht += remaining_rows; 34390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(remaining_cols <= 2 * SAO_SHIFT_CTB) 34400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sao_blk_wd += remaining_cols; 34410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_chroma -= ps_sao_ctxt->i4_ctb_x ? SAO_SHIFT_CTB * 2 : 0; 34430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_chroma -= ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB * src_strd : 0; 34440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_chroma = ps_sao_ctxt->pu1_tmp_buf_chroma; 34460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar loop_filter_bit_pos = (ps_sao_ctxt->i4_ctb_x << (log2_ctb_size - 3)) + 34480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 3)) * (loop_filter_strd << 3); 34490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(ps_sao_ctxt->i4_ctb_x > 0) 34500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar loop_filter_bit_pos -= 2; 34510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_no_loop_filter_flag = ps_sao_ctxt->pu1_pic_no_loop_filter_flag + 34530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (loop_filter_bit_pos >> 3); 34540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(i = -(ps_sao_ctxt->i4_ctb_y ? 2 * SAO_SHIFT_CTB : 0) >> log2_min_cu; 34560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar i < (sao_blk_ht + (min_cu - 1)) >> log2_min_cu; i++) 34570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 34580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp_wd = sao_blk_wd; 34590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >> 34610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar (loop_filter_bit_pos & 7); 34620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag &= (1 << ((tmp_wd + (min_cu - 1)) >> log2_min_cu)) - 1; 34630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(u4_no_loop_filter_flag) 34650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 34660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar while(tmp_wd > 0) 34670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 34680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(CTZ(u4_no_loop_filter_flag)) 34690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3470707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp_chroma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 3471707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_backup_chroma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 34720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(u4_no_loop_filter_flag) << log2_min_cu; 34730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(u4_no_loop_filter_flag)); 34740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar else 34760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 34770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar for(row = 0; row < min_cu / 2; row++) 34780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 3479707042fda96ebede81408b854385173483798bcdHarish Mahendrakar for(col = 0; col < MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); col++) 34800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar { 34810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_chroma[row * src_strd + col] = pu1_src_backup_chroma[row * backup_strd + col]; 34820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3485707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_tmp_chroma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 3486707042fda96ebede81408b854385173483798bcdHarish Mahendrakar pu1_src_backup_chroma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); 34870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp_wd -= CTZ(~u4_no_loop_filter_flag) << log2_min_cu; 34880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar u4_no_loop_filter_flag >>= (CTZ(~u4_no_loop_filter_flag)); 34890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_chroma -= sao_blk_wd; 34930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_chroma -= sao_blk_wd; 34940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 34960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_tmp_chroma += ((src_strd / 2) << log2_min_cu); 34970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar pu1_src_backup_chroma += ((backup_strd / 2) << log2_min_cu); 34980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 34990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 35000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar } 35010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 35020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 35030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 3504