xref: /rockchip-linux_mpp/mpp/hal/rkdec/vp9d/hal_vp9d_com.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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