1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2020 Rockchip Electronics Co. LTD 3*437bfbebSnyanmisaka * 4*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 5*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 6*437bfbebSnyanmisaka * You may obtain a copy of the License at 7*437bfbebSnyanmisaka * 8*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 9*437bfbebSnyanmisaka * 10*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 11*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 12*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 14*437bfbebSnyanmisaka * limitations under the License. 15*437bfbebSnyanmisaka */ 16*437bfbebSnyanmisaka 17*437bfbebSnyanmisaka #ifndef __HAL_VP9D_COM_H__ 18*437bfbebSnyanmisaka #define __HAL_VP9D_COM_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "rk_type.h" 21*437bfbebSnyanmisaka #include "mpp_err.h" 22*437bfbebSnyanmisaka 23*437bfbebSnyanmisaka typedef RK_U8 vp9_prob; 24*437bfbebSnyanmisaka 25*437bfbebSnyanmisaka #define PARTITION_CONTEXTS 16 26*437bfbebSnyanmisaka #define PARTITION_TYPES 4 27*437bfbebSnyanmisaka #define MAX_SEGMENTS 8 28*437bfbebSnyanmisaka #define SEG_TREE_PROBS (MAX_SEGMENTS-1) 29*437bfbebSnyanmisaka #define PREDICTION_PROBS 3 30*437bfbebSnyanmisaka #define SKIP_CONTEXTS 3 31*437bfbebSnyanmisaka #define TX_SIZE_CONTEXTS 2 32*437bfbebSnyanmisaka #define TX_SIZES 4 33*437bfbebSnyanmisaka #define INTRA_INTER_CONTEXTS 4 34*437bfbebSnyanmisaka #define PLANE_TYPES 2 35*437bfbebSnyanmisaka #define COEF_BANDS 6 36*437bfbebSnyanmisaka #define COEFF_CONTEXTS 6 37*437bfbebSnyanmisaka #define UNCONSTRAINED_NODES 3 38*437bfbebSnyanmisaka #define INTRA_MODES 10 39*437bfbebSnyanmisaka #define INTER_PROB_SIZE_ALIGN_TO_128 151 40*437bfbebSnyanmisaka #define INTRA_PROB_SIZE_ALIGN_TO_128 149 41*437bfbebSnyanmisaka #define BLOCK_SIZE_GROUPS 4 42*437bfbebSnyanmisaka #define COMP_INTER_CONTEXTS 5 43*437bfbebSnyanmisaka #define REF_CONTEXTS 5 44*437bfbebSnyanmisaka #define INTER_MODE_CONTEXTS 7 45*437bfbebSnyanmisaka #define SWITCHABLE_FILTERS 3 // number of switchable filters 46*437bfbebSnyanmisaka #define SWITCHABLE_FILTER_CONTEXTS (SWITCHABLE_FILTERS + 1) 47*437bfbebSnyanmisaka #define INTER_MODES 4 48*437bfbebSnyanmisaka #define MV_JOINTS 4 49*437bfbebSnyanmisaka #define MV_CLASSES 11 50*437bfbebSnyanmisaka #define CLASS0_BITS 1 /* bits at integer precision for class 0 */ 51*437bfbebSnyanmisaka #define CLASS0_SIZE (1 << CLASS0_BITS) 52*437bfbebSnyanmisaka #define MV_OFFSET_BITS (MV_CLASSES + CLASS0_BITS - 2) 53*437bfbebSnyanmisaka #define MV_FP_SIZE 4 54*437bfbebSnyanmisaka 55*437bfbebSnyanmisaka #define PROB_SIZE 4864 56*437bfbebSnyanmisaka #define PROB_KF_SIZE (82 * 16) 57*437bfbebSnyanmisaka #define COUNT_SIZE 13208 58*437bfbebSnyanmisaka 59*437bfbebSnyanmisaka /* 60*437bfbebSnyanmisaka * MAX_SEGMAP_SIZE calculate(e.g. 4096x2304): 61*437bfbebSnyanmisaka * nCtuX*nCtuY*8*8/2 62*437bfbebSnyanmisaka * MaxnCtuX = 4096/64 63*437bfbebSnyanmisaka * MaxnCtuY = 2304/64 64*437bfbebSnyanmisaka * for support 8k resolusion, segmap_size(8k) = segmap_size(4k) * 4 65*437bfbebSnyanmisaka */ 66*437bfbebSnyanmisaka #define MAX_SEGMAP_SIZE (73728 * 4) 67*437bfbebSnyanmisaka 68*437bfbebSnyanmisaka #define VP9_DUMP 0 69*437bfbebSnyanmisaka 70*437bfbebSnyanmisaka //!< memory malloc check 71*437bfbebSnyanmisaka #define MEM_CHECK(ret, val, ...)\ 72*437bfbebSnyanmisaka do{\ 73*437bfbebSnyanmisaka if (!(val)) {\ 74*437bfbebSnyanmisaka ret = MPP_ERR_MALLOC; \ 75*437bfbebSnyanmisaka mpp_err("malloc buffer error(%d).\n", __LINE__); \ 76*437bfbebSnyanmisaka mpp_assert(0); goto __FAILED; \ 77*437bfbebSnyanmisaka }} while (0) 78*437bfbebSnyanmisaka 79*437bfbebSnyanmisaka 80*437bfbebSnyanmisaka extern const vp9_prob vp9_kf_y_mode_prob[INTRA_MODES][INTRA_MODES][INTRA_MODES - 1]; 81*437bfbebSnyanmisaka extern const vp9_prob vp9_kf_uv_mode_prob[INTRA_MODES][INTRA_MODES - 1]; 82*437bfbebSnyanmisaka extern const vp9_prob vp9_kf_partition_probs[PARTITION_CONTEXTS][PARTITION_TYPES - 1]; 83*437bfbebSnyanmisaka 84*437bfbebSnyanmisaka #ifdef __cplusplus 85*437bfbebSnyanmisaka extern "C" { 86*437bfbebSnyanmisaka #endif 87*437bfbebSnyanmisaka 88*437bfbebSnyanmisaka RK_U32 vp9_ver_align(RK_U32 val); 89*437bfbebSnyanmisaka RK_U32 vp9_hor_align(RK_U32 val); 90*437bfbebSnyanmisaka 91*437bfbebSnyanmisaka MPP_RET hal_vp9d_output_probe(void *buf, void *dxva); 92*437bfbebSnyanmisaka MPP_RET hal_vp9d_prob_flag_delta(void *buf, void *dxva); 93*437bfbebSnyanmisaka void hal_vp9d_update_counts(void *buf, void *dxva); 94*437bfbebSnyanmisaka MPP_RET hal_vp9d_prob_default(void *buf, void *dxva); 95*437bfbebSnyanmisaka MPP_RET hal_vp9d_prob_kf(void *buf); 96*437bfbebSnyanmisaka 97*437bfbebSnyanmisaka #ifdef __cplusplus 98*437bfbebSnyanmisaka } 99*437bfbebSnyanmisaka #endif 100*437bfbebSnyanmisaka 101*437bfbebSnyanmisaka #endif 102