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