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_trans_macros.h 220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @brief 240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Macros used in the forward transform and inverse transform functions 250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @author 270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* Ittiam 280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* @remarks 300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* None 310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar* 320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar******************************************************************************* 330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar*/ 340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#ifndef IHEVC_TRANS_MACROS_H_ 350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define IHEVC_TRANS_MACROS_H_ 360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define QUANT(out, inp, quant_coeff, qp_div, log2_trans_size, q_add) \ 380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ \ 390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar LWORD64 tmp; \ 400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sign; \ 410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 bit_depth,transform_shift; \ 420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 q_bits, quant_multiplier; \ 430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* q_bits and q_add calculation*/ \ 450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* To be moved outside in neon. To be computer once per transform call */ \ 460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bit_depth = 8; \ 470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar transform_shift = MAX_TR_DYNAMIC_RANGE - bit_depth - log2_trans_size; \ 480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar quant_multiplier = 4 ; /* because quant_coeff are multiplied by 16. Instead of multiplying, we can reduce the division factor q_bits by 4 */ \ 490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar q_bits = QUANT_SHIFT + qp_div + transform_shift + SCALING_Q_SHIFT - quant_multiplier ; \ 500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sign = (inp)<0 ? -1:1; \ 520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = (LWORD64)(abs(inp)); \ 540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp * (quant_coeff); \ 550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp + (((LWORD64)q_add) << (q_bits - QUANT_ROUND_FACTOR_Q)); \ 560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp >> q_bits; \ 570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp * sign; \ 590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar out = (WORD16) CLIP_S16(tmp); \ 600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} \ 610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define QUANT_HBD(out, inp, quant_coeff, qp_div, log2_trans_size, q_add, bit_depth) \ 630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ \ 640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar LWORD64 tmp; \ 650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sign; \ 660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 transform_shift; \ 670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 q_bits, quant_multiplier; \ 680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* q_bits and q_add calculation*/ \ 700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* To be moved outside in neon. To be computer once per transform call */ \ 710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar transform_shift = MAX_TR_DYNAMIC_RANGE - bit_depth - log2_trans_size; \ 730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar quant_multiplier = 4 ; /* because quant_coeff are multiplied by 16. Instead of multiplying, we can reduce the division factor q_bits by 4 */ \ 740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar q_bits = QUANT_SHIFT + qp_div + transform_shift + SCALING_Q_SHIFT - quant_multiplier ; \ 750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sign = (inp)<0 ? -1:1; \ 770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = (LWORD64)(abs(inp)); \ 790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp * (quant_coeff); \ 800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp + (((LWORD64)q_add) << (q_bits - QUANT_ROUND_FACTOR_Q)); \ 810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp >> q_bits; \ 820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp * sign; \ 840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar out = (WORD16) CLIP_S16(tmp); \ 850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* added by 100028 */ 870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define QUANT_NO_WEIGHTMAT(out, inp, quant_coeff, qp_div, log2_trans_size, q_add) \ 880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ \ 890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp; \ 900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sign; \ 910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 bit_depth,transform_shift; \ 920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 q_bits, quant_multiplier; \ 930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* q_bits and q_add calculation*/ \ 950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* To be moved outside in neon. To be computer once per transform call */ \ 960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar bit_depth = 8; \ 970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar transform_shift = MAX_TR_DYNAMIC_RANGE - bit_depth - log2_trans_size; \ 980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar quant_multiplier = 4 ; /* because quant_coeff are multiplied by 16. Instead of multiplying, we can reduce the division factor q_bits by 4 */ \ 990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar q_bits = QUANT_SHIFT + qp_div + transform_shift + SCALING_Q_SHIFT - quant_multiplier - FLAT_RESCALE_MAT_Q_SHIFT /* 2048 */; \ 1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sign = (inp)<0 ? -1:1; \ 1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = (WORD32)(abs(inp)); \ 1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp * (quant_coeff); \ 1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp + (((WORD32)q_add) << (q_bits - QUANT_ROUND_FACTOR_Q)); \ 1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp >> q_bits; \ 1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp * sign; \ 1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar out = (WORD16) CLIP_S16(tmp); \ 1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define QUANT_NO_WEIGHTMAT_HBD(out, inp, quant_coeff, qp_div, log2_trans_size, q_add, bit_depth) \ 1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ \ 1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp; \ 1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 sign; \ 1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 transform_shift; \ 1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 q_bits, quant_multiplier; \ 1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* q_bits and q_add calculation*/ \ 1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar /* To be moved outside in neon. To be computer once per transform call */ \ 1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar transform_shift = MAX_TR_DYNAMIC_RANGE - bit_depth - log2_trans_size; \ 1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar quant_multiplier = 4 ; /* because quant_coeff are multiplied by 16. Instead of multiplying, we can reduce the division factor q_bits by 4 */ \ 1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar q_bits = QUANT_SHIFT + qp_div + transform_shift + SCALING_Q_SHIFT - quant_multiplier - FLAT_RESCALE_MAT_Q_SHIFT /* 2048 */; \ 1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar sign = (inp)<0 ? -1:1; \ 1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = (WORD32)(abs(inp)); \ 1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp * (quant_coeff); \ 1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp + (((WORD32)q_add) << (q_bits - QUANT_ROUND_FACTOR_Q)); \ 1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp >> q_bits; \ 1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp * sign; \ 1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar out = (WORD16) CLIP_S16(tmp); \ 1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Reference Inverse Quantization: "pi2_src"(Coefficients) will be clipped to 15 or 14 bits when (qp_div > shift_iq). Spec doesn't have any clip mentioned */ 1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Inverse quantization other than 4x4 */ 1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* No clipping is needed for "pi2_src"(coefficients) */ 1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define IQUANT(res, coeff /*pi2_src[index*src_strd]*/, dequant_coeff /*pi2_dequant_coeff[index*trans_size] * g_ihevc_iquant_scales[qp_rem] */, shift_iq, qp_div) \ 1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ \ 1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 tmp, add_iq; \ 1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar add_iq = SHL_NEG(1 , (shift_iq - qp_div - 1)); /* To be moved outside in neon. To be computed once per transform call */ \ 1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = coeff * dequant_coeff ; \ 1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp + add_iq; \ 1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = SHR_NEG(tmp,(shift_iq - qp_div)); \ 1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar res = CLIP_S16(tmp); \ 1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* 4x4 inverse quantization */ 1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* Options : */ 1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* 1. Clip "pi2_src"(coefficients) to 10 bits if "(qp_div >= shift_iq)" or 16 bits if "(qp_div < shift_iq)"*/ 1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar/* 2. Increasing precision of "pi2_src"(coefficients) to 64 bits */ 1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#define IQUANT_4x4(res, coeff /*pi2_src[index*src_strd]*/, dequant_coeff /*pi2_dequant_coeff[index*trans_size] * g_ihevc_iquant_scales[qp_rem] */, shift_iq, qp_div) \ 1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar{ \ 1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 clip_coeff, tmp; \ 1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 coeff_min,coeff_max; \ 1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 coeff_bit_range; \ 1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar WORD32 add_iq; \ 1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar add_iq = SHL_NEG(1 , (shift_iq - qp_div - 1)); /* To be moved outside in neon. To be computed once per transform call */ \ 1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar coeff_bit_range = 16; \ 1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar if(qp_div > shift_iq) \ 1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar coeff_bit_range = 10; \ 1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar coeff_min = -(1<<(coeff_bit_range-1)); \ 1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar coeff_max = (1<<(coeff_bit_range-1)) - 1; \ 1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar clip_coeff = CLIP3(coeff,coeff_min,coeff_max); \ 1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = clip_coeff * dequant_coeff ; \ 1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = tmp + add_iq; \ 1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar tmp = SHR_NEG(tmp,(shift_iq - qp_div)); \ 1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar \ 1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar res = CLIP_S16(tmp); \ 1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar} 1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar 1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar#endif /* IHEVC_TRANS_MACROS_H_ */ 183