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