18e9a21e730449c10cac6e6f69d255611c93f63c2hding/* 2430ce5c32361119ed81a62c918be6afbdd053eddhding * Copyright (c) 2011 Intel Corporation. All Rights Reserved. 3430ce5c32361119ed81a62c918be6afbdd053eddhding * Copyright (c) Imagination Technologies Limited, UK 48e9a21e730449c10cac6e6f69d255611c93f63c2hding * 5430ce5c32361119ed81a62c918be6afbdd053eddhding * Permission is hereby granted, free of charge, to any person obtaining a 6430ce5c32361119ed81a62c918be6afbdd053eddhding * copy of this software and associated documentation files (the 7430ce5c32361119ed81a62c918be6afbdd053eddhding * "Software"), to deal in the Software without restriction, including 8430ce5c32361119ed81a62c918be6afbdd053eddhding * without limitation the rights to use, copy, modify, merge, publish, 9430ce5c32361119ed81a62c918be6afbdd053eddhding * distribute, sub license, and/or sell copies of the Software, and to 10430ce5c32361119ed81a62c918be6afbdd053eddhding * permit persons to whom the Software is furnished to do so, subject to 11430ce5c32361119ed81a62c918be6afbdd053eddhding * the following conditions: 12430ce5c32361119ed81a62c918be6afbdd053eddhding * 13430ce5c32361119ed81a62c918be6afbdd053eddhding * The above copyright notice and this permission notice (including the 14430ce5c32361119ed81a62c918be6afbdd053eddhding * next paragraph) shall be included in all copies or substantial portions 15430ce5c32361119ed81a62c918be6afbdd053eddhding * of the Software. 16430ce5c32361119ed81a62c918be6afbdd053eddhding * 17430ce5c32361119ed81a62c918be6afbdd053eddhding * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18430ce5c32361119ed81a62c918be6afbdd053eddhding * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19430ce5c32361119ed81a62c918be6afbdd053eddhding * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20430ce5c32361119ed81a62c918be6afbdd053eddhding * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 21430ce5c32361119ed81a62c918be6afbdd053eddhding * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22430ce5c32361119ed81a62c918be6afbdd053eddhding * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23430ce5c32361119ed81a62c918be6afbdd053eddhding * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 248e9a21e730449c10cac6e6f69d255611c93f63c2hding * 258e9a21e730449c10cac6e6f69d255611c93f63c2hding * Authors: 268e9a21e730449c10cac6e6f69d255611c93f63c2hding * Edward Lin <edward.lin@intel.com> 278e9a21e730449c10cac6e6f69d255611c93f63c2hding * 288e9a21e730449c10cac6e6f69d255611c93f63c2hding */ 298e9a21e730449c10cac6e6f69d255611c93f63c2hding 308e9a21e730449c10cac6e6f69d255611c93f63c2hding#include <unistd.h> 318e9a21e730449c10cac6e6f69d255611c93f63c2hding#include <stdio.h> 328e9a21e730449c10cac6e6f69d255611c93f63c2hding#include <memory.h> 338e9a21e730449c10cac6e6f69d255611c93f63c2hding#include "hwdefs/topazhp_core_regs.h" 348e9a21e730449c10cac6e6f69d255611c93f63c2hding#include "hwdefs/topaz_vlc_regs.h" 358e9a21e730449c10cac6e6f69d255611c93f63c2hding#include "hwdefs/topazhp_multicore_regs.h" 368e9a21e730449c10cac6e6f69d255611c93f63c2hding#include "hwdefs/topazhp_multicore_regs_old.h" 378e9a21e730449c10cac6e6f69d255611c93f63c2hding#include "psb_drv_video.h" 38430ce5c32361119ed81a62c918be6afbdd053eddhding#include "tng_cmdbuf.h" 39430ce5c32361119ed81a62c918be6afbdd053eddhding#include "tng_hostbias.h" 408e9a21e730449c10cac6e6f69d255611c93f63c2hding#include "psb_drv_debug.h" 41cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan#include <stdlib.h> 428e9a21e730449c10cac6e6f69d255611c93f63c2hding 438e9a21e730449c10cac6e6f69d255611c93f63c2hding#define UNINIT_PARAM 0xCDCDCDCD 448e9a21e730449c10cac6e6f69d255611c93f63c2hding#define TOPAZHP_DEFAULT_bZeroDetectionDisable IMG_FALSE 458e9a21e730449c10cac6e6f69d255611c93f63c2hding#define TH_SKIP_IPE 6 468e9a21e730449c10cac6e6f69d255611c93f63c2hding#define TH_INTER 60 478e9a21e730449c10cac6e6f69d255611c93f63c2hding#define TH_INTER_QP 10 488e9a21e730449c10cac6e6f69d255611c93f63c2hding#define TH_INTER_MAX_LEVEL 1500 498e9a21e730449c10cac6e6f69d255611c93f63c2hding#define TH_SKIP_SPE 6 508e9a21e730449c10cac6e6f69d255611c93f63c2hding 518e9a21e730449c10cac6e6f69d255611c93f63c2hding#define TOPAZHP_DEFAULT_uTHInter TH_INTER 528e9a21e730449c10cac6e6f69d255611c93f63c2hding#define TOPAZHP_DEFAULT_uTHInterQP TH_INTER_QP 538e9a21e730449c10cac6e6f69d255611c93f63c2hding#define TOPAZHP_DEFAULT_uTHInterMaxLevel TH_INTER_MAX_LEVEL 548e9a21e730449c10cac6e6f69d255611c93f63c2hding#define TOPAZHP_DEFAULT_uTHSkipIPE TH_SKIP_IPE 558e9a21e730449c10cac6e6f69d255611c93f63c2hding#define TOPAZHP_DEFAULT_uTHSkipSPE TH_SKIP_SPE 568e9a21e730449c10cac6e6f69d255611c93f63c2hding 578e9a21e730449c10cac6e6f69d255611c93f63c2hding#define MIN_32_REV 0x00030200 588e9a21e730449c10cac6e6f69d255611c93f63c2hding#define MAX_32_REV 0x00030299 598e9a21e730449c10cac6e6f69d255611c93f63c2hding// New MP4 Lambda table 60cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywanstatic IMG_UINT8 MPEG4_QPLAMBDA_MAP[31] = { 61cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 0, 0, 1, 2, 3, 62cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 3, 4, 4, 5, 5, 63cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 6, 6, 7, 7, 8, 64cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 8, 9, 9, 10, 10, 65cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 11, 11, 11, 11, 12, 66cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 12, 12, 12, 13, 13, 13 678e9a21e730449c10cac6e6f69d255611c93f63c2hding}; 688e9a21e730449c10cac6e6f69d255611c93f63c2hding 69cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywanstatic IMG_UINT8 H263_QPLAMBDA_MAP[31] = { 70cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 0, 0, 1, 1, 2, 71cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 2, 3, 3, 4, 4, 72cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 4, 5, 5, 5, 6, 73cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 6, 6, 7, 7, 7, 74cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 7, 8, 8, 8, 8, 75cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 9, 9, 9, 9, 10,10 76cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan}; 778e9a21e730449c10cac6e6f69d255611c93f63c2hding 788e9a21e730449c10cac6e6f69d255611c93f63c2hding// new H.264 Lambda 798e9a21e730449c10cac6e6f69d255611c93f63c2hdingstatic IMG_INT8 H264_QPLAMBDA_MAP_SAD[40] = { 808e9a21e730449c10cac6e6f69d255611c93f63c2hding 2, 2, 2, 2, 3, 3, 4, 4, 818e9a21e730449c10cac6e6f69d255611c93f63c2hding 4, 5, 5, 5, 5, 5, 6, 6, 828e9a21e730449c10cac6e6f69d255611c93f63c2hding 6, 7, 7, 7, 8, 8, 9, 11, 838e9a21e730449c10cac6e6f69d255611c93f63c2hding 13, 14, 15, 17, 20, 23, 27, 31, 848e9a21e730449c10cac6e6f69d255611c93f63c2hding 36, 41, 51, 62, 74, 79, 85, 91 858e9a21e730449c10cac6e6f69d255611c93f63c2hding}; 868e9a21e730449c10cac6e6f69d255611c93f63c2hding 878e9a21e730449c10cac6e6f69d255611c93f63c2hdingstatic IMG_INT8 H264_QPLAMBDA_MAP_SATD_TABLES[][52] = { 888e9a21e730449c10cac6e6f69d255611c93f63c2hding //table 0 898e9a21e730449c10cac6e6f69d255611c93f63c2hding { 908e9a21e730449c10cac6e6f69d255611c93f63c2hding 8, 8, 8, 8, 8, 8, 8, 918e9a21e730449c10cac6e6f69d255611c93f63c2hding 8, 8, 8, 8, 8, 8, 8, 928e9a21e730449c10cac6e6f69d255611c93f63c2hding 8, 8, 8, 9, 9, 10, 10, 938e9a21e730449c10cac6e6f69d255611c93f63c2hding 11, 11, 12, 12, 13, 13, 14, 948e9a21e730449c10cac6e6f69d255611c93f63c2hding 14, 15, 15, 16, 17, 18, 20, 958e9a21e730449c10cac6e6f69d255611c93f63c2hding 21, 23, 25, 27, 30, 32, 38, 968e9a21e730449c10cac6e6f69d255611c93f63c2hding 44, 50, 56, 63, 67, 72, 77, 978e9a21e730449c10cac6e6f69d255611c93f63c2hding 82, 87, 92 988e9a21e730449c10cac6e6f69d255611c93f63c2hding }, 998e9a21e730449c10cac6e6f69d255611c93f63c2hding}; 1008e9a21e730449c10cac6e6f69d255611c93f63c2hding 1018e9a21e730449c10cac6e6f69d255611c93f63c2hdingstatic IMG_INT32 H264_DIRECT_BIAS[27] = { 1028e9a21e730449c10cac6e6f69d255611c93f63c2hding 24, 24, 24, 24, 24, 24, 24, 24, 36, 1038e9a21e730449c10cac6e6f69d255611c93f63c2hding 48, 48, 60, 60, 72, 72, 84, 96, 108, 1048e9a21e730449c10cac6e6f69d255611c93f63c2hding 200, 324, 384, 528, 672, 804, 924, 1044, 1104 1058e9a21e730449c10cac6e6f69d255611c93f63c2hding}; 1068e9a21e730449c10cac6e6f69d255611c93f63c2hding 1078e9a21e730449c10cac6e6f69d255611c93f63c2hdingstatic IMG_INT32 H264_INTRA8_SCALE[27] = { 1088e9a21e730449c10cac6e6f69d255611c93f63c2hding (234 + 8) >> 4, (231 + 8) >> 4, 1098e9a21e730449c10cac6e6f69d255611c93f63c2hding (226 + 8) >> 4, (221 + 8) >> 4, 1108e9a21e730449c10cac6e6f69d255611c93f63c2hding (217 + 8) >> 4, (213 + 8) >> 4, 1118e9a21e730449c10cac6e6f69d255611c93f63c2hding (210 + 8) >> 4, (207 + 8) >> 4, 1128e9a21e730449c10cac6e6f69d255611c93f63c2hding (204 + 8) >> 4, (202 + 8) >> 4, 1138e9a21e730449c10cac6e6f69d255611c93f63c2hding (200 + 8) >> 4, (199 + 8) >> 4, 1148e9a21e730449c10cac6e6f69d255611c93f63c2hding (197 + 8) >> 4, (197 + 8) >> 4, 1158e9a21e730449c10cac6e6f69d255611c93f63c2hding (196 + 8) >> 4, (196 + 8) >> 4, 1168e9a21e730449c10cac6e6f69d255611c93f63c2hding (197 + 8) >> 4, (197 + 8) >> 4, 1178e9a21e730449c10cac6e6f69d255611c93f63c2hding (198 + 8) >> 4, (200 + 8) >> 4, 1188e9a21e730449c10cac6e6f69d255611c93f63c2hding (202 + 8) >> 4, (204 + 8) >> 4, 1198e9a21e730449c10cac6e6f69d255611c93f63c2hding (207 + 8) >> 4, (210 + 8) >> 4, 1208e9a21e730449c10cac6e6f69d255611c93f63c2hding (213 + 8) >> 4, (217 + 8) >> 4, 1218e9a21e730449c10cac6e6f69d255611c93f63c2hding (217 + 8) >> 4 1228e9a21e730449c10cac6e6f69d255611c93f63c2hding}; 1238e9a21e730449c10cac6e6f69d255611c93f63c2hding 1248e9a21e730449c10cac6e6f69d255611c93f63c2hding/*********************************************************************************** 1258e9a21e730449c10cac6e6f69d255611c93f63c2hding* Function Name : H264InterBias 1268e9a21e730449c10cac6e6f69d255611c93f63c2hding* Inputs : ui8QP 1278e9a21e730449c10cac6e6f69d255611c93f63c2hding* Outputs : 1288e9a21e730449c10cac6e6f69d255611c93f63c2hding* Returns : IMG_INT16 1298e9a21e730449c10cac6e6f69d255611c93f63c2hding* Description : return the Inter Bias Value to use for the given QP 1308e9a21e730449c10cac6e6f69d255611c93f63c2hding ************************************************************************************/ 1318e9a21e730449c10cac6e6f69d255611c93f63c2hding 1328e9a21e730449c10cac6e6f69d255611c93f63c2hdingstatic IMG_INT16 H264_InterIntraBias[27] = { 1338e9a21e730449c10cac6e6f69d255611c93f63c2hding 20, 20, 20, 20, 20, 20, 50, 1348e9a21e730449c10cac6e6f69d255611c93f63c2hding 100, 210, 420, 420, 445, 470, 1358e9a21e730449c10cac6e6f69d255611c93f63c2hding 495, 520, 535, 550, 570, 715, 1368e9a21e730449c10cac6e6f69d255611c93f63c2hding 860, 900, 1000, 1200, 1400, 1378e9a21e730449c10cac6e6f69d255611c93f63c2hding 1600, 1800, 2000 1388e9a21e730449c10cac6e6f69d255611c93f63c2hding}; 1398e9a21e730449c10cac6e6f69d255611c93f63c2hding 140430ce5c32361119ed81a62c918be6afbdd053eddhdingstatic IMG_INT16 tng__H264ES_inter_bias(IMG_INT8 i8QP) 1418e9a21e730449c10cac6e6f69d255611c93f63c2hding{ 1428e9a21e730449c10cac6e6f69d255611c93f63c2hding if (i8QP < 1) { 1438e9a21e730449c10cac6e6f69d255611c93f63c2hding i8QP = 1; 1448e9a21e730449c10cac6e6f69d255611c93f63c2hding } 1458e9a21e730449c10cac6e6f69d255611c93f63c2hding if (i8QP > 51) { 1468e9a21e730449c10cac6e6f69d255611c93f63c2hding i8QP = 51; 1478e9a21e730449c10cac6e6f69d255611c93f63c2hding } 1488e9a21e730449c10cac6e6f69d255611c93f63c2hding 1498e9a21e730449c10cac6e6f69d255611c93f63c2hding //return aui16InterBiasValues[i8QP-36]; 1508e9a21e730449c10cac6e6f69d255611c93f63c2hding return H264_InterIntraBias[(i8QP+1)>>1]; 1518e9a21e730449c10cac6e6f69d255611c93f63c2hding} 1528e9a21e730449c10cac6e6f69d255611c93f63c2hding 1538e9a21e730449c10cac6e6f69d255611c93f63c2hding/***************************************************************************** 1548e9a21e730449c10cac6e6f69d255611c93f63c2hding * Function Name : CalculateDCScaler 1558e9a21e730449c10cac6e6f69d255611c93f63c2hding * Inputs : iQP, bChroma 1568e9a21e730449c10cac6e6f69d255611c93f63c2hding * Outputs : iDCScaler 1578e9a21e730449c10cac6e6f69d255611c93f63c2hding * Returns : IMG_INT 1588e9a21e730449c10cac6e6f69d255611c93f63c2hding * Description : Calculates either the Luma or Chroma DC scaler from the quantization scaler 1598e9a21e730449c10cac6e6f69d255611c93f63c2hding *******************************************************************************/ 1608e9a21e730449c10cac6e6f69d255611c93f63c2hdingIMG_INT 1618e9a21e730449c10cac6e6f69d255611c93f63c2hdingCalculateDCScaler(IMG_INT iQP, IMG_BOOL bChroma) 1628e9a21e730449c10cac6e6f69d255611c93f63c2hding{ 1638e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_INT iDCScaler; 1648e9a21e730449c10cac6e6f69d255611c93f63c2hding if(!bChroma) 1658e9a21e730449c10cac6e6f69d255611c93f63c2hding { 1668e9a21e730449c10cac6e6f69d255611c93f63c2hding if (iQP > 0 && iQP < 5) 1678e9a21e730449c10cac6e6f69d255611c93f63c2hding { 1688e9a21e730449c10cac6e6f69d255611c93f63c2hding iDCScaler = 8; 1698e9a21e730449c10cac6e6f69d255611c93f63c2hding } 1708e9a21e730449c10cac6e6f69d255611c93f63c2hding else if (iQP > 4 && iQP < 9) 1718e9a21e730449c10cac6e6f69d255611c93f63c2hding { 1728e9a21e730449c10cac6e6f69d255611c93f63c2hding iDCScaler = 2 * iQP; 1738e9a21e730449c10cac6e6f69d255611c93f63c2hding } 1748e9a21e730449c10cac6e6f69d255611c93f63c2hding else if (iQP > 8 && iQP < 25) 1758e9a21e730449c10cac6e6f69d255611c93f63c2hding { 1768e9a21e730449c10cac6e6f69d255611c93f63c2hding iDCScaler = iQP + 8; 1778e9a21e730449c10cac6e6f69d255611c93f63c2hding } 1788e9a21e730449c10cac6e6f69d255611c93f63c2hding else 1798e9a21e730449c10cac6e6f69d255611c93f63c2hding { 1808e9a21e730449c10cac6e6f69d255611c93f63c2hding iDCScaler = 2 * iQP -16; 1818e9a21e730449c10cac6e6f69d255611c93f63c2hding } 1828e9a21e730449c10cac6e6f69d255611c93f63c2hding } 1838e9a21e730449c10cac6e6f69d255611c93f63c2hding else 1848e9a21e730449c10cac6e6f69d255611c93f63c2hding { 1858e9a21e730449c10cac6e6f69d255611c93f63c2hding if (iQP > 0 && iQP < 5) 1868e9a21e730449c10cac6e6f69d255611c93f63c2hding { 1878e9a21e730449c10cac6e6f69d255611c93f63c2hding iDCScaler = 8; 1888e9a21e730449c10cac6e6f69d255611c93f63c2hding } 1898e9a21e730449c10cac6e6f69d255611c93f63c2hding else if (iQP > 4 && iQP < 25) 1908e9a21e730449c10cac6e6f69d255611c93f63c2hding { 1918e9a21e730449c10cac6e6f69d255611c93f63c2hding iDCScaler = (iQP + 13) / 2; 1928e9a21e730449c10cac6e6f69d255611c93f63c2hding } 1938e9a21e730449c10cac6e6f69d255611c93f63c2hding else 1948e9a21e730449c10cac6e6f69d255611c93f63c2hding { 1958e9a21e730449c10cac6e6f69d255611c93f63c2hding iDCScaler = iQP - 6; 1968e9a21e730449c10cac6e6f69d255611c93f63c2hding } 1978e9a21e730449c10cac6e6f69d255611c93f63c2hding } 1988e9a21e730449c10cac6e6f69d255611c93f63c2hding return iDCScaler; 1998e9a21e730449c10cac6e6f69d255611c93f63c2hding} 2008e9a21e730449c10cac6e6f69d255611c93f63c2hding 2018e9a21e730449c10cac6e6f69d255611c93f63c2hding/************************************************************************************************** 2028e9a21e730449c10cac6e6f69d255611c93f63c2hding* Function: MPEG4_GenerateBiasTables 2038e9a21e730449c10cac6e6f69d255611c93f63c2hding* Description: Genereate the bias tables for MPEG4 2048e9a21e730449c10cac6e6f69d255611c93f63c2hding* 2058e9a21e730449c10cac6e6f69d255611c93f63c2hding***************************************************************************************************/ 2068e9a21e730449c10cac6e6f69d255611c93f63c2hdingvoid 207430ce5c32361119ed81a62c918be6afbdd053eddhdingtng__MPEG4ES_generate_bias_tables( 2088e9a21e730449c10cac6e6f69d255611c93f63c2hding context_ENC_p ctx) 2098e9a21e730449c10cac6e6f69d255611c93f63c2hding{ 2108e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_INT16 n; 2118e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_INT16 iX; 2128e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 ui32RegVal; 2138e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT8 uiDCScaleL,uiDCScaleC,uiLambda; 2148e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 uDirectVecBias,iInterMBBias,iIntra16Bias; 2158e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_BIAS_PARAMS *psBiasParams = &(ctx->sBiasParams); 2168e9a21e730449c10cac6e6f69d255611c93f63c2hding 2178db61a0583ecc81f700e0cf13631b21f0b774a73hding ctx->sBiasTables.ui32LritcCacheChunkConfig = F_ENCODE(ctx->uChunksPerMb, INTEL_CH_PM) | 2188db61a0583ecc81f700e0cf13631b21f0b774a73hding F_ENCODE(ctx->uMaxChunks, INTEL_CH_MX) | 2198db61a0583ecc81f700e0cf13631b21f0b774a73hding F_ENCODE(ctx->uMaxChunks - ctx->uPriorityChunks, INTEL_CH_PY); 2208e9a21e730449c10cac6e6f69d255611c93f63c2hding 2218e9a21e730449c10cac6e6f69d255611c93f63c2hding 2228e9a21e730449c10cac6e6f69d255611c93f63c2hding for(n=31;n>=1;n--) 2238e9a21e730449c10cac6e6f69d255611c93f63c2hding { 2248e9a21e730449c10cac6e6f69d255611c93f63c2hding iX = n-12; 2258e9a21e730449c10cac6e6f69d255611c93f63c2hding if(iX < 0) 2268e9a21e730449c10cac6e6f69d255611c93f63c2hding { 2278e9a21e730449c10cac6e6f69d255611c93f63c2hding iX = 0; 2288e9a21e730449c10cac6e6f69d255611c93f63c2hding } 2298e9a21e730449c10cac6e6f69d255611c93f63c2hding // Dont Write QP Values To ESB -- IPE will write these values 2308e9a21e730449c10cac6e6f69d255611c93f63c2hding // Update the quantization parameter which includes doing Lamda and the Chroma QP 2318e9a21e730449c10cac6e6f69d255611c93f63c2hding 2328e9a21e730449c10cac6e6f69d255611c93f63c2hding uiDCScaleL = CalculateDCScaler(n, IMG_FALSE); 2338e9a21e730449c10cac6e6f69d255611c93f63c2hding uiDCScaleC = CalculateDCScaler(n, IMG_TRUE); 2348e9a21e730449c10cac6e6f69d255611c93f63c2hding uiLambda = psBiasParams->uLambdaSAD ? psBiasParams->uLambdaSAD : MPEG4_QPLAMBDA_MAP[n - 1]; 2358e9a21e730449c10cac6e6f69d255611c93f63c2hding 2368e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal = uiDCScaleL; 2378e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal |= (uiDCScaleC)<<8; 2388e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal |= (uiLambda)<<16; 2398e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->sBiasTables.aui32LambdaBias[n] = ui32RegVal; 2408e9a21e730449c10cac6e6f69d255611c93f63c2hding } 2418e9a21e730449c10cac6e6f69d255611c93f63c2hding 242cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan for(n=31;n>=1;n-=2) { 243cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan if(psBiasParams->bRCEnable || psBiasParams->bRCBiases) { 244cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan uDirectVecBias = psBiasParams->uTHSkipIPE * uiLambda; 245cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan iInterMBBias = psBiasParams->uTHInter * (n - psBiasParams->uTHInterQP); 246cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan //if(iInterMBBias < 0) 247cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan // iInterMBBias = 0; 248cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan if(iInterMBBias > psBiasParams->uTHInterMaxLevel) 249cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan iInterMBBias = psBiasParams->uTHInterMaxLevel; 250cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan iIntra16Bias = 0; 251cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan } else { 252cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan uDirectVecBias = psBiasParams->uIPESkipVecBias; 253cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan iInterMBBias = psBiasParams->iInterMBBias; 254cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan iIntra16Bias = psBiasParams->iIntra16Bias; 255cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan } 256cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan 257cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan ctx->sBiasTables.aui32IntraBias[n] = iIntra16Bias; 258cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan ctx->sBiasTables.aui32InterBias_P[n] = iInterMBBias; 259cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan ctx->sBiasTables.aui32DirectBias_P[n] = uDirectVecBias; 2608e9a21e730449c10cac6e6f69d255611c93f63c2hding } 2618e9a21e730449c10cac6e6f69d255611c93f63c2hding 2628e9a21e730449c10cac6e6f69d255611c93f63c2hding if(psBiasParams->bRCEnable || psBiasParams->bRCBiases) 263cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan ctx->sBiasTables.ui32sz1 = psBiasParams->uisz1; 2648e9a21e730449c10cac6e6f69d255611c93f63c2hding else 265cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan ctx->sBiasTables.ui32sz1 = psBiasParams->uisz2; 2668e9a21e730449c10cac6e6f69d255611c93f63c2hding} 2678e9a21e730449c10cac6e6f69d255611c93f63c2hding 2688e9a21e730449c10cac6e6f69d255611c93f63c2hding/************************************************************************************************** 2698e9a21e730449c10cac6e6f69d255611c93f63c2hding* Function: H263_GenerateBiasTables 2708e9a21e730449c10cac6e6f69d255611c93f63c2hding* Description: Genereate the bias tables for H.263 2718e9a21e730449c10cac6e6f69d255611c93f63c2hding* 2728e9a21e730449c10cac6e6f69d255611c93f63c2hding***************************************************************************************************/ 2738e9a21e730449c10cac6e6f69d255611c93f63c2hdingvoid 274430ce5c32361119ed81a62c918be6afbdd053eddhdingtng__H263ES_generate_bias_tables( 2758e9a21e730449c10cac6e6f69d255611c93f63c2hding context_ENC_p ctx) 2768e9a21e730449c10cac6e6f69d255611c93f63c2hding{ 2778e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_INT16 n; 2788e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_INT16 iX; 2798e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 ui32RegVal; 2808e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT8 uiDCScaleL,uiDCScaleC,uiLambda; 2818e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 uDirectVecBias,iInterMBBias,iIntra16Bias; 2828e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_BIAS_PARAMS * psBiasParams = &(ctx->sBiasParams); 2838e9a21e730449c10cac6e6f69d255611c93f63c2hding 2848db61a0583ecc81f700e0cf13631b21f0b774a73hding ctx->sBiasTables.ui32LritcCacheChunkConfig = F_ENCODE(ctx->uChunksPerMb, INTEL_CH_PM) | 2858db61a0583ecc81f700e0cf13631b21f0b774a73hding F_ENCODE(ctx->uMaxChunks, INTEL_CH_MX) | 2868db61a0583ecc81f700e0cf13631b21f0b774a73hding F_ENCODE(ctx->uMaxChunks - ctx->uPriorityChunks, INTEL_CH_PY); 2878e9a21e730449c10cac6e6f69d255611c93f63c2hding 2888e9a21e730449c10cac6e6f69d255611c93f63c2hding for(n=31;n>=1;n--) 2898e9a21e730449c10cac6e6f69d255611c93f63c2hding { 2908e9a21e730449c10cac6e6f69d255611c93f63c2hding iX = n-12; 2918e9a21e730449c10cac6e6f69d255611c93f63c2hding if(iX < 0) 2928e9a21e730449c10cac6e6f69d255611c93f63c2hding { 2938e9a21e730449c10cac6e6f69d255611c93f63c2hding iX = 0; 2948e9a21e730449c10cac6e6f69d255611c93f63c2hding } 2958e9a21e730449c10cac6e6f69d255611c93f63c2hding // Dont Write QP Values To ESB -- IPE will write these values 2968e9a21e730449c10cac6e6f69d255611c93f63c2hding // Update the quantization parameter which includes doing Lamda and the Chroma QP 2978e9a21e730449c10cac6e6f69d255611c93f63c2hding 2988e9a21e730449c10cac6e6f69d255611c93f63c2hding uiDCScaleL = CalculateDCScaler(n, IMG_FALSE); 2998e9a21e730449c10cac6e6f69d255611c93f63c2hding uiDCScaleC = CalculateDCScaler(n, IMG_TRUE); 3008e9a21e730449c10cac6e6f69d255611c93f63c2hding uiLambda = psBiasParams->uLambdaSAD ? psBiasParams->uLambdaSAD : H263_QPLAMBDA_MAP[n - 1]; 3018e9a21e730449c10cac6e6f69d255611c93f63c2hding 3028e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal=uiDCScaleL; 3038e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal |= (uiDCScaleC)<<8; 3048e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal |= (uiLambda)<<16; 3058e9a21e730449c10cac6e6f69d255611c93f63c2hding 3068e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->sBiasTables.aui32LambdaBias[n] = ui32RegVal; 3078e9a21e730449c10cac6e6f69d255611c93f63c2hding } 3088e9a21e730449c10cac6e6f69d255611c93f63c2hding 309cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan for(n=31;n>=1;n-=2) { 310cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan if(psBiasParams->bRCEnable || psBiasParams->bRCBiases) { 311cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan uDirectVecBias = psBiasParams->uTHSkipIPE * uiLambda; 312cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan iInterMBBias = psBiasParams->uTHInter * (n - psBiasParams->uTHInterQP); 313cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan //if(iInterMBBias < 0) 314cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan // iInterMBBias = 0; 315cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan if(iInterMBBias > psBiasParams->uTHInterMaxLevel) 316cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan iInterMBBias = psBiasParams->uTHInterMaxLevel; 317cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan iIntra16Bias = 0; 318cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan } else { 319cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan uDirectVecBias = psBiasParams->uIPESkipVecBias; 320cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan iInterMBBias = psBiasParams->iInterMBBias; 321cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan iIntra16Bias = psBiasParams->iIntra16Bias; 322cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan } 3238e9a21e730449c10cac6e6f69d255611c93f63c2hding 324cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan ctx->sBiasTables.aui32IntraBias[n] = iIntra16Bias; 325cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan ctx->sBiasTables.aui32InterBias_P[n] = iInterMBBias; 326cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan ctx->sBiasTables.aui32DirectBias_P[n] = uDirectVecBias; 3278e9a21e730449c10cac6e6f69d255611c93f63c2hding } 3288e9a21e730449c10cac6e6f69d255611c93f63c2hding 3298e9a21e730449c10cac6e6f69d255611c93f63c2hding if(psBiasParams->bRCEnable || psBiasParams->bRCBiases) 330cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan ctx->sBiasTables.ui32sz1 = psBiasParams->uisz1; 3318e9a21e730449c10cac6e6f69d255611c93f63c2hding else 332cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan ctx->sBiasTables.ui32sz1 = psBiasParams->uisz2; 3338e9a21e730449c10cac6e6f69d255611c93f63c2hding} 3348e9a21e730449c10cac6e6f69d255611c93f63c2hding 3358e9a21e730449c10cac6e6f69d255611c93f63c2hding/************************************************************************************************** 3368e9a21e730449c10cac6e6f69d255611c93f63c2hding* Function: H264_GenerateBiasTables 3378e9a21e730449c10cac6e6f69d255611c93f63c2hding* Description: Generate the bias tables for H.264 3388e9a21e730449c10cac6e6f69d255611c93f63c2hding* 3398e9a21e730449c10cac6e6f69d255611c93f63c2hding***************************************************************************************************/ 340430ce5c32361119ed81a62c918be6afbdd053eddhdingstatic void tng__H264ES_generate_bias_tables(context_ENC_p ctx) 3418e9a21e730449c10cac6e6f69d255611c93f63c2hding{ 3428e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_INT32 n; 3438e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 ui32RegVal; 34413149b728d681c33e036a3e26b1b61d5a8b78204edward lin IMG_UINT32 iIntra16Bias, uisz2, uIntra8Scale, uDirectVecBias_P, iInterMBBias_P, uDirectVecBias_B, iInterMBBias_B; 3458e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_BIAS_PARAMS * psBiasParams = &(ctx->sBiasParams); 3468e9a21e730449c10cac6e6f69d255611c93f63c2hding 3478e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_BYTE PVR_QP_SCALE_CR[52] = { 3488e9a21e730449c10cac6e6f69d255611c93f63c2hding 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 3498e9a21e730449c10cac6e6f69d255611c93f63c2hding 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3508e9a21e730449c10cac6e6f69d255611c93f63c2hding 28, 29, 29, 30, 31, 32, 32, 33, 34, 34, 35, 35, 36, 36, 37, 37, 3518e9a21e730449c10cac6e6f69d255611c93f63c2hding 37, 38, 38, 38, 39, 39, 39, 39 3528e9a21e730449c10cac6e6f69d255611c93f63c2hding }; 3538e9a21e730449c10cac6e6f69d255611c93f63c2hding 3548e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->sBiasTables.ui32LritcCacheChunkConfig = 3558db61a0583ecc81f700e0cf13631b21f0b774a73hding F_ENCODE(ctx->uChunksPerMb, INTEL_CH_PM) | 3568db61a0583ecc81f700e0cf13631b21f0b774a73hding F_ENCODE(ctx->uMaxChunks, INTEL_CH_MX) | 3578db61a0583ecc81f700e0cf13631b21f0b774a73hding F_ENCODE(ctx->uMaxChunks - ctx->uPriorityChunks, INTEL_CH_PY); 3588e9a21e730449c10cac6e6f69d255611c93f63c2hding 3598e9a21e730449c10cac6e6f69d255611c93f63c2hding uIntra8Scale = 0; 3608e9a21e730449c10cac6e6f69d255611c93f63c2hding for (n = 51; n >= 0; n--) { 3618e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_INT32 iX; 3628e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 uiLambdaSAD, uiLambdaSATD; 3638e9a21e730449c10cac6e6f69d255611c93f63c2hding 3648e9a21e730449c10cac6e6f69d255611c93f63c2hding iX = n - 12; 3658e9a21e730449c10cac6e6f69d255611c93f63c2hding if (iX < 0) iX = 0; 3668e9a21e730449c10cac6e6f69d255611c93f63c2hding 3678e9a21e730449c10cac6e6f69d255611c93f63c2hding uiLambdaSAD = H264_QPLAMBDA_MAP_SAD[iX]; 3688e9a21e730449c10cac6e6f69d255611c93f63c2hding uiLambdaSATD = H264_QPLAMBDA_MAP_SATD_TABLES[psBiasParams->uLambdaSATDTable][n]; 3698e9a21e730449c10cac6e6f69d255611c93f63c2hding 3708e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->uLambdaSAD != 0) uiLambdaSAD = psBiasParams->uLambdaSAD; 3718e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->uLambdaSATD != 0) uiLambdaSATD = psBiasParams->uLambdaSATD; 3728e9a21e730449c10cac6e6f69d255611c93f63c2hding 3738e9a21e730449c10cac6e6f69d255611c93f63c2hding // Dont Write QP Values To ESB -- IPE will write these values 3748e9a21e730449c10cac6e6f69d255611c93f63c2hding // Update the quantization parameter which includes doing Lamda and the Chroma QP 3758e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal = PVR_QP_SCALE_CR[n]; 3768e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal |= (uiLambdaSATD) << 8; //SATD lambda 3778e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal |= (uiLambdaSAD) << 16; //SAD lambda 3788e9a21e730449c10cac6e6f69d255611c93f63c2hding 3798e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->sBiasTables.aui32LambdaBias[n] = ui32RegVal; 3808e9a21e730449c10cac6e6f69d255611c93f63c2hding } 3818e9a21e730449c10cac6e6f69d255611c93f63c2hding 3828e9a21e730449c10cac6e6f69d255611c93f63c2hding for (n = 52; n >= 0; n -= 2) { 3838e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_INT8 qp = n; 3848e9a21e730449c10cac6e6f69d255611c93f63c2hding if (qp > 51) qp = 51; 3858e9a21e730449c10cac6e6f69d255611c93f63c2hding 3868e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->bRCEnable || psBiasParams->bRCBiases) { 387430ce5c32361119ed81a62c918be6afbdd053eddhding iInterMBBias_P = tng__H264ES_inter_bias(qp); 3888e9a21e730449c10cac6e6f69d255611c93f63c2hding uDirectVecBias_P = H264_DIRECT_BIAS[n/2]; 3898e9a21e730449c10cac6e6f69d255611c93f63c2hding 3908e9a21e730449c10cac6e6f69d255611c93f63c2hding iInterMBBias_B = iInterMBBias_P; 3918e9a21e730449c10cac6e6f69d255611c93f63c2hding uDirectVecBias_B = uDirectVecBias_P ; 3928e9a21e730449c10cac6e6f69d255611c93f63c2hding 3938e9a21e730449c10cac6e6f69d255611c93f63c2hding iIntra16Bias = 0; 3948e9a21e730449c10cac6e6f69d255611c93f63c2hding uIntra8Scale = H264_INTRA8_SCALE[n/2] - 8; 3958e9a21e730449c10cac6e6f69d255611c93f63c2hding 3968e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->uDirectVecBias != UNINIT_PARAM) 3978e9a21e730449c10cac6e6f69d255611c93f63c2hding uDirectVecBias_B = psBiasParams->uDirectVecBias; 3988e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->iInterMBBiasB != UNINIT_PARAM) 3998e9a21e730449c10cac6e6f69d255611c93f63c2hding iInterMBBias_B = psBiasParams->iInterMBBiasB; 4008e9a21e730449c10cac6e6f69d255611c93f63c2hding 4018e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->uIPESkipVecBias != UNINIT_PARAM) 4028e9a21e730449c10cac6e6f69d255611c93f63c2hding uDirectVecBias_P = psBiasParams->uIPESkipVecBias; 4038e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->iInterMBBias != UNINIT_PARAM) 4048e9a21e730449c10cac6e6f69d255611c93f63c2hding iInterMBBias_P = psBiasParams->iInterMBBias; 4058e9a21e730449c10cac6e6f69d255611c93f63c2hding 4068e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->iIntra16Bias != UNINIT_PARAM) iIntra16Bias = psBiasParams->iIntra16Bias; 4078e9a21e730449c10cac6e6f69d255611c93f63c2hding } else { 4088e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->uDirectVecBias == UNINIT_PARAM || psBiasParams->iInterMBBiasB == UNINIT_PARAM) { 4098e9a21e730449c10cac6e6f69d255611c93f63c2hding drv_debug_msg(VIDEO_DEBUG_GENERAL, "ERROR: Bias for B pictures not set up ... uDirectVecBias = 0x%x, iInterMBBiasB = 0x%x\n", psBiasParams->uDirectVecBias, psBiasParams->iInterMBBiasB); 4108e9a21e730449c10cac6e6f69d255611c93f63c2hding abort(); 4118e9a21e730449c10cac6e6f69d255611c93f63c2hding } 4128e9a21e730449c10cac6e6f69d255611c93f63c2hding uDirectVecBias_B = psBiasParams->uDirectVecBias; 4138e9a21e730449c10cac6e6f69d255611c93f63c2hding iInterMBBias_B = psBiasParams->iInterMBBiasB; 4148e9a21e730449c10cac6e6f69d255611c93f63c2hding 4158e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->uIPESkipVecBias == UNINIT_PARAM || psBiasParams->iInterMBBias == UNINIT_PARAM) { 4168e9a21e730449c10cac6e6f69d255611c93f63c2hding drv_debug_msg(VIDEO_DEBUG_GENERAL, "ERROR: Bias for I/P pictures not set up ... uIPESkipVecBias = 0x%x, iInterMBBias = 0x%x\n", psBiasParams->uIPESkipVecBias, psBiasParams->iInterMBBias); 4178e9a21e730449c10cac6e6f69d255611c93f63c2hding abort(); 4188e9a21e730449c10cac6e6f69d255611c93f63c2hding } 4198e9a21e730449c10cac6e6f69d255611c93f63c2hding uDirectVecBias_P = psBiasParams->uIPESkipVecBias; 4208e9a21e730449c10cac6e6f69d255611c93f63c2hding iInterMBBias_P = psBiasParams->iInterMBBias; 4218e9a21e730449c10cac6e6f69d255611c93f63c2hding 4228e9a21e730449c10cac6e6f69d255611c93f63c2hding iIntra16Bias = psBiasParams->iIntra16Bias; 42313149b728d681c33e036a3e26b1b61d5a8b78204edward lin uisz2 = psBiasParams->uisz2; 4248e9a21e730449c10cac6e6f69d255611c93f63c2hding } 4258e9a21e730449c10cac6e6f69d255611c93f63c2hding 4268e9a21e730449c10cac6e6f69d255611c93f63c2hding#ifdef BRN_30029 4278e9a21e730449c10cac6e6f69d255611c93f63c2hding //adjust the intra8x8 bias so that we don't do anything silly when 8x8 mode is not in use. 4288e9a21e730449c10cac6e6f69d255611c93f63c2hding if (ctx->ui32PredCombControl & F_ENCODE(1, TOPAZHP_CR_INTRA8X8_DISABLE)) { 4298e9a21e730449c10cac6e6f69d255611c93f63c2hding iIntra16Bias |= 0x7fff << 16; 4308e9a21e730449c10cac6e6f69d255611c93f63c2hding } 4318e9a21e730449c10cac6e6f69d255611c93f63c2hding#endif 4328e9a21e730449c10cac6e6f69d255611c93f63c2hding// drv_debug_msg(VIDEO_DEBUG_GENERAL, "qp %d, iIntra16Bias %d, iInterMBBias %d, uDirectVecBias %d\n", qp, iIntra16Bias, iInterMBBias, uDirectVecBias); 4338e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->sBiasTables.aui32IntraBias[n] = iIntra16Bias; 4348e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->sBiasTables.aui32InterBias_P[n] = iInterMBBias_P; 4358e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->sBiasTables.aui32DirectBias_P[n] = uDirectVecBias_P; 4368e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->sBiasTables.aui32InterBias_B[n] = iInterMBBias_B; 4378e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->sBiasTables.aui32DirectBias_B[n] = uDirectVecBias_B; 4388e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->sBiasTables.aui32IntraScale[n] = uIntra8Scale; 4398e9a21e730449c10cac6e6f69d255611c93f63c2hding } 4408e9a21e730449c10cac6e6f69d255611c93f63c2hding 4418e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->bRCEnable || psBiasParams->bRCBiases) 44213149b728d681c33e036a3e26b1b61d5a8b78204edward lin ctx->sBiasTables.ui32sz1 = psBiasParams->uisz1; 4438e9a21e730449c10cac6e6f69d255611c93f63c2hding else 44413149b728d681c33e036a3e26b1b61d5a8b78204edward lin ctx->sBiasTables.ui32sz1 = psBiasParams->uisz2; 4458e9a21e730449c10cac6e6f69d255611c93f63c2hding 4468e9a21e730449c10cac6e6f69d255611c93f63c2hding if (psBiasParams->bZeroDetectionDisable) { 44713149b728d681c33e036a3e26b1b61d5a8b78204edward lin ctx->sBiasTables.ui32RejectThresholdH264 = F_ENCODE(0, INTEL_H264_ConfigReg1) 44813149b728d681c33e036a3e26b1b61d5a8b78204edward lin | F_ENCODE(0, INTEL_H264_ConfigReg2); 4498e9a21e730449c10cac6e6f69d255611c93f63c2hding } else { 45013149b728d681c33e036a3e26b1b61d5a8b78204edward lin ctx->sBiasTables.ui32RejectThresholdH264 = F_ENCODE(psBiasParams->uzb4, INTEL_H264_ConfigReg1) 45113149b728d681c33e036a3e26b1b61d5a8b78204edward lin | F_ENCODE(psBiasParams->uzb8, INTEL_H264_ConfigReg2); 4528e9a21e730449c10cac6e6f69d255611c93f63c2hding } 4538e9a21e730449c10cac6e6f69d255611c93f63c2hding} 4548e9a21e730449c10cac6e6f69d255611c93f63c2hding 4558e9a21e730449c10cac6e6f69d255611c93f63c2hding 4568e9a21e730449c10cac6e6f69d255611c93f63c2hding/************************************************************************************************** 4578e9a21e730449c10cac6e6f69d255611c93f63c2hding* Function: VIDEO_GenerateBias 4588e9a21e730449c10cac6e6f69d255611c93f63c2hding* Description: Generate the bias tables 4598e9a21e730449c10cac6e6f69d255611c93f63c2hding* 4608e9a21e730449c10cac6e6f69d255611c93f63c2hding***************************************************************************************************/ 461430ce5c32361119ed81a62c918be6afbdd053eddhdingVAStatus tng__generate_bias(context_ENC_p ctx) 4628e9a21e730449c10cac6e6f69d255611c93f63c2hding{ 4638e9a21e730449c10cac6e6f69d255611c93f63c2hding assert(ctx); 4648e9a21e730449c10cac6e6f69d255611c93f63c2hding 4658e9a21e730449c10cac6e6f69d255611c93f63c2hding switch (ctx->eStandard) { 4668e9a21e730449c10cac6e6f69d255611c93f63c2hding case IMG_STANDARD_H264: 467430ce5c32361119ed81a62c918be6afbdd053eddhding tng__H264ES_generate_bias_tables(ctx); 4688e9a21e730449c10cac6e6f69d255611c93f63c2hding break; 4698e9a21e730449c10cac6e6f69d255611c93f63c2hding case IMG_STANDARD_H263: 470430ce5c32361119ed81a62c918be6afbdd053eddhding tng__H263ES_generate_bias_tables(ctx); 4718e9a21e730449c10cac6e6f69d255611c93f63c2hding break; 4728e9a21e730449c10cac6e6f69d255611c93f63c2hding case IMG_STANDARD_MPEG4: 473430ce5c32361119ed81a62c918be6afbdd053eddhding tng__MPEG4ES_generate_bias_tables(ctx); 4748e9a21e730449c10cac6e6f69d255611c93f63c2hding break; 4758e9a21e730449c10cac6e6f69d255611c93f63c2hding/* 4768e9a21e730449c10cac6e6f69d255611c93f63c2hding case IMG_STANDARD_MPEG2: 4778e9a21e730449c10cac6e6f69d255611c93f63c2hding MPEG2_GenerateBiasTables(ctx, psBiasParams); 4788e9a21e730449c10cac6e6f69d255611c93f63c2hding break; 4798e9a21e730449c10cac6e6f69d255611c93f63c2hding*/ 4808e9a21e730449c10cac6e6f69d255611c93f63c2hding default: 4818e9a21e730449c10cac6e6f69d255611c93f63c2hding break; 4828e9a21e730449c10cac6e6f69d255611c93f63c2hding } 4838e9a21e730449c10cac6e6f69d255611c93f63c2hding 4848e9a21e730449c10cac6e6f69d255611c93f63c2hding return VA_STATUS_SUCCESS; 4858e9a21e730449c10cac6e6f69d255611c93f63c2hding} 4868e9a21e730449c10cac6e6f69d255611c93f63c2hding 4878e9a21e730449c10cac6e6f69d255611c93f63c2hding//load bias 4888e9a21e730449c10cac6e6f69d255611c93f63c2hdingstatic IMG_INT H264_LAMBDA_COEFFS[4][3] = { 4898e9a21e730449c10cac6e6f69d255611c93f63c2hding {175, -10166, 163244 }, //SATD Lambda High 4908e9a21e730449c10cac6e6f69d255611c93f63c2hding { 16, -236, 8693 }, //SATD Lambda Low 4918e9a21e730449c10cac6e6f69d255611c93f63c2hding {198, -12240, 198865 }, //SAD Lambda High 4928e9a21e730449c10cac6e6f69d255611c93f63c2hding { 12, -176, 1402 }, //SAD Lambda Low 4938e9a21e730449c10cac6e6f69d255611c93f63c2hding}; 4948e9a21e730449c10cac6e6f69d255611c93f63c2hding 4958e9a21e730449c10cac6e6f69d255611c93f63c2hdingstatic IMG_INT MPEG4_LAMBDA_COEFFS[3] = { 4968e9a21e730449c10cac6e6f69d255611c93f63c2hding 0, 458, 1030 4978e9a21e730449c10cac6e6f69d255611c93f63c2hding}; 4988e9a21e730449c10cac6e6f69d255611c93f63c2hding 4998e9a21e730449c10cac6e6f69d255611c93f63c2hdingstatic IMG_INT H263_LAMBDA_COEFFS[3] = { 5008e9a21e730449c10cac6e6f69d255611c93f63c2hding 0, 333, 716 5018e9a21e730449c10cac6e6f69d255611c93f63c2hding}; 5028e9a21e730449c10cac6e6f69d255611c93f63c2hding 503430ce5c32361119ed81a62c918be6afbdd053eddhdingstatic void tng__H263ES_load_bias_tables( 5048e9a21e730449c10cac6e6f69d255611c93f63c2hding context_ENC_p ctx, 505cecb10be5449aa74cd1d9a2eb41c2a6a76d9ee79ywan IMG_FRAME_TYPE __maybe_unused eFrameType) 5068e9a21e730449c10cac6e6f69d255611c93f63c2hding{ 5078e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_INT32 n; 508e26d82700f9514cc175d2b54733ebdeb8824922ehding IMG_UINT32 ui32RegVal; 5098e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 count = 0, cmd_word = 0; 510430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_p cmdbuf = ctx->obj_context->tng_cmdbuf; 5118e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_BIAS_TABLES* psBiasTables = &(ctx->sBiasTables); 5128e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 *pCount; 513e26d82700f9514cc175d2b54733ebdeb8824922ehding IMG_UINT32 ui8Pipe; 5148e9a21e730449c10cac6e6f69d255611c93f63c2hding 5158e9a21e730449c10cac6e6f69d255611c93f63c2hding cmd_word = (MTX_CMDID_SW_WRITEREG & MTX_CMDWORD_ID_MASK) << MTX_CMDWORD_ID_SHIFT; 5168e9a21e730449c10cac6e6f69d255611c93f63c2hding *cmdbuf->cmd_idx++ = cmd_word; 5178e9a21e730449c10cac6e6f69d255611c93f63c2hding pCount = cmdbuf->cmd_idx; 5188e9a21e730449c10cac6e6f69d255611c93f63c2hding cmdbuf->cmd_idx++; 5198e9a21e730449c10cac6e6f69d255611c93f63c2hding 5208e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->ui32CoreRev = 0x00030401; 5218e9a21e730449c10cac6e6f69d255611c93f63c2hding 522e26d82700f9514cc175d2b54733ebdeb8824922ehding for (ui8Pipe = 0; ui8Pipe < ctx->ui8PipesToUse; ui8Pipe++) 523430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_CORE_REG, TOPAZHP_CR_SEQUENCER_CONFIG, 0, psBiasTables->ui32SeqConfigInit); 5248e9a21e730449c10cac6e6f69d255611c93f63c2hding 5258e9a21e730449c10cac6e6f69d255611c93f63c2hding if (ctx->ui32CoreRev <= MAX_32_REV) 5268e9a21e730449c10cac6e6f69d255611c93f63c2hding { 5278e9a21e730449c10cac6e6f69d255611c93f63c2hding for(n=31;n>=1;n--) 5288e9a21e730449c10cac6e6f69d255611c93f63c2hding { 5298e9a21e730449c10cac6e6f69d255611c93f63c2hding //FIXME: Zhaohan, missing register TOPAZHP_TOP_CR_LAMBDA_DC_TABLE 530430ce5c32361119ed81a62c918be6afbdd053eddhding //tng_cmdbuf_insert_reg_write(TOPAZHP_TOP_CR_LAMBDA_DC_TABLE, 0, psBiasTables->aui32LambdaBias[n]); 5318e9a21e730449c10cac6e6f69d255611c93f63c2hding } 5328e9a21e730449c10cac6e6f69d255611c93f63c2hding } else { 5338e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal = (((H263_LAMBDA_COEFFS[0]) << (SHIFT_TOPAZHP_TOP_CR_POLYNOM_ALPHA_COEFF_CORE_00)) & (MASK_TOPAZHP_TOP_CR_POLYNOM_ALPHA_COEFF_CORE_00)); 5348e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal |= (((H263_LAMBDA_COEFFS[1]) << (SHIFT_TOPAZHP_TOP_CR_POLYNOM_BETA_COEFF_CORE_00)) & (MASK_TOPAZHP_TOP_CR_POLYNOM_BETA_COEFF_CORE_00)); 535430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_ALPHA_COEFF_CORE_0, 0, ui32RegVal); 5368e9a21e730449c10cac6e6f69d255611c93f63c2hding 5378e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal = (((H263_LAMBDA_COEFFS[2]) << (SHIFT_TOPAZHP_TOP_CR_POLYNOM_GAMMA_COEFF_CORE_01)) & (MASK_TOPAZHP_TOP_CR_POLYNOM_GAMMA_COEFF_CORE_01)); 538430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_GAMMA_COEFF_CORE_0, 0, ui32RegVal); 5398e9a21e730449c10cac6e6f69d255611c93f63c2hding 5408e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal = 0x3f; 541430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_CUTOFF_CORE_0, 0, ui32RegVal); 5428e9a21e730449c10cac6e6f69d255611c93f63c2hding } 5438e9a21e730449c10cac6e6f69d255611c93f63c2hding 5448e9a21e730449c10cac6e6f69d255611c93f63c2hding for(n=31;n>=1;n-=2) 5458e9a21e730449c10cac6e6f69d255611c93f63c2hding { 546430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_INTRA_BIAS_TABLE, 0, psBiasTables->aui32IntraBias[n]); 547430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_INTER_BIAS_TABLE, 0, psBiasTables->aui32InterBias_P[n]); 548430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_DIRECT_BIAS_TABLE, 0, psBiasTables->aui32DirectBias_P[n]); 5498e9a21e730449c10cac6e6f69d255611c93f63c2hding } 5508e9a21e730449c10cac6e6f69d255611c93f63c2hding 551e26d82700f9514cc175d2b54733ebdeb8824922ehding for (ui8Pipe = 0; ui8Pipe < ctx->ui8PipesToUse; ui8Pipe++) { 55213149b728d681c33e036a3e26b1b61d5a8b78204edward lin tng_cmdbuf_insert_reg_write(TOPAZ_CORE_REG, INTEL_SZ, 0, psBiasTables->ui32sz1); 5538e9a21e730449c10cac6e6f69d255611c93f63c2hding } 5548e9a21e730449c10cac6e6f69d255611c93f63c2hding 555e26d82700f9514cc175d2b54733ebdeb8824922ehding for (ui8Pipe = 0; ui8Pipe < ctx->ui8PipesToUse; ui8Pipe++) 5568db61a0583ecc81f700e0cf13631b21f0b774a73hding tng_cmdbuf_insert_reg_write(TOPAZ_CORE_REG, INTEL_CHCF, 0, psBiasTables->ui32LritcCacheChunkConfig); 5578e9a21e730449c10cac6e6f69d255611c93f63c2hding 5588e9a21e730449c10cac6e6f69d255611c93f63c2hding *pCount = count; 5598e9a21e730449c10cac6e6f69d255611c93f63c2hding} 5608e9a21e730449c10cac6e6f69d255611c93f63c2hding 561430ce5c32361119ed81a62c918be6afbdd053eddhdingstatic void tng__MPEG4_load_bias_tables(context_ENC_p ctx) 5628e9a21e730449c10cac6e6f69d255611c93f63c2hding{ 5638e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_INT32 n; 564e26d82700f9514cc175d2b54733ebdeb8824922ehding IMG_UINT32 ui32RegVal; 5658e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 count = 0, cmd_word = 0; 566430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_p cmdbuf = ctx->obj_context->tng_cmdbuf; 5678e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_BIAS_TABLES* psBiasTables = &(ctx->sBiasTables); 5688e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 *pCount; 569e26d82700f9514cc175d2b54733ebdeb8824922ehding IMG_UINT8 ui8Pipe; 5708e9a21e730449c10cac6e6f69d255611c93f63c2hding 5718e9a21e730449c10cac6e6f69d255611c93f63c2hding cmd_word = (MTX_CMDID_SW_WRITEREG & MTX_CMDWORD_ID_MASK) << MTX_CMDWORD_ID_SHIFT; 5728e9a21e730449c10cac6e6f69d255611c93f63c2hding *cmdbuf->cmd_idx++ = cmd_word; 5738e9a21e730449c10cac6e6f69d255611c93f63c2hding pCount = cmdbuf->cmd_idx; 5748e9a21e730449c10cac6e6f69d255611c93f63c2hding cmdbuf->cmd_idx++; 5758e9a21e730449c10cac6e6f69d255611c93f63c2hding 5768e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->ui32CoreRev = 0x00030401; 5778e9a21e730449c10cac6e6f69d255611c93f63c2hding 578e26d82700f9514cc175d2b54733ebdeb8824922ehding for (ui8Pipe = 0; ui8Pipe < ctx->ui8PipesToUse; ui8Pipe++) 579430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_CORE_REG, TOPAZHP_CR_SEQUENCER_CONFIG, 0, psBiasTables->ui32SeqConfigInit); 5808e9a21e730449c10cac6e6f69d255611c93f63c2hding 5818e9a21e730449c10cac6e6f69d255611c93f63c2hding if (ctx->ui32CoreRev <= MAX_32_REV) { 5828e9a21e730449c10cac6e6f69d255611c93f63c2hding for (n=31; n >= 1; n--) { 5838e9a21e730449c10cac6e6f69d255611c93f63c2hding //FIXME: Zhaohan, missing register TOPAZHP_TOP_CR_LAMBDA_DC_TABLE 584430ce5c32361119ed81a62c918be6afbdd053eddhding //tng_cmdbuf_insert_reg_write(TOPAZHP_TOP_CR_LAMBDA_DC_TABLE, 0, psBiasTables->aui32LambdaBias[n]); 5858e9a21e730449c10cac6e6f69d255611c93f63c2hding } 5868e9a21e730449c10cac6e6f69d255611c93f63c2hding } else { 5878e9a21e730449c10cac6e6f69d255611c93f63c2hding //ui32RegVal = MPEG4_LAMBDA_COEFFS[0]| (MPEG4_LAMBDA_COEFFS[1]<<8); 5888e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal = (((MPEG4_LAMBDA_COEFFS[0]) << (SHIFT_TOPAZHP_TOP_CR_POLYNOM_ALPHA_COEFF_CORE_00)) & (MASK_TOPAZHP_TOP_CR_POLYNOM_ALPHA_COEFF_CORE_00)); 5898e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal |= (((MPEG4_LAMBDA_COEFFS[1]) << (SHIFT_TOPAZHP_TOP_CR_POLYNOM_BETA_COEFF_CORE_00)) & (MASK_TOPAZHP_TOP_CR_POLYNOM_BETA_COEFF_CORE_00)); 5908e9a21e730449c10cac6e6f69d255611c93f63c2hding 591430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_ALPHA_COEFF_CORE_0, 0, ui32RegVal); 5928e9a21e730449c10cac6e6f69d255611c93f63c2hding //ui32RegVal = MPEG4_LAMBDA_COEFFS[2]; 5938e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal = (((MPEG4_LAMBDA_COEFFS[2]) << (SHIFT_TOPAZHP_TOP_CR_POLYNOM_GAMMA_COEFF_CORE_01)) & (MASK_TOPAZHP_TOP_CR_POLYNOM_GAMMA_COEFF_CORE_01)); 5948e9a21e730449c10cac6e6f69d255611c93f63c2hding 595430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_GAMMA_COEFF_CORE_0, 0, ui32RegVal); 5968e9a21e730449c10cac6e6f69d255611c93f63c2hding 5978e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal = 0x3f; 598430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_CUTOFF_CORE_0, 0, ui32RegVal); 5998e9a21e730449c10cac6e6f69d255611c93f63c2hding } 6008e9a21e730449c10cac6e6f69d255611c93f63c2hding 6018e9a21e730449c10cac6e6f69d255611c93f63c2hding for(n=31;n>=1;n-=2) 6028e9a21e730449c10cac6e6f69d255611c93f63c2hding { 603430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_INTRA_BIAS_TABLE, 0, psBiasTables->aui32IntraBias[n]); 604430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_INTER_BIAS_TABLE, 0, psBiasTables->aui32InterBias_P[n]); 605430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_DIRECT_BIAS_TABLE, 0, psBiasTables->aui32DirectBias_P[n]); 6068e9a21e730449c10cac6e6f69d255611c93f63c2hding } 6078e9a21e730449c10cac6e6f69d255611c93f63c2hding 608e26d82700f9514cc175d2b54733ebdeb8824922ehding for (ui8Pipe = 0; ui8Pipe < ctx->ui8PipesToUse; ui8Pipe++) { 60913149b728d681c33e036a3e26b1b61d5a8b78204edward lin tng_cmdbuf_insert_reg_write(TOPAZ_CORE_REG, INTEL_SZ, 0, psBiasTables->ui32sz1); 6108e9a21e730449c10cac6e6f69d255611c93f63c2hding 6118e9a21e730449c10cac6e6f69d255611c93f63c2hding //VLC RSize is fcode - 1 and only done for mpeg4 AND mpeg2 not H263 612430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_VLC_REG, TOPAZ_VLC_CR_VLC_MPEG4_CFG, 0, F_ENCODE(psBiasTables->ui32FCode - 1, TOPAZ_VLC_CR_RSIZE)); 6138e9a21e730449c10cac6e6f69d255611c93f63c2hding } 6148e9a21e730449c10cac6e6f69d255611c93f63c2hding 615e26d82700f9514cc175d2b54733ebdeb8824922ehding for (ui8Pipe = 0; ui8Pipe < ctx->ui8PipesToUse; ui8Pipe++) 6168db61a0583ecc81f700e0cf13631b21f0b774a73hding tng_cmdbuf_insert_reg_write(TOPAZ_CORE_REG, INTEL_CHCF, 0, psBiasTables->ui32LritcCacheChunkConfig); 6178e9a21e730449c10cac6e6f69d255611c93f63c2hding 6188e9a21e730449c10cac6e6f69d255611c93f63c2hding *pCount = count; 6198e9a21e730449c10cac6e6f69d255611c93f63c2hding} 6208e9a21e730449c10cac6e6f69d255611c93f63c2hding 621430ce5c32361119ed81a62c918be6afbdd053eddhdingstatic void tng__H264ES_load_bias_tables( 6228e9a21e730449c10cac6e6f69d255611c93f63c2hding context_ENC_p ctx, 6238e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_FRAME_TYPE eFrameType) 6248e9a21e730449c10cac6e6f69d255611c93f63c2hding{ 6258e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_INT32 n; 6268e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 ui32RegVal; 6278e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_BIAS_TABLES* psBiasTables = &(ctx->sBiasTables); 628430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_p cmdbuf = ctx->obj_context->tng_cmdbuf; 6298e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 count = 0, cmd_word = 0; 6308e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_UINT32 *pCount; 631e26d82700f9514cc175d2b54733ebdeb8824922ehding IMG_UINT32 ui8Pipe; 63296b0e013cefb77a845b6533d4c2ecf6f0aa429fcedward lin drv_debug_msg(VIDEO_DEBUG_GENERAL, "%s: start\n", __FUNCTION__); 6338e9a21e730449c10cac6e6f69d255611c93f63c2hding 6348e9a21e730449c10cac6e6f69d255611c93f63c2hding cmd_word = (MTX_CMDID_SW_WRITEREG & MTX_CMDWORD_ID_MASK) << MTX_CMDWORD_ID_SHIFT; 6358e9a21e730449c10cac6e6f69d255611c93f63c2hding *cmdbuf->cmd_idx++ = cmd_word; 6368e9a21e730449c10cac6e6f69d255611c93f63c2hding pCount = cmdbuf->cmd_idx; 6378e9a21e730449c10cac6e6f69d255611c93f63c2hding cmdbuf->cmd_idx++; 6388e9a21e730449c10cac6e6f69d255611c93f63c2hding 6398e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasTables->ui32SeqConfigInit = 0x40038412; 6408e9a21e730449c10cac6e6f69d255611c93f63c2hding 641e26d82700f9514cc175d2b54733ebdeb8824922ehding for (ui8Pipe = 0; ui8Pipe < ctx->ui8PipesToUse; ui8Pipe++) 642430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_CORE_REG, TOPAZHP_CR_SEQUENCER_CONFIG, 0, psBiasTables->ui32SeqConfigInit); 6438e9a21e730449c10cac6e6f69d255611c93f63c2hding 6448e9a21e730449c10cac6e6f69d255611c93f63c2hding ctx->ui32CoreRev = 0x00030401; 6458e9a21e730449c10cac6e6f69d255611c93f63c2hding 6468e9a21e730449c10cac6e6f69d255611c93f63c2hding if (ctx->ui32CoreRev <= MAX_32_REV) { 6478e9a21e730449c10cac6e6f69d255611c93f63c2hding for (n=51; n >= 0; n--) { 6488e9a21e730449c10cac6e6f69d255611c93f63c2hding //FIXME: Zhaohan, missing register TOPAZHP_TOP_CR_LAMBDA_DC_TABLE 649430ce5c32361119ed81a62c918be6afbdd053eddhding //tng_cmdbuf_insert_reg_write(TOPAZHP_TOP_CR_LAMBDA_DC_TABLE, 0, psBiasTables->aui32LambdaBias[n]); 6508e9a21e730449c10cac6e6f69d255611c93f63c2hding } 6518e9a21e730449c10cac6e6f69d255611c93f63c2hding } else { 6528e9a21e730449c10cac6e6f69d255611c93f63c2hding //Load the lambda coeffs 6538e9a21e730449c10cac6e6f69d255611c93f63c2hding for (n = 0; n < 4; n++) { 6548e9a21e730449c10cac6e6f69d255611c93f63c2hding //ui32RegVal = H264_LAMBDA_COEFFS[n][0]| (H264_LAMBDA_COEFFS[n][1]<<8); 6558e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal = (((H264_LAMBDA_COEFFS[n][0]) << (SHIFT_TOPAZHP_TOP_CR_POLYNOM_ALPHA_COEFF_CORE_00)) & (MASK_TOPAZHP_TOP_CR_POLYNOM_ALPHA_COEFF_CORE_00)); 6568e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal |= (((H264_LAMBDA_COEFFS[n][1]) << (SHIFT_TOPAZHP_TOP_CR_POLYNOM_BETA_COEFF_CORE_00)) & (MASK_TOPAZHP_TOP_CR_POLYNOM_BETA_COEFF_CORE_00)); 6578e9a21e730449c10cac6e6f69d255611c93f63c2hding 658430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_ALPHA_COEFF_CORE_0, 0, ui32RegVal); 659430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_ALPHA_COEFF_CORE_1, 0, ui32RegVal); 660430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_ALPHA_COEFF_CORE_2, 0, ui32RegVal); 6618e9a21e730449c10cac6e6f69d255611c93f63c2hding 6628e9a21e730449c10cac6e6f69d255611c93f63c2hding //ui32RegVal = H264_LAMBDA_COEFFS[n][2]; 6638e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal = (((H264_LAMBDA_COEFFS[n][2]) << (SHIFT_TOPAZHP_TOP_CR_POLYNOM_GAMMA_COEFF_CORE_01)) & (MASK_TOPAZHP_TOP_CR_POLYNOM_GAMMA_COEFF_CORE_01)); 6648e9a21e730449c10cac6e6f69d255611c93f63c2hding 665430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_GAMMA_COEFF_CORE_0, 0, ui32RegVal); 666430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_GAMMA_COEFF_CORE_1, 0, ui32RegVal); 667430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_GAMMA_COEFF_CORE_2, 0, ui32RegVal); 6688e9a21e730449c10cac6e6f69d255611c93f63c2hding } 6698e9a21e730449c10cac6e6f69d255611c93f63c2hding ui32RegVal = 29 |(29<<6); 670430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_CUTOFF_CORE_0, 0, ui32RegVal); 671430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_CUTOFF_CORE_1, 0, ui32RegVal); 672430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_POLYNOM_CUTOFF_CORE_2, 0, ui32RegVal); 6738e9a21e730449c10cac6e6f69d255611c93f63c2hding } 6748e9a21e730449c10cac6e6f69d255611c93f63c2hding 6758e9a21e730449c10cac6e6f69d255611c93f63c2hding for (n=52;n>=0;n-=2) { 6768e9a21e730449c10cac6e6f69d255611c93f63c2hding if (eFrameType == IMG_INTER_B) { 677430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_INTER_BIAS_TABLE, 0, psBiasTables->aui32InterBias_B[n]); 678430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_DIRECT_BIAS_TABLE, 0, psBiasTables->aui32DirectBias_B[n]); 6798e9a21e730449c10cac6e6f69d255611c93f63c2hding } else { 680430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_INTER_BIAS_TABLE, 0, psBiasTables->aui32InterBias_P[n]); 681430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_DIRECT_BIAS_TABLE, 0, psBiasTables->aui32DirectBias_P[n]); 6828e9a21e730449c10cac6e6f69d255611c93f63c2hding } 683430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_INTRA_BIAS_TABLE, 0, psBiasTables->aui32IntraBias[n]); 684430ce5c32361119ed81a62c918be6afbdd053eddhding tng_cmdbuf_insert_reg_write(TOPAZ_MULTICORE_REG, TOPAZHP_TOP_CR_INTRA_SCALE_TABLE, 0, psBiasTables->aui32IntraScale[n]); 6858e9a21e730449c10cac6e6f69d255611c93f63c2hding } 6868e9a21e730449c10cac6e6f69d255611c93f63c2hding 6878e9a21e730449c10cac6e6f69d255611c93f63c2hding //aui32HpCoreRegId[ui32Pipe] 688e26d82700f9514cc175d2b54733ebdeb8824922ehding for (ui8Pipe = 0; ui8Pipe < ctx->ui8PipesToUse; ui8Pipe++) { 68913149b728d681c33e036a3e26b1b61d5a8b78204edward lin tng_cmdbuf_insert_reg_write(TOPAZ_CORE_REG, INTEL_SZ, 0, psBiasTables->ui32sz1); 6908db61a0583ecc81f700e0cf13631b21f0b774a73hding tng_cmdbuf_insert_reg_write(TOPAZ_CORE_REG, INTEL_H264_RT, 0, psBiasTables->ui32RejectThresholdH264); 6918e9a21e730449c10cac6e6f69d255611c93f63c2hding } 6928e9a21e730449c10cac6e6f69d255611c93f63c2hding 693430ce5c32361119ed81a62c918be6afbdd053eddhding// tng_cmdbuf_insert_reg_write(TOPAZHP_TOP_CR_FIRMWARE_REG_1, (MTX_SCRATCHREG_TOMTX<<2), ui32BuffersReg); 694430ce5c32361119ed81a62c918be6afbdd053eddhding// tng_cmdbuf_insert_reg_write(TOPAZHP_TOP_CR_FIRMWARE_REG_1, (MTX_SCRATCHREG_TOHOST<<2),ui32ToHostReg); 6958e9a21e730449c10cac6e6f69d255611c93f63c2hding 6968e9a21e730449c10cac6e6f69d255611c93f63c2hding // now setup the LRITC chache priority 6978e9a21e730449c10cac6e6f69d255611c93f63c2hding { 6988e9a21e730449c10cac6e6f69d255611c93f63c2hding //aui32HpCoreRegId[ui32Pipe] 699e26d82700f9514cc175d2b54733ebdeb8824922ehding for (ui8Pipe = 0; ui8Pipe < ctx->ui8PipesToUse; ui8Pipe++) { 7008db61a0583ecc81f700e0cf13631b21f0b774a73hding tng_cmdbuf_insert_reg_write(TOPAZ_CORE_REG, INTEL_CHCF, 0, psBiasTables->ui32LritcCacheChunkConfig); 7018e9a21e730449c10cac6e6f69d255611c93f63c2hding } 7028e9a21e730449c10cac6e6f69d255611c93f63c2hding } 70396b0e013cefb77a845b6533d4c2ecf6f0aa429fcedward lin drv_debug_msg(VIDEO_DEBUG_GENERAL, "%s: count = %d\n", __FUNCTION__, (int)count); 7048e9a21e730449c10cac6e6f69d255611c93f63c2hding 7058e9a21e730449c10cac6e6f69d255611c93f63c2hding *pCount = count; 7068e9a21e730449c10cac6e6f69d255611c93f63c2hding} 7078e9a21e730449c10cac6e6f69d255611c93f63c2hding 708430ce5c32361119ed81a62c918be6afbdd053eddhdingVAStatus tng_load_bias(context_ENC_p ctx, IMG_FRAME_TYPE eFrameType) 7098e9a21e730449c10cac6e6f69d255611c93f63c2hding{ 7108e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_STANDARD eStandard = ctx->eStandard; 7118e9a21e730449c10cac6e6f69d255611c93f63c2hding 7128e9a21e730449c10cac6e6f69d255611c93f63c2hding switch (eStandard) { 7138e9a21e730449c10cac6e6f69d255611c93f63c2hding case IMG_STANDARD_H264: 714430ce5c32361119ed81a62c918be6afbdd053eddhding tng__H264ES_load_bias_tables(ctx, eFrameType); //IMG_INTER_P); 7158e9a21e730449c10cac6e6f69d255611c93f63c2hding break; 7168e9a21e730449c10cac6e6f69d255611c93f63c2hding case IMG_STANDARD_H263: 717430ce5c32361119ed81a62c918be6afbdd053eddhding tng__H263ES_load_bias_tables(ctx, eFrameType); //IMG_INTER_P); 7188e9a21e730449c10cac6e6f69d255611c93f63c2hding break; 7198e9a21e730449c10cac6e6f69d255611c93f63c2hding case IMG_STANDARD_MPEG4: 720430ce5c32361119ed81a62c918be6afbdd053eddhding tng__MPEG4_load_bias_tables(ctx); 7218e9a21e730449c10cac6e6f69d255611c93f63c2hding break; 7228e9a21e730449c10cac6e6f69d255611c93f63c2hding/* 7238e9a21e730449c10cac6e6f69d255611c93f63c2hding case IMG_STANDARD_MPEG2: 724430ce5c32361119ed81a62c918be6afbdd053eddhding tng__MPEG2_LoadBiasTables(psBiasTables); 7258e9a21e730449c10cac6e6f69d255611c93f63c2hding break; 7268e9a21e730449c10cac6e6f69d255611c93f63c2hding*/ 7278e9a21e730449c10cac6e6f69d255611c93f63c2hding default: 7288e9a21e730449c10cac6e6f69d255611c93f63c2hding break; 7298e9a21e730449c10cac6e6f69d255611c93f63c2hding } 7308e9a21e730449c10cac6e6f69d255611c93f63c2hding 7318e9a21e730449c10cac6e6f69d255611c93f63c2hding return VA_STATUS_SUCCESS; 7328e9a21e730449c10cac6e6f69d255611c93f63c2hding} 7338e9a21e730449c10cac6e6f69d255611c93f63c2hding 734430ce5c32361119ed81a62c918be6afbdd053eddhdingvoid tng_init_bias_params(context_ENC_p ctx) 7358e9a21e730449c10cac6e6f69d255611c93f63c2hding{ 7368e9a21e730449c10cac6e6f69d255611c93f63c2hding IMG_BIAS_PARAMS * psBiasParams = &(ctx->sBiasParams); 7378e9a21e730449c10cac6e6f69d255611c93f63c2hding memset(psBiasParams, 0, sizeof(IMG_BIAS_PARAMS)); 7388e9a21e730449c10cac6e6f69d255611c93f63c2hding //default 7398e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->uLambdaSAD = 0; 7408e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->uLambdaSATD = 0; 7418e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->uLambdaSATDTable = 0; 7428e9a21e730449c10cac6e6f69d255611c93f63c2hding 7438e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->bRCEnable = ctx->sRCParams.bRCEnable; 7448e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->bRCBiases = IMG_TRUE; 7458e9a21e730449c10cac6e6f69d255611c93f63c2hding 7468e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->iIntra16Bias = UNINIT_PARAM; 7478e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->iInterMBBias = UNINIT_PARAM; 7488e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->iInterMBBiasB = UNINIT_PARAM; 7498e9a21e730449c10cac6e6f69d255611c93f63c2hding 7508e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->uDirectVecBias = UNINIT_PARAM; 7518e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->uIPESkipVecBias = UNINIT_PARAM; 7528e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->uSPESkipVecBias = 0; //not in spec 7538e9a21e730449c10cac6e6f69d255611c93f63c2hding 75413149b728d681c33e036a3e26b1b61d5a8b78204edward lin psBiasParams->uisz1 = 6; 75513149b728d681c33e036a3e26b1b61d5a8b78204edward lin psBiasParams->uisz2 = 6; 7568e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->bZeroDetectionDisable = TOPAZHP_DEFAULT_bZeroDetectionDisable; 7578e9a21e730449c10cac6e6f69d255611c93f63c2hding 75813149b728d681c33e036a3e26b1b61d5a8b78204edward lin psBiasParams->uzb4 = 6; 75913149b728d681c33e036a3e26b1b61d5a8b78204edward lin psBiasParams->uzb8 = 4; 7608e9a21e730449c10cac6e6f69d255611c93f63c2hding 7618e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->uTHInter = TOPAZHP_DEFAULT_uTHInter; 7628e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->uTHInterQP = TOPAZHP_DEFAULT_uTHInterQP; 7638e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->uTHInterMaxLevel = TOPAZHP_DEFAULT_uTHInterMaxLevel; 7648e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->uTHSkipIPE = TOPAZHP_DEFAULT_uTHSkipIPE; 7658e9a21e730449c10cac6e6f69d255611c93f63c2hding psBiasParams->uTHSkipSPE = TOPAZHP_DEFAULT_uTHSkipSPE; 7668e9a21e730449c10cac6e6f69d255611c93f63c2hding} 767