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_deblk.c
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Contains definition for the ctb level deblk function
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Srinivas T
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par List of Functions:
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*   - ihevc_deblk()
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdio.h>
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stddef.h>
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <stdlib.h>
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <string.h>
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include <assert.h>
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_typedefs.h"
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "iv.h"
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ivd.h"
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_cxa.h"
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ithread.h"
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h"
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_debug.h"
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_defs.h"
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_structs.h"
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_macros.h"
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_platform_macros.h"
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_cabac_tables.h"
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_error.h"
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_common_tables.h"
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_trace.h"
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_defs.h"
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_function_selector.h"
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_structs.h"
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_error.h"
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_nal.h"
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_bitstream.h"
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_job_queue.h"
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_utils.h"
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_debug.h"
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_deblk.h"
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevc_deblk_tables.h"
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#include "ihevcd_profile.h"
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/**
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*     Deblock CTB level function.
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @par Description:
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*     For a given CTB, deblocking on both vertical and
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*     horizontal edges is done. Both the luma and chroma
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*     blocks are processed
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @param[in] ps_deblk
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  Pointer to the deblock context
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @returns
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*  None
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*******************************************************************************
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarvoid ihevcd_deblk_ctb(deblk_ctxt_t *ps_deblk,
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                      WORD32 i4_is_last_ctb_x,
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                      WORD32 i4_is_last_ctb_y)
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctb_size;
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 log2_ctb_size;
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 u4_bs;
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 bs_tz; /*Leading zeros in boundary strength*/
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 qp_p, qp_q;
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 filter_p, filter_q;
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD8 *pu1_src;
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 qp_strd;
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 *pu4_vert_bs, *pu4_horz_bs;
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 *pu4_ctb_vert_bs, *pu4_ctb_horz_bs;
113707042fda96ebede81408b854385173483798bcdHarish Mahendrakar    WORD32 bs_strd;
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 src_strd;
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD8 *pu1_qp;
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD16 *pu2_ctb_no_loop_filter_flag;
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD16 au2_ctb_no_loop_filter_flag[9];
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 col, row;
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Flag to indicate if QP is constant in CTB
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar     * 0 - top_left, 1 - top, 2 - left, 3 - current */
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UWORD32 u4_qp_const_in_ctb[4] = { 0, 0, 0, 0 };
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32 ctb_indx;
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    WORD32  chroma_yuv420sp_vu = ps_deblk->is_chroma_yuv420sp_vu;
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sps_t *ps_sps;
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pps_t *ps_pps;
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    codec_t *ps_codec;
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    slice_header_t *ps_slice_hdr;
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    PROFILE_DISABLE_DEBLK();
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_sps = ps_deblk->ps_sps;
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_pps = ps_deblk->ps_pps;
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_codec = ps_deblk->ps_codec;
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ps_slice_hdr = ps_deblk->ps_slice_hdr;
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    log2_ctb_size = ps_sps->i1_log2_ctb_size;
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ctb_size = (1 << ps_sps->i1_log2_ctb_size);
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* strides are in units of number of bytes */
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* ctb_size * ctb_size / 8 / 16 is the number of bytes needed per CTB */
143707042fda96ebede81408b854385173483798bcdHarish Mahendrakar    bs_strd = (ps_sps->i2_pic_wd_in_ctb + 1) << (2 * log2_ctb_size - 7);
144707042fda96ebede81408b854385173483798bcdHarish Mahendrakar
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu4_vert_bs = (UWORD32 *)((UWORD8 *)ps_deblk->s_bs_ctxt.pu4_pic_vert_bs +
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    (ps_deblk->i4_ctb_x << (2 * log2_ctb_size - 7)) +
147707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                    ps_deblk->i4_ctb_y * bs_strd);
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu4_ctb_vert_bs = pu4_vert_bs;
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu4_horz_bs = (UWORD32 *)((UWORD8 *)ps_deblk->s_bs_ctxt.pu4_pic_horz_bs +
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    (ps_deblk->i4_ctb_x << (2 * log2_ctb_size - 7)) +
152707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                    ps_deblk->i4_ctb_y * bs_strd);
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu4_ctb_horz_bs = pu4_horz_bs;
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    qp_strd = ps_sps->i2_pic_wd_in_ctb << (log2_ctb_size - 3);
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu1_qp = ps_deblk->s_bs_ctxt.pu1_pic_qp + ((ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * qp_strd) << (log2_ctb_size - 3));
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pu2_ctb_no_loop_filter_flag = ps_deblk->au2_ctb_no_loop_filter_flag;
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ctb_indx = ps_deblk->i4_ctb_x + ps_sps->i2_pic_wd_in_ctb * ps_deblk->i4_ctb_y;
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(i4_is_last_ctb_y)
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
163707042fda96ebede81408b854385173483798bcdHarish Mahendrakar        pu4_vert_bs = (UWORD32 *)((UWORD8 *)pu4_vert_bs + bs_strd);
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu4_ctb_vert_bs = pu4_vert_bs;
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* ctb_size/8 is the number of edges per CTB
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * ctb_size/4 is the number of BS values needed per edge
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * divided by 8 for the number of bytes
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * 2 is the number of bits needed for each BS value */
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        memset(pu4_vert_bs, 0, 1 << (2 * log2_ctb_size - 7));
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_qp += (qp_strd << (log2_ctb_size - 3));
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu2_ctb_no_loop_filter_flag += (ctb_size >> 3);
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ctb_indx += ps_sps->i2_pic_wd_in_ctb;
1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(i4_is_last_ctb_x)
1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu4_horz_bs = (UWORD32 *)((UWORD8 *)pu4_horz_bs + (1 << (2 * log2_ctb_size - 7)));
1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu4_ctb_horz_bs = pu4_horz_bs;
1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        memset(pu4_horz_bs, 0, 1 << (2 * log2_ctb_size - 7));
1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_qp += (ctb_size >> 3);
1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(row = 0; row < (ctb_size >> 3) + 1; row++)
1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            au2_ctb_no_loop_filter_flag[row] = ps_deblk->au2_ctb_no_loop_filter_flag[row] >> (ctb_size >> 3);
1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu2_ctb_no_loop_filter_flag = au2_ctb_no_loop_filter_flag;
1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        ctb_indx += 1;
1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    u4_qp_const_in_ctb[3] = ps_deblk->s_bs_ctxt.pu1_pic_qp_const_in_ctb[(ctb_indx) >> 3] & (1 << (ctb_indx & 7));
1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_deblk->i4_ctb_x || i4_is_last_ctb_x)
1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        u4_qp_const_in_ctb[2] = ps_deblk->s_bs_ctxt.pu1_pic_qp_const_in_ctb[(ctb_indx - 1) >> 3] & (1 << ((ctb_indx - 1) & 7));
1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if((ps_deblk->i4_ctb_x || i4_is_last_ctb_x) && (ps_deblk->i4_ctb_y || i4_is_last_ctb_y))
1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        u4_qp_const_in_ctb[0] =
2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_deblk->s_bs_ctxt.pu1_pic_qp_const_in_ctb[(ctb_indx - ps_sps->i2_pic_wd_in_ctb - 1) >> 3] &
2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (1 << ((ctb_indx - ps_sps->i2_pic_wd_in_ctb - 1) & 7));
2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(ps_deblk->i4_ctb_y || i4_is_last_ctb_y)
2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        u4_qp_const_in_ctb[1] =
2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_deblk->s_bs_ctxt.pu1_pic_qp_const_in_ctb[(ctb_indx - ps_sps->i2_pic_wd_in_ctb) >> 3] &
2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        (1 << ((ctb_indx - ps_sps->i2_pic_wd_in_ctb) & 7));
2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    src_strd = ps_codec->i4_strd;
2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Luma Vertical Edge */
2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == i4_is_last_ctb_x)
2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Top CTB's slice header */
2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        slice_header_t *ps_slice_hdr_top;
2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cur_ctb_indx = ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(i4_is_last_ctb_y)
2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                cur_ctb_indx += ps_sps->i2_pic_wd_in_ctb;
2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_slice_hdr_top = ps_codec->ps_slice_hdr_base + ps_deblk->pu1_slice_idx[cur_ctb_indx - ps_sps->i2_pic_wd_in_ctb];
2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src = ps_deblk->pu1_cur_pic_luma + ((ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_deblk->ps_codec->i4_strd) << (log2_ctb_size));
2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src += i4_is_last_ctb_y ? ps_deblk->ps_codec->i4_strd << log2_ctb_size : 0;
2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /** Deblocking is done on a shifted CTB -
2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         *  Vertical edge processing is done by shifting the CTB up by four pixels */
2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src -= 4 * src_strd;
2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(col = 0; col < ctb_size / 8; col++)
2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 shift = 0;
2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
239707042fda96ebede81408b854385173483798bcdHarish Mahendrakar            /*  downshift vert_bs by ctb_size/2 for each column
2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             *  shift = (col & ((MAX_CTB_SIZE >> log2_ctb_size) - 1)) << (log2_ctb_size - 1);
2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             *  which will reduce to the following assuming ctb size is one of 16, 32 and 64
2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             *  and deblocking is done on 8x8 grid
2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             */
2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(6 != log2_ctb_size)
2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                shift = (col & 1) << (log2_ctb_size - 1);
2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* BS for the column - Last row is excluded and the top row is included*/
2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_bs = (pu4_vert_bs[0] >> shift) << 2;
2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_deblk->i4_ctb_y || i4_is_last_ctb_y)
2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Picking the last BS of the previous CTB corresponding to the same column */
253707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                UWORD32 *pu4_vert_bs_top = (UWORD32 *)((UWORD8 *)pu4_vert_bs - bs_strd);
2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD32 u4_top_bs = (*pu4_vert_bs_top) >> (shift + (1 << (log2_ctb_size - 1)) - 2);
2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_bs |= u4_top_bs & 3;
2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(row = 0; row < ctb_size / 4;)
2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD8 i1_beta_offset_div2 = ps_slice_hdr->i1_beta_offset_div2;
2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD8 i1_tc_offset_div2 = ps_slice_hdr->i1_tc_offset_div2;
2620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Trailing zeros are computed and the corresponding rows are not processed */
2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                bs_tz = CTZ(u4_bs) >> 1;
2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(0 != bs_tz)
2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    u4_bs = u4_bs >> (bs_tz << 1);
2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((row + bs_tz) >= (ctb_size / 4))
2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        pu1_src += 4 * (ctb_size / 4 - row) * src_strd;
2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        pu1_src += 4 * bs_tz  * src_strd;
2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    row += bs_tz;
2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    continue;
2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(0 == row)
2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    i1_beta_offset_div2 = ps_slice_hdr_top->i1_beta_offset_div2;
2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    i1_tc_offset_div2 = ps_slice_hdr_top->i1_tc_offset_div2;
2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(0 == col)
2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[0] ?
2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8 * qp_strd - ctb_size / 8] :
2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-qp_strd - 1];
2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[1] ?
2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8 * qp_strd] :
2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[col - 1 - qp_strd];
2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    qp_q = u4_qp_const_in_ctb[1] ?
2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[-ctb_size / 8 * qp_strd] :
2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[col - qp_strd];
2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(0 == col)
3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[2] ?
3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8] :
3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[((row - 1) >> 1) * qp_strd - 1];
3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[3] ?
3100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[0] :
3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[((row - 1) >> 1) * qp_strd + col - 1];
3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
3130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    qp_q = u4_qp_const_in_ctb[3] ?
3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[0] :
3160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[((row - 1) >> 1) * qp_strd + col];
3170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_p = (pu2_ctb_no_loop_filter_flag[(row + 1) >> 1] >> col) & 1;
3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_q = (pu2_ctb_no_loop_filter_flag[(row + 1) >> 1] >> col) & 2;
3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* filter_p and filter_q are inverted as they are calculated using no_loop_filter_flags */
3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_p = !filter_p;
3230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_q = !filter_q;
3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(filter_p || filter_q)
3260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
3276c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                    DUMP_DEBLK_LUMA_VERT(pu1_src, src_strd,
3286c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                         u4_bs & 3, qp_p, qp_q,
3296c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                         ps_slice_hdr->i1_beta_offset_div2,
3306c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                         ps_slice_hdr->i1_tc_offset_div2,
3316c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                         filter_p, filter_q);
3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_func_selector.ihevc_deblk_luma_vert_fptr(pu1_src, src_strd,
3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                         u4_bs & 3, qp_p, qp_q,
3340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                         i1_beta_offset_div2,
3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                         i1_tc_offset_div2,
3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                         filter_p, filter_q);
3370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_src += 4 * src_strd;
3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_bs = u4_bs >> 2;
3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                row++;
3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((64 == ctb_size) ||
3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ((32 == ctb_size) && (col & 1)))
3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu4_vert_bs++;
3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_src -= (src_strd << log2_ctb_size);
3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_src += 8;
3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu4_vert_bs = pu4_ctb_vert_bs;
3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Luma Horizontal Edge */
3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == i4_is_last_ctb_y)
3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Left CTB's slice header */
3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        slice_header_t *ps_slice_hdr_left;
3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cur_ctb_indx = ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(i4_is_last_ctb_x)
3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                cur_ctb_indx += 1;
3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_slice_hdr_left = ps_codec->ps_slice_hdr_base + ps_deblk->pu1_slice_idx[cur_ctb_indx - 1];
3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src = ps_deblk->pu1_cur_pic_luma + ((ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_deblk->ps_codec->i4_strd) << log2_ctb_size);
3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src += i4_is_last_ctb_x ? ctb_size : 0;
3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /** Deblocking is done on a shifted CTB -
3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         *  Horizontal edge processing is done by shifting the CTB left by four pixels */
3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src -= 4;
3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(row = 0; row < ctb_size / 8; row++)
3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
3770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 shift = 0;
3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* downshift vert_bs by ctb_size/2 for each column
3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             *  shift = (row & (MAX_CTB_SIZE / ctb_size - 1)) * ctb_size / 2;
3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             *  which will reduce to the following assuming ctb size is one of 16, 32 and 64
3820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             *  and deblocking is done on 8x8 grid
3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar             */
3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(6 != log2_ctb_size)
3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                shift = (row & 1) << (log2_ctb_size - 1);
3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* BS for the row - Last column is excluded and the left column is included*/
3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_bs = (pu4_horz_bs[0] >> shift) << 2;
3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_deblk->i4_ctb_x || i4_is_last_ctb_x)
3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
3920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /** Picking the last BS of the previous CTB corresponding to the same row
3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                * UWORD32 *pu4_horz_bs_left = (UWORD32 *)((UWORD8 *)pu4_horz_bs - (ctb_size / 8) * (ctb_size / 4) / 8 * 2);
3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                */
3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD32 *pu4_horz_bs_left = (UWORD32 *)((UWORD8 *)pu4_horz_bs - (1 << (2 * log2_ctb_size - 7)));
3960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD32 u4_left_bs = (*pu4_horz_bs_left) >> (shift + (1 << (log2_ctb_size - 1)) - 2);
3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_bs |= u4_left_bs & 3;
3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(col = 0; col < ctb_size / 4;)
4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD8 i1_beta_offset_div2 = ps_slice_hdr->i1_beta_offset_div2;
4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD8 i1_tc_offset_div2 = ps_slice_hdr->i1_tc_offset_div2;
4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                bs_tz = CTZ(u4_bs) >> 1;
4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(0 != bs_tz)
4070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    u4_bs = u4_bs >> (bs_tz << 1);
4090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((col + bs_tz) >= (ctb_size / 4))
4110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        pu1_src += 4 * (ctb_size / 4 - col);
4120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        pu1_src += 4 * bs_tz;
4140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    col += bs_tz;
4160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    continue;
4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(0 == col)
4200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    i1_beta_offset_div2 = ps_slice_hdr_left->i1_beta_offset_div2;
4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    i1_tc_offset_div2 = ps_slice_hdr_left->i1_tc_offset_div2;
4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(0 == row)
4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
4260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[0] ?
4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8 * qp_strd - ctb_size / 8] :
4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-qp_strd - 1];
4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
4300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
4310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[2] ?
4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8] :
4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[(row - 1) * qp_strd - 1];
4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    qp_q = u4_qp_const_in_ctb[2] ?
4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[-ctb_size / 8] :
4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[row * qp_strd - 1];
4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(0 == row)
4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[1] ?
4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8 * qp_strd] :
4470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[((col - 1) >> 1) - qp_strd];
4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
4510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[3] ?
4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[0] :
4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[((col - 1) >> 1) + (row - 1) * qp_strd];
4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    qp_q = u4_qp_const_in_ctb[3] ?
4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[0] :
4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[((col - 1) >> 1) + row * qp_strd];
4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_p = (pu2_ctb_no_loop_filter_flag[row] >> ((col + 1) >> 1)) & 1;
4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_q = (pu2_ctb_no_loop_filter_flag[row + 1] >> ((col + 1) >> 1)) & 1;
4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* filter_p and filter_q are inverted as they are calculated using no_loop_filter_flags */
4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_p = !filter_p;
4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_q = !filter_q;
4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(filter_p || filter_q)
4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
4696c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                    DUMP_DEBLK_LUMA_HORZ(pu1_src, src_strd,
4706c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                         u4_bs & 3, qp_p, qp_q,
4716c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                         ps_slice_hdr->i1_beta_offset_div2,
4726c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                         ps_slice_hdr->i1_tc_offset_div2,
4736c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                         filter_p, filter_q);
4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ps_codec->s_func_selector.ihevc_deblk_luma_horz_fptr(pu1_src, src_strd,
4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                         u4_bs & 3, qp_p, qp_q,
4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                         i1_beta_offset_div2,
4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                         i1_tc_offset_div2, filter_p, filter_q);
4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_src += 4;
4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_bs = u4_bs >> 2;
4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                col++;
4830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if((64 == ctb_size) ||
4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                            ((32 == ctb_size) && (row & 1)))
4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu4_horz_bs++;
4890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_src -= ctb_size;
4910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_src += (src_strd << 3);
4920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu4_horz_bs = pu4_ctb_horz_bs;
4940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
4950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Chroma Veritcal Edge */
4980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == i4_is_last_ctb_x)
5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
5010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Top CTB's slice header */
5030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        slice_header_t *ps_slice_hdr_top;
5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
5050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cur_ctb_indx = ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(i4_is_last_ctb_y)
5070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                cur_ctb_indx += ps_sps->i2_pic_wd_in_ctb;
5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_slice_hdr_top = ps_codec->ps_slice_hdr_base + ps_deblk->pu1_slice_idx[cur_ctb_indx - ps_sps->i2_pic_wd_in_ctb];
5090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src = ps_deblk->pu1_cur_pic_chroma + ((ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_deblk->ps_codec->i4_strd / 2) << log2_ctb_size);
5120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src += i4_is_last_ctb_y ? (ps_deblk->ps_codec->i4_strd / 2) << log2_ctb_size : 0;
5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /** Deblocking is done on a shifted CTB -
5150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         *  Vertical edge processing is done by shifting the CTB up by four pixels */
5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src -= 4 * src_strd;
5170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(col = 0; col < ctb_size / 16; col++)
5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
5200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* BS for the column - Last row is excluded and the top row is included*/
5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_bs = pu4_vert_bs[0] << 2;
5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_deblk->i4_ctb_y || i4_is_last_ctb_y)
5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* Picking the last BS of the previous CTB corresponding to the same column */
527707042fda96ebede81408b854385173483798bcdHarish Mahendrakar                UWORD32 *pu4_vert_bs_top = (UWORD32 *)((UWORD8 *)pu4_vert_bs - bs_strd);
5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD32 u4_top_bs = (*pu4_vert_bs_top) >> ((1 << (log2_ctb_size - 1)) - 2);
5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_bs |= u4_top_bs & 3;
5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Every alternate boundary strength value is used for chroma */
5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_bs &= 0x22222222;
5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(row = 0; row < ctb_size / 8;)
5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD8 i1_tc_offset_div2 = ps_slice_hdr->i1_tc_offset_div2;
5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                bs_tz = CTZ(u4_bs) >> 2;
5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(0 != bs_tz)
5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((row + bs_tz) >= (ctb_size / 8))
5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        pu1_src += 4 * (ctb_size / 8 - row) * src_strd;
5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        pu1_src += 4 * bs_tz  * src_strd;
5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    row += bs_tz;
5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    u4_bs = u4_bs >> (bs_tz << 2);
5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    continue;
5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(0 == row)
5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    i1_tc_offset_div2 = ps_slice_hdr_top->i1_tc_offset_div2;
5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(0 == col)
5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[0] ?
5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8 * qp_strd - ctb_size / 8] :
5590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-qp_strd - 1];
5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
5630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[1] ?
5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8 * qp_strd] :
5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[2 * col - 1 - qp_strd];
5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    qp_q = u4_qp_const_in_ctb[1] ?
5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[-ctb_size / 8 * qp_strd] :
5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[2 * col - qp_strd];
5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(0 == col)
5750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[2] ?
5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8] :
5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[(row - 1) * qp_strd - 1];
5790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[3] ?
5830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[0] :
5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[(row - 1) * qp_strd + 2 * col - 1];
5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    qp_q = u4_qp_const_in_ctb[3] ?
5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[0] :
5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[(row - 1) * qp_strd + 2 * col];
5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
5910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_p = (pu2_ctb_no_loop_filter_flag[row] >> (col << 1)) & 1;
5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_q = (pu2_ctb_no_loop_filter_flag[row] >> (col << 1)) & 2;
5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* filter_p and filter_q are inverted as they are calculated using no_loop_filter_flags */
5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_p = !filter_p;
5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_q = !filter_q;
5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(filter_p || filter_q)
5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ASSERT(1 == ((u4_bs & 3) >> 1));
6016c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                    DUMP_DEBLK_CHROMA_VERT(pu1_src, src_strd,
6026c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                           u4_bs & 3, qp_p, qp_q,
6036c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                           ps_pps->i1_pic_cb_qp_offset,
6046c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                           ps_pps->i1_pic_cr_qp_offset,
6056c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                           ps_slice_hdr->i1_tc_offset_div2,
6066c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                           filter_p, filter_q);
6070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(chroma_yuv420sp_vu)
6080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
6090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_codec->s_func_selector.ihevc_deblk_chroma_vert_fptr(pu1_src,
6100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               src_strd,
6110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               qp_q,
6120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               qp_p,
6130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               ps_pps->i1_pic_cr_qp_offset,
6140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               ps_pps->i1_pic_cb_qp_offset,
6150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               i1_tc_offset_div2,
6160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               filter_q,
6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               filter_p);
6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
6190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
6200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
6210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_codec->s_func_selector.ihevc_deblk_chroma_vert_fptr(pu1_src,
6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               src_strd,
6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               qp_p,
6240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               qp_q,
6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               ps_pps->i1_pic_cb_qp_offset,
6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               ps_pps->i1_pic_cr_qp_offset,
6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               i1_tc_offset_div2,
6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               filter_p,
6290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               filter_q);
6300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
6310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_src += 4 * src_strd;
6340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_bs = u4_bs >> 4;
6350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                row++;
6360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu4_vert_bs += (64 == ctb_size) ? 2 : 1;
6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_src -= ((src_strd / 2) << log2_ctb_size);
6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_src += 16;
6410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
6430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    /* Chroma Horizontal Edge */
6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    if(0 == i4_is_last_ctb_y)
6470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    {
6480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /* Left CTB's slice header */
6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        slice_header_t *ps_slice_hdr_left;
6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            WORD32 cur_ctb_indx = ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
6530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(i4_is_last_ctb_x)
6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                cur_ctb_indx += 1;
6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            ps_slice_hdr_left = ps_codec->ps_slice_hdr_base + ps_deblk->pu1_slice_idx[cur_ctb_indx - 1];
6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src = ps_deblk->pu1_cur_pic_chroma + ((ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_deblk->ps_codec->i4_strd / 2) << log2_ctb_size);
6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src += i4_is_last_ctb_x ? ctb_size : 0;
6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        /** Deblocking is done on a shifted CTB -
6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar         * Vertical edge processing is done by shifting the CTB up by four pixels (8 here beacuse UV are interleaved) */
6630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        pu1_src -= 8;
6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        for(row = 0; row < ctb_size / 16; row++)
6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        {
6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* BS for the row - Last column is excluded and the left column is included*/
6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_bs = pu4_horz_bs[0] << 2;
6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            if(ps_deblk->i4_ctb_x || i4_is_last_ctb_x)
6700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
6710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /** Picking the last BS of the previous CTB corresponding to the same row
6720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                * UWORD32 *pu4_horz_bs_left = (UWORD32 *)((UWORD8 *)pu4_horz_bs - (ctb_size / 8) * (ctb_size / 4) / 8 * 2);
6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                */
6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD32 *pu4_horz_bs_left = (UWORD32 *)((UWORD8 *)pu4_horz_bs - (1 << (2 * log2_ctb_size - 7)));
6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                UWORD32 u4_left_bs = (*pu4_horz_bs_left) >> ((1 << (log2_ctb_size - 1)) - 2);
6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_bs |= u4_left_bs & 3;
6770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
6780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            /* Every alternate boundary strength value is used for chroma */
6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            u4_bs &= 0x22222222;
6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            for(col = 0; col < ctb_size / 8;)
6830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            {
6840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                WORD8 i1_tc_offset_div2 = ps_slice_hdr->i1_tc_offset_div2;
6850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                bs_tz = CTZ(u4_bs) >> 2;
6870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(0 != bs_tz)
6880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
6890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    u4_bs = u4_bs >> (bs_tz << 2);
6900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if((col + bs_tz) >= (ctb_size / 8))
6920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        pu1_src += 8 * (ctb_size / 8 - col);
6930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
6940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        pu1_src += 8 * bs_tz;
6950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    col += bs_tz;
6970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    continue;
6980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
6990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(0 == col)
7010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
7020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    i1_tc_offset_div2 = ps_slice_hdr_left->i1_tc_offset_div2;
7030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(0 == row)
7050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
7060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[0] ?
7070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8 * qp_strd - ctb_size / 8] :
7080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-qp_strd - 1];
7090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
7100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
7110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
7120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[2] ?
7130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8] :
7140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[(2 * row - 1) * qp_strd - 1];
7150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
7160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    qp_q = u4_qp_const_in_ctb[2] ?
7180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[-ctb_size / 8] :
7190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[(2 * row) * qp_strd - 1];
7200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
7210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                else
7220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
7230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(0 == row)
7240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
7250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[1] ?
7260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[-ctb_size / 8 * qp_strd] :
7270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[col - 1 - qp_strd];
7280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
7290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
7300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
7310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        qp_p = u4_qp_const_in_ctb[3] ?
7320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[0] :
7330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                        pu1_qp[(col - 1) +  (2 * row - 1) * qp_strd];
7340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
7350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    qp_q = u4_qp_const_in_ctb[3] ?
7370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[0] :
7380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                    pu1_qp[(col - 1) + 2 * row * qp_strd];
7390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
7400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_p = (pu2_ctb_no_loop_filter_flag[row << 1] >> col) & 1;
7420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_q = (pu2_ctb_no_loop_filter_flag[(row << 1) + 1] >> col) & 1;
7430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                /* filter_p and filter_q are inverted as they are calculated using no_loop_filter_flags */
7440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_p = !filter_p;
7450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                filter_q = !filter_q;
7460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                if(filter_p || filter_q)
7480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                {
7490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    ASSERT(1 == ((u4_bs & 3) >> 1));
7506c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                    DUMP_DEBLK_CHROMA_HORZ(pu1_src, src_strd,
7516c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                           u4_bs & 3, qp_p, qp_q,
7526c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                           ps_pps->i1_pic_cb_qp_offset,
7536c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                           ps_pps->i1_pic_cr_qp_offset,
7546c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                           ps_slice_hdr->i1_tc_offset_div2,
7556c166a9e18156d364d0704fccbd53a7dc022e97dNaveen Kumar Ponnusamy                                           filter_p, filter_q);
7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    if(chroma_yuv420sp_vu)
7570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_codec->s_func_selector.ihevc_deblk_chroma_horz_fptr(pu1_src,
7590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               src_strd,
7600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               qp_q,
7610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               qp_p,
7620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               ps_pps->i1_pic_cr_qp_offset,
7630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               ps_pps->i1_pic_cb_qp_offset,
7640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               i1_tc_offset_div2,
7650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               filter_q,
7660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               filter_p);
7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    else
7690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    {
7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                        ps_codec->s_func_selector.ihevc_deblk_chroma_horz_fptr(pu1_src,
7710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               src_strd,
7720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               qp_p,
7730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               qp_q,
7740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               ps_pps->i1_pic_cb_qp_offset,
7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               ps_pps->i1_pic_cr_qp_offset,
7760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               i1_tc_offset_div2,
7770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               filter_p,
7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                                                                               filter_q);
7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                    }
7800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                }
7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                pu1_src += 8;
7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                u4_bs = u4_bs >> 4;
7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar                col++;
7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            }
7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu4_horz_bs += (64 == ctb_size) ? 2 : 1;
7880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_src -= ctb_size;
7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar            pu1_src += 8 * src_strd;
7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar        }
7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    }
7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar}
794