/* * 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