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