archived-mpp/mpp/hal/vpu/av1d/hal_av1d_common.h
Herman Chen 2b35cee0ce [mpp_log]: Add more log helper function
1. Move mpp_log.h to inc for external user.
2. Add mpp_debug.h for mpp internal logging.
3. Fix some warning.
4. Add log level setup function.
5. Check env log_level value in mpp_get_log_level call.

NOTE:
1. mpp internal module should use mpp_debug.h and mpp external user
should use mpp_log.h
2. Use mpp_get_log_level to update mpp_log_level when the env changed.

Change-Id: I90a55a02a72db177533013280dfe111ca3479229
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2022-05-20 11:42:10 +08:00

194 lines
4.9 KiB
C

/*
* Copyright 2020 Rockchip Electronics Co. LTD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __HAL_AV1D_GLOBAL_H__
#define __HAL_AV1D_GLOBAL_H__
#include "mpp_hal.h"
#include "mpp_debug.h"
#include "mpp_device.h"
#include "hal_bufs.h"
#include "dxva_syntax.h"
#define AV1D_DBG_ERROR (0x00000001)
#define AV1D_DBG_ASSERT (0x00000002)
#define AV1D_DBG_WARNNING (0x00000004)
#define AV1D_DBG_LOG (0x00000008)
#define AV1D_DBG_HARD_MODE (0x00000010)
extern RK_U32 hal_av1d_debug;
#define AV1D_DBG(level, fmt, ...)\
do {\
if (level & hal_av1d_debug)\
{ mpp_log(fmt, ## __VA_ARGS__); }\
} while (0)
#define AV1D_ERR(fmt, ...)\
do {\
if (AV1D_DBG_ERROR & hal_av1d_debug)\
{ mpp_log(fmt, ## __VA_ARGS__); }\
} while (0)
#define ASSERT(val)\
do {\
if (AV1D_DBG_ASSERT & hal_av1d_debug)\
{ mpp_assert(val); }\
} while (0)
#define AV1D_WARNNING(fmt, ...)\
do {\
if (AV1D_DBG_WARNNING & hal_av1d_debug)\
{ mpp_log(fmt, ## __VA_ARGS__); }\
} while (0)
#define AV1D_LOG(fmt, ...)\
do {\
if (AV1D_DBG_LOG & hal_av1d_debug)\
{ mpp_log(fmt, ## __VA_ARGS__); }\
} while (0)
//!< vaule check
#define VAL_CHECK(ret, val, ...)\
do{\
if (!(val)){\
ret = MPP_ERR_VALUE; \
AV1D_WARNNING("value error(%d).\n", __LINE__); \
goto __FAILED; \
}} while (0)
//!< memory malloc check
#define MEM_CHECK(ret, val, ...)\
do{\
if (!(val)) {\
ret = MPP_ERR_MALLOC; \
AV1D_ERR("malloc buffer error(%d).\n", __LINE__); \
ASSERT(0); goto __FAILED; \
}} while (0)
#define BUF_CHECK(ret, val, ...)\
do{\
if (val) {\
ret = MPP_ERR_BUFFER_FULL; \
AV1D_ERR("buffer get error(%d).\n", __LINE__); \
ASSERT(0); goto __FAILED; \
}} while (0)
#define BUF_PUT(val, ...)\
do{\
if (val) {\
if (mpp_buffer_put(val)) {\
AV1D_ERR("buffer put error(%d).\n", __LINE__); \
ASSERT(0); \
}\
}} while (0)
//!< input check
#define INP_CHECK(ret, val, ...)\
do{\
if ((val)) {\
ret = MPP_ERR_INIT; \
AV1D_WARNNING("input empty(%d).\n", __LINE__); \
goto __RETURN; \
}} while (0)
//!< function return check
#define FUN_CHECK(val)\
do{\
if ((val) < 0) {\
AV1D_WARNNING("Function error(%d).\n", __LINE__); \
goto __FAILED; \
}} while (0)
#define MAX_MB_SEGMENTS 8
enum Av1SegLevelFeatures {
SEG_AV1_LVL_ALT_Q, // Use alternate Quantizer ....
SEG_AV1_LVL_ALT_LF_Y_V, // Use alternate loop filter value on y plane
// vertical
SEG_AV1_LVL_ALT_LF_Y_H, // Use alternate loop filter value on y plane
// horizontal
SEG_AV1_LVL_ALT_LF_U, // Use alternate loop filter value on u plane
SEG_AV1_LVL_ALT_LF_V, // Use alternate loop filter value on v plane
SEG_AV1_LVL_REF_FRAME, // Optional Segment reference frame
SEG_AV1_LVL_SKIP, // Optional Segment (0,0) + skip mode
SEG_AV1_LVL_GLOBALMV,
SEG_AV1_LVL_MAX
};
#define AV1_ACTIVE_REFS 3
#define AV1_ACTIVE_REFS_EX 7
#define AV1_REF_LIST_SIZE 8
#define AV1_REF_SCALE_SHIFT 14
enum MvReferenceFrame {
NONE = -1,
INTRA_FRAME = 0,
LAST_FRAME = 1,
LAST2_FRAME_EX = 2,
LAST3_FRAME_EX = 3,
GOLDEN_FRAME_EX = 4,
BWDREF_FRAME_EX = 5,
ALTREF2_FRAME_EX = 6,
ALTREF_FRAME_EX = 7,
MAX_REF_FRAMES_EX = 8,
GOLDEN_FRAME = 2,
ALTREF_FRAME = 3,
MAX_REF_FRAMES = 4
};
enum {
AV1_FRAME_KEY = 0,
AV1_FRAME_INTER = 1,
AV1_FRAME_INTRA_ONLY = 2,
AV1_FRAME_SWITCH = 3,
};
#define AV1DEC_MAX_PIC_BUFFERS 24
#define AV1DEC_DYNAMIC_PIC_LIMIT 10
#define ALLOWED_REFS_PER_FRAME_EX 7
typedef struct FilmGrainMemory_t {
RK_U8 scaling_lut_y[256];
RK_U8 scaling_lut_cb[256];
RK_U8 scaling_lut_cr[256];
RK_S16 cropped_luma_grain_block[4096];
RK_S16 cropped_chroma_grain_block[1024 * 2];
} FilmGrainMemory;
typedef struct av1d_hal_ctx_t {
const MppHalApi *api;
RK_U8 *bitstream;
RK_U32 strm_len;
HalDecTask *in_task;
MppBufSlots slots;
MppBufSlots packet_slots;
MppDecCfgSet *cfg;
MppBufferGroup buf_group;
MppCbCtx *dec_cb;
MppDev dev;
void *reg_ctx;
RK_U32 fast_mode;
} Av1dHalCtx;
#endif /*__HAL_AV1D_GLOBAL_H__*/