xref: /rockchip-linux_mpp/mpp/hal/rkdec/avsd/hal_avsd_base.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2015 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_AVSD_BASE_H__
18*437bfbebSnyanmisaka #define __HAL_AVSD_BASE_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "parser_api.h"
21*437bfbebSnyanmisaka #include "hal_avsd_api.h"
22*437bfbebSnyanmisaka #include "avsd_syntax.h"
23*437bfbebSnyanmisaka 
24*437bfbebSnyanmisaka #include "mpp_device.h"
25*437bfbebSnyanmisaka 
26*437bfbebSnyanmisaka #define AVSD_HAL_DBG_ERROR             (0x00000001)
27*437bfbebSnyanmisaka #define AVSD_HAL_DBG_ASSERT            (0x00000002)
28*437bfbebSnyanmisaka #define AVSD_HAL_DBG_WARNNING          (0x00000004)
29*437bfbebSnyanmisaka #define AVSD_HAL_DBG_TRACE             (0x00000008)
30*437bfbebSnyanmisaka 
31*437bfbebSnyanmisaka #define AVSD_HAL_DBG_OFFSET            (0x00000010)
32*437bfbebSnyanmisaka #define AVSD_HAL_DBG_WAIT              (0x00000020)
33*437bfbebSnyanmisaka 
34*437bfbebSnyanmisaka #define AVSD_DBG_HARD_MODE             (0x00010000)
35*437bfbebSnyanmisaka #define AVSD_DBG_PROFILE_ID            (0x00020000)
36*437bfbebSnyanmisaka 
37*437bfbebSnyanmisaka extern RK_U32 avsd_hal_debug;
38*437bfbebSnyanmisaka 
39*437bfbebSnyanmisaka #define AVSD_HAL_DBG(level, fmt, ...)\
40*437bfbebSnyanmisaka do {\
41*437bfbebSnyanmisaka     if (level & avsd_hal_debug)\
42*437bfbebSnyanmisaka     { mpp_log(fmt, ## __VA_ARGS__); }\
43*437bfbebSnyanmisaka } while (0)
44*437bfbebSnyanmisaka 
45*437bfbebSnyanmisaka #define AVSD_HAL_TRACE(fmt, ...)\
46*437bfbebSnyanmisaka do {\
47*437bfbebSnyanmisaka     if (AVSD_HAL_DBG_TRACE & avsd_hal_debug)\
48*437bfbebSnyanmisaka     { mpp_log_f(fmt, ## __VA_ARGS__); }\
49*437bfbebSnyanmisaka } while (0)
50*437bfbebSnyanmisaka 
51*437bfbebSnyanmisaka 
52*437bfbebSnyanmisaka #define INP_CHECK(ret, val, ...)\
53*437bfbebSnyanmisaka do{\
54*437bfbebSnyanmisaka     if ((val)) {    \
55*437bfbebSnyanmisaka         ret = MPP_ERR_INIT; \
56*437bfbebSnyanmisaka         AVSD_HAL_DBG(AVSD_HAL_DBG_WARNNING, "input empty(%d).\n", __LINE__); \
57*437bfbebSnyanmisaka         goto __RETURN; \
58*437bfbebSnyanmisaka     }\
59*437bfbebSnyanmisaka } while (0)
60*437bfbebSnyanmisaka 
61*437bfbebSnyanmisaka 
62*437bfbebSnyanmisaka #define FUN_CHECK(val)\
63*437bfbebSnyanmisaka do{\
64*437bfbebSnyanmisaka     if ((val) < 0) {\
65*437bfbebSnyanmisaka         AVSD_HAL_DBG(AVSD_HAL_DBG_WARNNING, "Function error(%d).\n", __LINE__); \
66*437bfbebSnyanmisaka         goto __FAILED; \
67*437bfbebSnyanmisaka     }\
68*437bfbebSnyanmisaka } while (0)
69*437bfbebSnyanmisaka 
70*437bfbebSnyanmisaka 
71*437bfbebSnyanmisaka //!< memory malloc check
72*437bfbebSnyanmisaka #define MEM_CHECK(ret, val, ...)\
73*437bfbebSnyanmisaka do{\
74*437bfbebSnyanmisaka     if (!(val)) {\
75*437bfbebSnyanmisaka         ret = MPP_ERR_MALLOC; \
76*437bfbebSnyanmisaka         mpp_err_f("malloc buffer error(%d).\n", __LINE__); \
77*437bfbebSnyanmisaka         goto __FAILED; \
78*437bfbebSnyanmisaka     }\
79*437bfbebSnyanmisaka } while (0)
80*437bfbebSnyanmisaka 
81*437bfbebSnyanmisaka 
82*437bfbebSnyanmisaka #define FIELDPICTURE    0
83*437bfbebSnyanmisaka #define FRAMEPICTURE    1
84*437bfbebSnyanmisaka 
85*437bfbebSnyanmisaka enum {
86*437bfbebSnyanmisaka     IFRAME = 0,
87*437bfbebSnyanmisaka     PFRAME = 1,
88*437bfbebSnyanmisaka     BFRAME = 2
89*437bfbebSnyanmisaka };
90*437bfbebSnyanmisaka 
91*437bfbebSnyanmisaka typedef struct avsd_hal_picture_t {
92*437bfbebSnyanmisaka     RK_U32 valid;
93*437bfbebSnyanmisaka     RK_U32 pic_type;
94*437bfbebSnyanmisaka     RK_U32 pic_code_type;
95*437bfbebSnyanmisaka     RK_U32 picture_distance;
96*437bfbebSnyanmisaka 
97*437bfbebSnyanmisaka     RK_S32 slot_idx;
98*437bfbebSnyanmisaka } AvsdHalPic_t;
99*437bfbebSnyanmisaka 
100*437bfbebSnyanmisaka 
101*437bfbebSnyanmisaka typedef struct avsd_hal_ctx_t {
102*437bfbebSnyanmisaka     MppHalApi                hal_api;
103*437bfbebSnyanmisaka     MppBufSlots              frame_slots;
104*437bfbebSnyanmisaka     MppBufSlots              packet_slots;
105*437bfbebSnyanmisaka     MppBufferGroup           buf_group;
106*437bfbebSnyanmisaka 
107*437bfbebSnyanmisaka     MppCodingType            coding;
108*437bfbebSnyanmisaka     MppCbCtx                 *dec_cb;
109*437bfbebSnyanmisaka     MppDev                   dev;
110*437bfbebSnyanmisaka     MppDecCfgSet             *dec_cfg;
111*437bfbebSnyanmisaka 
112*437bfbebSnyanmisaka     AvsdSyntax_t             syn;
113*437bfbebSnyanmisaka     RK_U32                   *p_regs;
114*437bfbebSnyanmisaka     RK_U32                   regs_num;
115*437bfbebSnyanmisaka     MppBuffer                mv_buf;
116*437bfbebSnyanmisaka     MppHalCfg                *cfg;
117*437bfbebSnyanmisaka 
118*437bfbebSnyanmisaka     AvsdHalPic_t             pic[3];
119*437bfbebSnyanmisaka     //!< add for control
120*437bfbebSnyanmisaka     RK_U32                   first_field;
121*437bfbebSnyanmisaka     RK_U32                   prev_pic_structure;
122*437bfbebSnyanmisaka     RK_U32                   prev_pic_code_type;
123*437bfbebSnyanmisaka     RK_S32                   future2prev_past_dist;
124*437bfbebSnyanmisaka     RK_S32                   work0;
125*437bfbebSnyanmisaka     RK_S32                   work1;
126*437bfbebSnyanmisaka     RK_S32                   work_out;
127*437bfbebSnyanmisaka     RK_U32                   data_offset;
128*437bfbebSnyanmisaka 
129*437bfbebSnyanmisaka     RK_U32                   frame_no;
130*437bfbebSnyanmisaka } AvsdHalCtx_t;
131*437bfbebSnyanmisaka 
132*437bfbebSnyanmisaka 
133*437bfbebSnyanmisaka #ifdef __cplusplus
134*437bfbebSnyanmisaka extern "C" {
135*437bfbebSnyanmisaka #endif
136*437bfbebSnyanmisaka 
137*437bfbebSnyanmisaka RK_U32 avsd_ver_align(RK_U32 val);
138*437bfbebSnyanmisaka RK_U32 avsd_hor_align(RK_U32 val);
139*437bfbebSnyanmisaka RK_U32 avsd_len_align(RK_U32 val);
140*437bfbebSnyanmisaka RK_S32 get_queue_pic(AvsdHalCtx_t *p_hal);
141*437bfbebSnyanmisaka RK_S32 get_packet_fd(AvsdHalCtx_t *p_hal, RK_S32 idx);
142*437bfbebSnyanmisaka RK_S32 get_frame_fd(AvsdHalCtx_t *p_hal, RK_S32 idx);
143*437bfbebSnyanmisaka 
144*437bfbebSnyanmisaka #ifdef __cplusplus
145*437bfbebSnyanmisaka }
146*437bfbebSnyanmisaka #endif
147*437bfbebSnyanmisaka 
148*437bfbebSnyanmisaka #endif /*__HAL_AVSD_COMMON_H__*/
149