Files

940 lines
30 KiB
C
Raw Permalink Normal View History

2026-08-13 11:28:40 +08:00
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*
* This source code is subject to the terms and conditions defined in below
* which is part of this source code package.
*
* Description:
*/
// Copyright (C) 2019 Amlogic, Inc. All rights reserved.
//
// All information contained herein is Amlogic confidential.
//
// This software is provided to you pursuant to Software License
// Agreement (SLA) with Amlogic Inc ("Amlogic"). This software may be
// used only in accordance with the terms of this agreement.
//
// Redistribution and use in source and binary forms, with or without
// modification is strictly prohibited without prior written permission
// from Amlogic.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef VPUAPI_UTIL_H_INCLUDED
#define VPUAPI_UTIL_H_INCLUDED
#include "vpuapi.h"
// COD_STD
enum {
AVC_DEC = 0,
VC1_DEC = 1,
MP2_DEC = 2,
MP4_DEC = 3,
DV3_DEC = 3,
RV_DEC = 4,
AVS_DEC = 5,
VPX_DEC = 7,
MAX_DEC = 7,
AVC_ENC = 8,
MP4_ENC = 11,
MAX_CODECS,
};
// new COD_STD since VPU series
enum {
W_HEVC_DEC = 0x00,
W_HEVC_ENC = 0x01,
W_AVC_DEC = 0x02,
W_AVC_ENC = 0x03,
W_VP9_DEC = 0x16,
W_AVS2_DEC = 0x18,
W_SVAC_DEC = 0x20,
W_SVAC_ENC = 0x21,
STD_UNKNOWN = 0xFF
};
// AUX_COD_STD
enum {
MP4_AUX_MPEG4 = 0,
MP4_AUX_DIVX3 = 1
};
enum {
VPX_AUX_THO = 0,
VPX_AUX_VP6 = 1,
VPX_AUX_VP8 = 2,
VPX_AUX_NUM
};
enum {
AVC_AUX_AVC = 0,
AVC_AUX_MVC = 1
};
// BIT_RUN command
enum {
DEC_SEQ_INIT = 1,
ENC_SEQ_INIT = 1,
DEC_SEQ_END = 2,
ENC_SEQ_END = 2,
PIC_RUN = 3,
SET_FRAME_BUF = 4,
ENCODE_HEADER = 5,
ENC_PARA_SET = 6,
DEC_PARA_SET = 7,
DEC_BUF_FLUSH = 8,
RC_CHANGE_PARAMETER = 9,
VPU_SLEEP = 10,
VPU_WAKE = 11,
ENC_ROI_INIT = 12,
FIRMWARE_GET = 0xf
};
enum {
SRC_BUFFER_EMPTY = 0, //!< source buffer doesn't allocated.
SRC_BUFFER_ALLOCATED = 1, //!< source buffer has been allocated.
SRC_BUFFER_SRC_LOADED = 2, //!< source buffer has been allocated.
SRC_BUFFER_USE_ENCODE = 3 //!< source buffer was sent to VPU. but it was not used for encoding.
};
typedef enum {
AUX_BUF_TYPE_MVCOL,
AUX_BUF_TYPE_FBC_Y_OFFSET,
AUX_BUF_TYPE_FBC_C_OFFSET
} AUX_BUF_TYPE;
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef MIN
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#endif
#define HEVC_MAX_SUB_LAYER_ID 6
#define AVS2_MAX_SUB_LAYER_ID 7
#define SVAC_MAX_SUB_LAYER_ID 3
#define DECODE_ALL_TEMPORAL_LAYERS -1
//#define API_DEBUG
#ifdef API_DEBUG
#ifdef _MSC_VER
#define APIDPRINT(_fmt, ...) printf(_fmt, __VA_ARGS__)
#else
#define APIDPRINT(_fmt, ...) printf(_fmt, ##__VA_ARGS__)
#endif
#else
#define APIDPRINT(_fmt, ...)
#endif
extern Uint32 __VPU_BUSY_TIMEOUT;
/**
* PRODUCT: old
*/
typedef struct {
union {
struct {
int useBitEnable;
int useIpEnable;
int useDbkYEnable;
int useDbkCEnable;
int useOvlEnable;
int useBtpEnable;
PhysicalAddress bufBitUse;
PhysicalAddress bufIpAcDcUse;
PhysicalAddress bufDbkYUse;
PhysicalAddress bufDbkCUse;
PhysicalAddress bufOvlUse;
PhysicalAddress bufBtpUse;
} old;
struct {
int useIpEnable;
int useLfRowEnable;
int useBitEnable;
PhysicalAddress bufIp;
PhysicalAddress bufLfRow;
PhysicalAddress bufBit;
int useEncImdEnable;
int useEncRdoEnable;
int useEncLfEnable;
PhysicalAddress bufImd;
PhysicalAddress bufRdo;
PhysicalAddress bufLf;
} vp;
} u;
int bufSize;
PhysicalAddress bufBase;
} SecAxiInfo;
typedef struct {
DecOpenParam openParam;
DecInitialInfo initialInfo;
DecInitialInfo newSeqInfo; /* Temporal new sequence information */
PhysicalAddress streamWrPtr;
PhysicalAddress streamRdPtr;
Int32 streamBufFull;
int streamEndflag;
int frameDisplayFlag;
int clearDisplayIndexes;
int setDisplayIndexes;
PhysicalAddress streamRdPtrRegAddr;
PhysicalAddress streamWrPtrRegAddr;
PhysicalAddress streamBufStartAddr;
PhysicalAddress streamBufEndAddr;
PhysicalAddress frameDisplayFlagRegAddr;
PhysicalAddress currentPC;
PhysicalAddress busyFlagAddr;
int streamBufSize;
FrameBuffer frameBufPool[MAX_REG_FRAME];
vpu_buffer_t vbFrame;
vpu_buffer_t vbWTL;
vpu_buffer_t vbPPU;
vpu_buffer_t vbMV[MAX_REG_FRAME];
vpu_buffer_t vbFbcYTbl[MAX_REG_FRAME];
vpu_buffer_t vbFbcCTbl[MAX_REG_FRAME];
int chBwbFrameIdx;
int chFbcFrameIdx;
BOOL interResChange;
int frameAllocExt;
int ppuAllocExt;
int numFrameBuffers;
int numFbsForDecoding; /*!<< number of framebuffers used in decoding */
int numFbsForWTL; /*!<< number of linear framebuffer for displaying when DecInfo::wtlEnable is set to 1 */
int stride;
int frameBufferHeight;
int rotationEnable;
int mirrorEnable;
int deringEnable;
MirrorDirection mirrorDirection;
int rotationAngle;
FrameBuffer rotatorOutput;
int rotatorStride;
int rotatorOutputValid;
int initialInfoObtained;
int vc1BframeDisplayValid;
int mapType;
int tiled2LinearEnable;
int tiled2LinearMode;
int wtlEnable;
int wtlMode;
FrameBufferFormat wtlFormat; /*!<< default value: FORMAT_420 8bit */
SecAxiInfo secAxiInfo;
MaverickCacheConfig cacheConfig;
int chunkSize;
int seqInitEscape;
// Report Information
PhysicalAddress userDataBufAddr;
vpu_buffer_t vbUserData;
Uint32 userDataEnable; /* User Data Enable Flag
Non VP TRUE or FALSE
VPUxxx: Refer to H265_USERDATA_FLAG_xxx values in vpuapi.h */
int userDataBufSize;
int userDataReportMode; // User Data report mode (0 : interrupt mode, 1 interrupt disable mode)
LowDelayInfo lowDelayInfo;
int frameStartPos;
int frameEndPos;
int frameDelay;
vpu_buffer_t vbSlice; // AVC, VP8 only
vpu_buffer_t vbWork;
vpu_buffer_t vbTemp;
vpu_buffer_t vbReport;
vpu_buffer_t vbTask;
int workBufferAllocExt;
DecOutputInfo decOutInfo[MAX_GDI_IDX];
TiledMapConfig mapCfg;
int reorderEnable;
Uint32 avcErrorConcealMode;
DRAMConfig dramCfg; //960 only
int thumbnailMode;
int seqChangeMask; // VPU410
Uint32 prevFrameEndPos; //!<< VPU410v2: end position of previous frame
Int32 tempIdSelectMode;
Int32 targetSubLayerId; //!<< temporal scalability
Int32 relTargetLayerId;
int rdPtrValidFlag;
Int32 instanceQueueCount;
Int32 reportQueueCount;
Uint32 firstCycleCheck;
Uint32 cyclePerTick;
Uint32 productCode;
Uint32 vlcBufSize;
Uint32 paramBufSize;
} DecInfo;
typedef struct {
EncOpenParam openParam;
EncInitialInfo initialInfo;
PhysicalAddress streamRdPtr;
PhysicalAddress streamWrPtr;
int streamEndflag;
PhysicalAddress streamRdPtrRegAddr;
PhysicalAddress streamWrPtrRegAddr;
PhysicalAddress streamBufStartAddr;
PhysicalAddress streamBufEndAddr;
PhysicalAddress currentPC;
PhysicalAddress busyFlagAddr;
int streamBufSize;
int linear2TiledEnable;
int linear2TiledMode; // Non VP only
TiledMapType mapType;
int userMapEnable;
FrameBuffer frameBufPool[MAX_REG_FRAME];
vpu_buffer_t vbFrame;
vpu_buffer_t vbPPU;
int frameAllocExt;
int ppuAllocExt;
vpu_buffer_t vbSubSampFrame; /*!<< 960 only */
vpu_buffer_t vbMvcSubSampFrame; /*!<< 960 only */
int numFrameBuffers;
int stride;
int frameBufferHeight;
int rotationEnable;
int mirrorEnable;
MirrorDirection mirrorDirection;
int rotationAngle;
int initialInfoObtained;
int ringBufferEnable;
SecAxiInfo secAxiInfo;
MaverickCacheConfig cacheConfig;
int sliceIntEnable; /*!<< VPU420 only */
int ActivePPSIdx; /*!<< 980 */
int frameIdx; /*!<< 980 */
int fieldDone; /*!<< 980 */
int lineBufIntEn;
vpu_buffer_t vbWork;
vpu_buffer_t vbScratch;
vpu_buffer_t vbTemp; //!< Temp buffer (VPU encoder )
vpu_buffer_t vbMV; //!< colMV buffer (VPU encoder)
vpu_buffer_t vbMVBL; //!< colMV buffer (VPU encoder)
vpu_buffer_t vbFbcYTbl; //!< FBC Luma table buffer (VPU encoder)
vpu_buffer_t vbFbcCTbl; //!< FBC Chroma table buffer (VPU encoder)
vpu_buffer_t vbFbcYTblBL; //!< FBC Luma table buffer (VPU encoder)
vpu_buffer_t vbFbcCTblBL; //!< FBC Chroma table buffer (VPU encoder)
vpu_buffer_t vbSubSamBuf; //!< Sub-sampled buffer for ME (VPU encoder)
vpu_buffer_t vbSubSamBufBL; //!< Sub-sampled buffer for ME (VPU encoder)
vpu_buffer_t vbTask;
TiledMapConfig mapCfg;
DRAMConfig dramCfg; /*!<< 960 */
Int32 errorReasonCode;
Uint64 curPTS; /**! Current timestamp in 90KHz */
Uint64 ptsMap[MAX_SRC_FRAME]; /**! PTS mapped with source frame index */
FrameBuffer srcBufMap[MAX_SRC_FRAME]; /**! source frame index map */
Uint32 srcBufUseIndex[MAX_SRC_FRAME]; /**! flag the occupied src buf */
Uint32 instanceQueueCount;
Uint32 reportQueueCount;
Uint32 encWrPtrSel;
Uint32 firstCycleCheck;
Uint32 cyclePerTick;
Uint32 productCode;
Uint32 vlcBufSize;
Uint32 paramBufSize;
Int32 ringBufferWrapEnable;
PhysicalAddress streamBufTobeReadStartAddr;
PhysicalAddress streamBufTobeReadEndAddr;
Int32 streamBufTobeReadSize;
} EncInfo;
typedef struct CodecInst {
Int32 inUse;
Int32 instIndex;
Int32 coreIdx;
Int32 codecMode;
Int32 codecModeAux;
Int32 productId;
Int32 loggingEnable;
Uint32 isDecoder;
union {
EncInfo encInfo;
DecInfo decInfo;
}* CodecInfo;
} CodecInst;
/*******************************************************************************
* H.265 USER DATA(VUI and SEI) *
*******************************************************************************/
#define H265_MAX_DPB_SIZE 17
#define H265_MAX_NUM_SUB_LAYER 8
#define H265_MAX_NUM_ST_RPS 64
#define H265_MAX_CPB_CNT 32
#define H265_MAX_NUM_VERTICAL_FILTERS 5
#define H265_MAX_NUM_HORIZONTAL_FILTERS 3
#define H265_MAX_TAP_LENGTH 32
#define H265_MAX_NUM_KNEE_POINT 999
#define H265_MAX_NUM_TONE_VALUE 1024
#define H265_MAX_NUM_FILM_GRAIN_COMPONENT 3
#define H265_MAX_NUM_INTENSITY_INTERVALS 256
#define H265_MAX_NUM_MODEL_VALUES 5
#define H265_MAX_LUT_NUM_VAL 3
#define H265_MAX_LUT_NUM_VAL_MINUS1 33
#define H265_MAX_COLOUR_REMAP_COEFFS 3
typedef struct
{
Uint32 offset;
Uint32 size;
} user_data_entry_t;
typedef struct
{
Int16 left;
Int16 right;
Int16 top;
Int16 bottom;
} win_t;
typedef struct
{
Uint8 nal_hrd_param_present_flag;
Uint8 vcl_hrd_param_present_flag;
Uint8 sub_pic_hrd_params_present_flag;
Uint8 tick_divisor_minus2;
Int8 du_cpb_removal_delay_inc_length_minus1;
Int8 sub_pic_cpb_params_in_pic_timing_sei_flag;
Int8 dpb_output_delay_du_length_minus1;
Int8 bit_rate_scale;
Int8 cpb_size_scale;
Int8 initial_cpb_removal_delay_length_minus1;
Int8 cpb_removal_delay_length_minus1;
Int8 dpb_output_delay_length_minus1;
Uint8 fixed_pic_rate_gen_flag[H265_MAX_NUM_SUB_LAYER];
Uint8 fixed_pic_rate_within_cvs_flag[H265_MAX_NUM_SUB_LAYER];
Uint8 low_delay_hrd_flag[H265_MAX_NUM_SUB_LAYER];
Int8 cpb_cnt_minus1[H265_MAX_NUM_SUB_LAYER];
Int16 elemental_duration_in_tc_minus1[H265_MAX_NUM_SUB_LAYER];
Uint32 nal_bit_rate_value_minus1[H265_MAX_NUM_SUB_LAYER][H265_MAX_CPB_CNT];
Uint32 nal_cpb_size_value_minus1[H265_MAX_NUM_SUB_LAYER][H265_MAX_CPB_CNT];
Uint32 nal_cpb_size_du_value_minus1[H265_MAX_NUM_SUB_LAYER];
Uint32 nal_bit_rate_du_value_minus1[H265_MAX_NUM_SUB_LAYER];
Uint8 nal_cbr_flag[H265_MAX_NUM_SUB_LAYER][H265_MAX_CPB_CNT];
Uint32 vcl_bit_rate_value_minus1[H265_MAX_NUM_SUB_LAYER][H265_MAX_CPB_CNT];
Uint32 vcl_cpb_size_value_minus1[H265_MAX_NUM_SUB_LAYER][H265_MAX_CPB_CNT];
Uint32 vcl_cpb_size_du_value_minus1[H265_MAX_NUM_SUB_LAYER];
Uint32 vcl_bit_rate_du_value_minus1[H265_MAX_NUM_SUB_LAYER];
Uint8 vcl_cbr_flag[H265_MAX_NUM_SUB_LAYER][H265_MAX_CPB_CNT];
} h265_hrd_param_t;
typedef struct
{
Uint8 aspect_ratio_info_present_flag;
Uint8 aspect_ratio_idc;
Uint8 overscan_info_present_flag;
Uint8 overscan_appropriate_flag;
Uint8 video_signal_type_present_flag;
Int8 video_format;
Uint8 video_full_range_flag;
Uint8 colour_description_present_flag;
Uint16 sar_width;
Uint16 sar_height;
Uint8 colour_primaries;
Uint8 transfer_characteristics;
Uint8 matrix_coefficients;
Uint8 chroma_loc_info_present_flag;
Int8 chroma_sample_loc_type_top_field;
Int8 chroma_sample_loc_type_bottom_field;
Uint8 neutral_chroma_indication_flag;
Uint8 field_seq_flag;
Uint8 frame_field_info_present_flag;
Uint8 default_display_window_flag;
Uint8 vui_timing_info_present_flag;
Uint8 vui_poc_proportional_to_timing_flag;
Uint32 vui_num_units_in_tick;
Uint32 vui_time_scale;
Uint8 vui_hrd_parameters_present_flag;
Uint8 bitstream_restriction_flag;
Uint8 tiles_fixed_structure_flag;
Uint8 motion_vectors_over_pic_boundaries_flag;
Uint8 restricted_ref_pic_lists_flag;
Int8 min_spatial_segmentation_idc;
Int8 max_bytes_per_pic_denom;
Int8 max_bits_per_mincu_denom;
Int16 vui_num_ticks_poc_diff_one_minus1;
Int8 log2_max_mv_length_horizontal;
Int8 log2_max_mv_length_vertical;
win_t def_disp_win;
h265_hrd_param_t hrd_param;
} h265_vui_param_t;
typedef struct
{
Uint32 display_primaries_x[3];
Uint32 display_primaries_y[3];
Uint32 white_point_x : 16;
Uint32 white_point_y : 16;
Uint32 max_display_mastering_luminance : 32;
Uint32 min_display_mastering_luminance : 32;
} h265_mastering_display_colour_volume_t;
typedef struct
{
Uint32 ver_chroma_filter_idc : 8;
Uint32 hor_chroma_filter_idc : 8;
Uint32 ver_filtering_field_processing_flag : 1;
Uint32 target_format_idc : 2;
Uint32 num_vertical_filters : 3;
Uint32 num_horizontal_filters : 3;
Uint8 ver_tap_length_minus1[ H265_MAX_NUM_VERTICAL_FILTERS ];
Uint8 hor_tap_length_minus1[ H265_MAX_NUM_HORIZONTAL_FILTERS ];
Int32 ver_filter_coeff[ H265_MAX_NUM_VERTICAL_FILTERS ][ H265_MAX_TAP_LENGTH ];
Int32 hor_filter_coeff[ H265_MAX_NUM_HORIZONTAL_FILTERS ][ H265_MAX_TAP_LENGTH ];
} h265_chroma_resampling_filter_hint_t;
typedef struct
{
Uint32 knee_function_id;
Uint8 knee_function_cancel_flag;
Uint8 knee_function_persistence_flag;
Uint32 input_disp_luminance;
Uint32 input_d_range;
Uint32 output_d_range;
Uint32 output_disp_luminance;
Uint16 num_knee_points_minus1;
Uint16 input_knee_point[ H265_MAX_NUM_KNEE_POINT ];
Uint16 output_knee_point[ H265_MAX_NUM_KNEE_POINT ];
} h265_knee_function_info_t;
typedef struct
{
Uint16 max_content_light_level;
Uint16 max_pic_average_light_level;
} h265_content_light_level_info_t;
typedef struct
{
Uint32 colour_remap_id;
Uint8 colour_remap_cancel_flag;
Uint8 colour_remap_persistence_flag;
Uint8 colour_remap_video_signal_info_present_flag;
Uint8 colour_remap_full_range_flag;
Uint8 colour_remap_primaries;
Uint8 colour_remap_transfer_function;
Uint8 colour_remap_matrix_coefficients;
Uint8 colour_remap_input_bit_depth;
Uint8 colour_remap_bit_depth;
Uint8 pre_lut_num_val_minus1[H265_MAX_LUT_NUM_VAL];
Uint16 pre_lut_coded_value[H265_MAX_LUT_NUM_VAL][H265_MAX_LUT_NUM_VAL_MINUS1];
Uint16 pre_lut_target_value[H265_MAX_LUT_NUM_VAL][H265_MAX_LUT_NUM_VAL_MINUS1];
Uint8 colour_remap_matrix_present_flag;
Uint8 log2_matrix_denom;
Uint8 colour_remap_coeffs[H265_MAX_COLOUR_REMAP_COEFFS][H265_MAX_COLOUR_REMAP_COEFFS];
Uint8 post_lut_num_val_minus1[H265_MAX_LUT_NUM_VAL];
Uint16 post_lut_coded_value[H265_MAX_LUT_NUM_VAL][H265_MAX_LUT_NUM_VAL_MINUS1];
Uint16 post_lut_target_value[H265_MAX_LUT_NUM_VAL][H265_MAX_LUT_NUM_VAL_MINUS1];
} h265_colour_remapping_info_t;
typedef struct
{
Uint8 film_grain_characteristics_cancel_flag;
Uint8 film_grain_model_id;
Uint8 separate_colour_description_present_flag;
Uint8 film_grain_bit_depth_luma_minus8;
Uint8 film_grain_bit_depth_chroma_minus8;
Uint8 film_grain_full_range_flag;
Uint8 film_grain_colour_primaries;
Uint8 film_grain_transfer_characteristics;
Uint8 film_grain_matrix_coeffs;
Uint8 blending_mode_id;
Uint8 log2_scale_factor;
Uint8 comp_model_present_flag[H265_MAX_NUM_FILM_GRAIN_COMPONENT];
Uint8 num_intensity_intervals_minus1[H265_MAX_NUM_FILM_GRAIN_COMPONENT];
Uint8 num_model_values_minus1[H265_MAX_NUM_FILM_GRAIN_COMPONENT];
Uint8 intensity_interval_lower_bound[H265_MAX_NUM_FILM_GRAIN_COMPONENT][H265_MAX_NUM_INTENSITY_INTERVALS];
Uint8 intensity_interval_upper_bound[H265_MAX_NUM_FILM_GRAIN_COMPONENT][H265_MAX_NUM_INTENSITY_INTERVALS];
Uint32 comp_model_value[H265_MAX_NUM_FILM_GRAIN_COMPONENT][H265_MAX_NUM_INTENSITY_INTERVALS][H265_MAX_NUM_MODEL_VALUES];
Uint8 film_grain_characteristics_persistence_flag;
} h265_film_grain_characteristics_t;
typedef struct
{
Uint32 tone_map_id;
Uint8 tone_map_cancel_flag;
Uint8 tone_map_persistence_flag;
Uint32 coded_data_bit_depth;
Uint32 target_bit_depth;
Uint8 tone_map_model_id;
Uint32 min_value;
Uint32 max_value;
Uint32 sigmoid_midpoint;
Uint32 sigmoid_width;
Uint16 start_of_coded_interval[H265_MAX_NUM_TONE_VALUE]; // [1 << target_bit_depth] // 10bits
Uint16 num_pivots; // [(1 << coded_data_bit_depth)?1][(1 << target_bit_depth)-1] // 10bits
Uint16 coded_pivot_value[H265_MAX_NUM_TONE_VALUE];
Uint16 target_pivot_value[H265_MAX_NUM_TONE_VALUE];
Uint8 camera_iso_speed_idc;
Uint32 camera_iso_speed_value;
Uint8 exposure_index_idc;
Uint32 exposure_index_value;
Uint8 exposure_compensation_value_sign_flag;
Uint16 exposure_compensation_value_numerator;
Uint16 exposure_compensation_value_denom_idc;
Uint32 ref_screen_luminance_white;
Uint32 extended_range_white_level;
Uint16 nominal_black_level_code_value;
Uint16 nominal_white_level_code_value;
Uint16 extended_white_level_code_value;
} h265_tone_mapping_info_t;
typedef struct
{
Int8 status; // 0 : empty, 1 : occupied
Int8 pic_struct;
Int8 source_scan_type;
Int8 duplicate_flag;
} h265_sei_pic_timing_t;
/*******************************************************************************
* H.264 USER DATA(VUI and SEI) *
*******************************************************************************/
typedef struct
{
Int16 cpb_cnt;
Uint8 bit_rate_scale;
Uint8 cbp_size_scale;
Int16 initial_cpb_removal_delay_length;
Int16 cpb_removal_delay_length;
Int16 dpb_output_delay_length;
Int16 time_offset_length;
Uint32 bit_rate_value[32];
Uint32 cpb_size_value[32];
Uint8 cbr_flag[32];
} avc_hrd_param_t;
typedef struct
{
Uint8 aspect_ratio_info_present_flag;
Uint8 aspect_ratio_idc;
Uint16 sar_width;
Uint16 sar_height;
Uint8 overscan_info_present_flag;
Uint8 overscan_appropriate_flag;
Uint8 video_signal_type_present_flag;
Int8 video_format;
Uint8 video_full_range_flag;
Uint8 colour_description_present_flag;
Uint8 colour_primaries;
Uint8 transfer_characteristics;
Uint8 matrix_coefficients;
Uint8 chroma_loc_info_present_flag;
Int8 chroma_sample_loc_type_top_field;
Int8 chroma_sample_loc_type_bottom_field;
Uint8 vui_timing_info_present_flag;
Uint32 vui_num_units_in_tick;
Uint32 vui_time_scale;
Uint8 vui_fixed_frame_rate_flag;
Uint8 vcl_hrd_parameters_present_flag;
Uint8 nal_hrd_parameters_present_flag;
Uint8 low_delay_hrd_flag;
Uint8 pic_struct_present_flag;
Uint8 bitstream_restriction_flag;
Uint8 motion_vectors_over_pic_boundaries_flag;
Int8 max_bytes_per_pic_denom;
Int8 max_bits_per_mincu_denom;
Int8 log2_max_mv_length_horizontal;
Int8 log2_max_mv_length_vertical;
Int8 max_num_reorder_frames;
Int8 max_dec_frame_buffering;
avc_hrd_param_t vcl_hrd;
avc_hrd_param_t nal_hrd;
} avc_vui_info_t;
typedef struct
{
Uint32 cpb_removal_delay;
Uint32 dpb_output_delay;
Uint8 pic_struct;
Uint8 num_clock_ts;
} avc_sei_pic_timing_t;
#define AVC_MAX_NUM_FILM_GRAIN_COMPONENT 3
#define AVC_MAX_NUM_INTENSITY_INTERVALS 256
#define AVC_MAX_NUM_MODEL_VALUES 5
#define AVC_MAX_NUM_TONE_VALUE 1024
typedef struct
{
Uint8 film_grain_characteristics_cancel_flag;
Uint8 film_grain_model_id;
Uint8 separate_colour_description_present_flag;
Uint8 film_grain_bit_depth_luma_minus8;
Uint8 film_grain_bit_depth_chroma_minus8;
Uint8 film_grain_full_range_flag;
Uint8 film_grain_colour_primaries;
Uint8 film_grain_transfer_characteristics;
Uint8 film_grain_matrix_coeffs;
Uint8 blending_mode_id;
Uint8 log2_scale_factor;
Uint8 comp_model_present_flag[AVC_MAX_NUM_FILM_GRAIN_COMPONENT];
Uint8 num_intensity_intervals_minus1[AVC_MAX_NUM_FILM_GRAIN_COMPONENT];
Uint8 num_model_values_minus1[AVC_MAX_NUM_FILM_GRAIN_COMPONENT];
Uint8 intensity_interval_lower_bound[AVC_MAX_NUM_FILM_GRAIN_COMPONENT][AVC_MAX_NUM_INTENSITY_INTERVALS];
Uint8 intensity_interval_upper_bound[AVC_MAX_NUM_FILM_GRAIN_COMPONENT][AVC_MAX_NUM_INTENSITY_INTERVALS];
Uint32 comp_model_value[AVC_MAX_NUM_FILM_GRAIN_COMPONENT][AVC_MAX_NUM_INTENSITY_INTERVALS][AVC_MAX_NUM_MODEL_VALUES];
Uint8 film_grain_characteristics_persistence_flag;
} avc_sei_film_grain_t;
typedef struct
{
Uint32 tone_map_id;
Uint8 tone_map_cancel_flag;
Uint32 tone_map_repetition_period;
Uint32 coded_data_bit_depth;
Uint32 target_bit_depth;
Uint8 tone_map_model_id;
Uint32 min_value;
Uint32 max_value;
Uint32 sigmoid_midpoint;
Uint32 sigmoid_width;
Uint16 start_of_coded_interval[AVC_MAX_NUM_TONE_VALUE];
Uint16 num_pivots;
Uint16 coded_pivot_value[AVC_MAX_NUM_TONE_VALUE];
Uint16 target_pivot_value[AVC_MAX_NUM_TONE_VALUE];
Uint8 camera_iso_speed_idc;
Uint32 camera_iso_speed_value;
Uint8 exposure_index_idc;
Uint32 exposure_index_value;
Uint8 exposure_compensation_value_sign_flag;
Uint16 exposure_compensation_value_numerator;
Uint16 exposure_compensation_value_denom_idc;
Uint32 ref_screen_luminance_white;
Uint32 extended_range_white_level;
Uint16 nominal_black_level_code_value;
Uint16 nominal_white_level_code_value;
Uint16 extended_white_level_code_value;
} avc_sei_tone_mapping_info_t;
typedef struct
{
Uint32 colour_remap_id;
Uint8 colour_cancel_flag;
Uint16 colour_remap_repetition_period;
Uint8 colour_remap_video_signal_info_present_flag;
Uint8 colour_remap_full_range_flag;
Uint8 colour_remap_primaries;
Uint8 colour_remap_transfer_function;
Uint8 colour_remap_matrix_coefficients;
Uint8 colour_remap_input_bit_depth;
Uint8 colour_remap_output_bit_depth;
Uint8 pre_lut_num_val_minus1[3];
Uint16 pre_lut_coded_value[3][33];
Uint16 pre_lut_target_value[3][33];
Uint8 colour_remap_matrix_present_flag;
Uint8 log2_matrix_denom;
Uint8 colour_remap_coeffs[3][3];
Uint8 post_lut_num_val_minus1[3];
Uint16 post_lut_coded_value[3][33];
Uint16 post_lut_target_value[3][33];
} avc_sei_colour_remap_info_t;
#ifdef __cplusplus
extern "C" {
#endif
RetCode InitCodecInstancePool(Uint32 coreIdx);
RetCode GetCodecInstance(Uint32 coreIdx, CodecInst ** ppInst);
void FreeCodecInstance(CodecInst * pCodecInst);
RetCode CheckInstanceValidity(
CodecInst * pCodecInst
);
Int32 ConfigSecAXIVp(
Uint32 coreIdx,
Int32 codecMode,
SecAxiInfo* sa,
Uint32 width,
Uint32 height,
Uint32 profile,
Uint32 level
);
RetCode UpdateFrameBufferAddr(
TiledMapType mapType,
FrameBuffer* fbArr,
Uint32 numOfFrameBuffers,
Uint32 sizeLuma,
Uint32 sizeChroma
);
RetCode CheckEncInstanceValidity(EncHandle handle);
RetCode CheckEncOpenParam(EncOpenParam * pop);
RetCode CheckEncParam(EncHandle handle, EncParam * param);
RetCode EnterLock(Uint32 coreIdx);
RetCode LeaveLock(Uint32 coreIdx);
RetCode EnterLock_noclk(Uint32 coreIdx);
RetCode LeaveLock_noclk(Uint32 coreIdx);
RetCode SetClockGate(Uint32 coreIdx, Uint32 on);
void SetPendingInst(Uint32 coreIdx, CodecInst *inst);
void ClearPendingInst(Uint32 coreIdx);
CodecInst *GetPendingInst(Uint32 coreIdx);
int GetPendingInstIdx(Uint32 coreIdx);
/**
* \brief It returns the stride of framebuffer in byte.
*
* \param width picture width in pixel.
* \param format YUV format. see FrameBufferFormat structure in vpuapi.h
* \param cbcrInterleave
* \param mapType map type. see TiledMapType in vpuapi.h
*/
Int32 CalcStride(
Uint32 width,
Uint32 height,
FrameBufferFormat format,
BOOL cbcrInterleave,
TiledMapType mapType,
BOOL isVP9
);
Int32 CalcLumaSize(
CodecInst* inst,
Int32 productId,
Int32 stride,
Int32 height,
FrameBufferFormat format,
BOOL cbcrIntl,
TiledMapType mapType,
DRAMConfig* pDramCfg
);
Int32 CalcChromaSize(
CodecInst* inst,
Int32 productId,
Int32 stride,
Int32 height,
FrameBufferFormat format,
BOOL cbcrIntl,
TiledMapType mapType,
DRAMConfig* pDramCfg
);
/**
* @brief This structure is used for reporting bandwidth (only for VP5).
*/
typedef struct {
Uint32 prpBwRead;
Uint32 prpBwWrite;
Uint32 fbdYRead;
Uint32 fbcYWrite;
Uint32 fbdCRead;
Uint32 fbcCWrite;
Uint32 priBwRead;
Uint32 priBwWrite;
Uint32 secBwRead;
Uint32 secBwWrite;
Uint32 procBwRead;
Uint32 procBwWrite;
Uint32 bwbBwWrite;
} VPUBWData;
typedef struct {
Uint32 priReason;
Uint32 debugInfo0;
Uint32 debugInfo1;
} VPUDebugInfo;
int LevelCalculation(int MbNumX, int MbNumY, int frameRateInfo, int interlaceFlag, int BitRate, int SliceNum);
/* timescale: 1/90000 */
Uint64 GetTimestamp(
EncHandle handle
);
RetCode CalcEncCropInfo(
CodecInst* instance,
EncVpParam* param,
int rotMode,
int srcWidth,
int srcHeight
);
#if defined(SUPPORT_SW_UART) || defined(SUPPORT_SW_UART_V2)
void SwUartHandler(void *context);
int create_sw_uart_thread(unsigned long coreIdx);
void destory_sw_uart_thread();
#endif
#ifdef __cplusplus
}
#endif
#endif // endif VPUAPI_UTIL_H_INCLUDED