diff options
Diffstat (limited to 'drivers/mxc/vpu-malone/Malone_Firmware/Incl/mediaip_fw_types.h')
-rwxr-xr-x | drivers/mxc/vpu-malone/Malone_Firmware/Incl/mediaip_fw_types.h | 1991 |
1 files changed, 1991 insertions, 0 deletions
diff --git a/drivers/mxc/vpu-malone/Malone_Firmware/Incl/mediaip_fw_types.h b/drivers/mxc/vpu-malone/Malone_Firmware/Incl/mediaip_fw_types.h new file mode 100755 index 000000000000..98ff57773a27 --- /dev/null +++ b/drivers/mxc/vpu-malone/Malone_Firmware/Incl/mediaip_fw_types.h @@ -0,0 +1,1991 @@ +/*************************************************** + Copyright (c) 2015 Amphion Semiconductor Ltd + All rights reserved. + *************************************************** + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + **************************************************** + + Filename: mediaip_fw_types.h + Description: Contains structure definitions common + to multiple modules / layers + Author: Media IP FW team - Belfast / Shanghai + + ****************************************************/ + +#ifndef _MEDIAIP_FW_TYPES_H_ +#define _MEDIAIP_FW_TYPES_H_ + +#include "basetype.h" +#include "mediaip_fw_defines.h" + +////////////////////////////////////////////////////////////// +// Generic Stream format + +typedef enum +{ + MEDIA_IP_FMT_NULL = 0x0, + MEDIA_IP_FMT_AVC = 0x1, + MEDIA_IP_FMT_VC1 = 0x2, + MEDIA_IP_FMT_MP2 = 0x3, + MEDIA_IP_FMT_AVS = 0x4, + MEDIA_IP_FMT_ASP = 0x5, + MEDIA_IP_FMT_JPG = 0x6, + MEDIA_IP_FMT_RV = 0x7, + MEDIA_IP_FMT_VP6 = 0x8, + MEDIA_IP_FMT_SPK = 0x9, + MEDIA_IP_FMT_VP8 = 0xA, + MEDIA_IP_FMT_MVC = 0xB, + MEDIA_IP_FMT_VP3 = 0xC, + MEDIA_IP_FMT_HEVC = 0xD, + MEDIA_IP_FMT_AUTO_DETECT = 0xAD00, + MEDIA_IP_FMT_ALL = (int)0xAAAAAAAA, + MEDIA_IP_FMT_UNSUPPORTED = (int)0xFFFFFFFF, + MEDIA_IP_FMT_LAST = MEDIA_IP_FMT_UNSUPPORTED + +} MEDIA_IP_FORMAT; + +////////////////////////////////////////////////////////////// +// Generic picture Structure + +typedef enum +{ + MEDIAIP_TOP_FIELD, + MEDIAIP_BOT_FIELD, + MEDIAIP_TWO_FIELDS, + MEDIAIP_FRAME_PICTURE + +} MEDIAIP_PIC_STRUCT; + +////////////////////////////////////////////////////////////// +// Generic picture type + +typedef enum +{ + MEDIAIP_I_PICTYPE = 1, + MEDIAIP_P_PICTYPE, + MEDIAIP_B_PICTYPE, + MEDIAIP_UNDEF_PICTYPE + +} MEDIAIP_PIC_TYPE; + +////////////////////////////////////////////////////////////// +// Stream Layer + +typedef enum +{ + MEDIAIP_BASE_LAYER = 0, + MEDIAIP_ENHANCEMENT_LAYER + +} MEDIAIP_LAYER; + +////////////////////////////////////////////////////////////// +// Display module - sync state + +typedef enum +{ + DISP_SYNC_UNINITIALISED = 0, + DISP_SYNC_ACQUIRING, + DISP_SYNC_ACQUIRED, + DISP_SYNC_LOST, + DISP_SYNC_LOST_INVALID, + DISP_SYNC_LOST_INSANE + +} MEDIAIP_DISP_SYNC_STATE; + +////////////////////////////////////////////////////////////// +// PES HW state + +typedef enum +{ + PES_STATE_NORMAL = 0, + PES_STATE_PTS_BACKTOBACK, + PES_STATE_PTS_WITH_SLICE, + PES_STATE_PTS_WITH_PIC + +} MEDIAIP_PES_STATE; + +////////////////////////////////////////////////////////////// +// Playback mode + +typedef enum +{ + MEDIAIP_PLAYMODE_CONNECTIVITY = 0, + MEDIAIP_PLAYMODE_BROADCAST, + MEDIAIP_PLAYMODE_BROADCAST_DSS, + MEDIAIP_PLAYMODE_LAST = MEDIAIP_PLAYMODE_BROADCAST_DSS + +} MEDIA_IP_PLAYMODE; + +////////////////////////////////////////////////////////////// +// System mode + +typedef enum +{ + MEDIAIP_SYSMODE_DTV = 0, + MEDIAIP_SYSMODE_STB, + MEDIAIP_SYSMODE_LAST = MEDIAIP_SYSMODE_STB + +} MEDIA_IP_SYSMODE; + +////////////////////////////////////////////////////////////// +// Encoder Output Info +typedef struct +{ + u_int32 uStrIndex; + BOOL bLastFrame; + BOOL bEndOfGOP; + u_int32 uEsStruct; + u_int32 uMsbPTS; + u_int32 uPTS; + u_int32 uVesSize; + u_int32 uCbFrmStartAddr; + +} MEDIAIP_ENCODER_OUTPUT_INFO; + +////////////////////////////////////////////////////////////// +// YUV Output Info + +#ifndef HOST_BUILD +#ifndef _MSC_VER +typedef enum +{ + YUV420 = 0x0, + YUV422, + YUV400 + +} MEDIAIP_FW_FRAME_FMT; +#endif // _MSC_VER +#endif + +////////////////////////////////////////////////////////////// +// Frame Display info + +typedef struct +{ + u_int32 top_field_first; + u_int32 repeat_first_field; + u_int32 disp_vert_res; + u_int32 disp_horiz_res; + u_int32 centre_vert_offset; + u_int32 centre_horiz_offset; + +} MEDIAIP_PIC_DISP_INFO; + +////////////////////////////////////////////////////////////// +// Frame info + +typedef struct +{ + MEDIAIP_PIC_TYPE pic_type; + u_int32 pic_struct; + u_int32 pic_st_addr; + u_int32 last_pic_npf; + u_int32 user_data_avail; + u_int32 frame_store_id; + u_int32 uPercentInErr; + u_int32 view_id; /* H264 MVC */ + u_int32 uVOIdx; /* H264 MVC */ +#if MVC_SUPPORT == MVC_ENABLED + u_int32 uViewId; +#endif + u_int32 uSkipInProg; + +} MEDIAIP_PIC_INFO; + +////////////////////////////////////////////////////////////// +// Memory request type enum + +typedef enum +{ + MEDIAIP_FRAME_REQ = 0, + MEDIAIP_MBI_REQ, + MEDIAIP_DCP_REQ, + MEDIAIP_REQ_LAST = MEDIAIP_DCP_REQ + +} MEDIAIP_MEM_REQ; + +////////////////////////////////////////////////////////////// +// Memory request ctrl + +typedef struct +{ + u_int32 uLayerIdx; + MEDIAIP_MEM_REQ eType; + +} MEDIAIP_MEM_REQ_CTRL, *pMEDIAIP_MEM_REQ_CTRL; + +////////////////////////////////////////////////////////////// +// Memory release ctrl + +typedef struct +{ + u_int32 uLayerIdx; + u_int32 uFSIdx; + MEDIAIP_MEM_REQ eType; + +} MEDIAIP_MEM_REL_CTRL, *pMEDIAIP_MEM_REL_CTRL; + +//////////////////////////////////////////////////////// +// Media IP mem alloc struct + +typedef struct +{ + MEDIAIP_MEM_REQ eType; + u_int32 uLayerIdx; + + u_int32 uFSHandle; + u_int32 uBaseAddr; + u_int32 uStride; + u_int32 uChromaOffset; + +} MEDIAIP_MEM_ALLOC_CTRL, *pMEDIAIP_MEM_ALLOC_CTRL; + +////////////////////////////////////////////////////////////// +// Decoder metrics info + +typedef struct +{ + u_int32 uDpbmcCrc; + u_int32 uFrameActiveCount; + u_int32 uSliceActiveCount; + u_int32 uRbspBytesCount; + u_int32 uSibWaitCount; + u_int32 uDpbReadCount; + u_int32 uMprWaitCount; + u_int32 uBBBCrc; + u_int32 uAccQP; + u_int32 uCacheStat; + u_int32 uCRCSkip; + u_int32 uCRCDrop; + BOOL bCRCValid; + + u_int32 uBaseDpbMcCrc; + u_int32 uByteStreamCrc; + + u_int32 uCRC0; + u_int32 uCRC1; + u_int32 uCRC2; + u_int32 uCRC3; + u_int32 uCRC4; + u_int32 uCRC5; + u_int32 uCRC6; + u_int32 uCRC7; + u_int32 uCRC8; + u_int32 uCRC9; + u_int32 uCRC10; + u_int32 uCRC11; + u_int32 uCRC12; + u_int32 uCRC13; + u_int32 uCRC14; + + u_int32 mbq_full; + u_int32 mbq_empty; + u_int32 slice_cnt; + u_int32 mb_count; + + u_int32 uTotalTime_us; + u_int32 uTotalFwTime_us; + + u_int32 uSTCAtFrameDone; + + u_int32 uProcIaccTotRdCnt; + u_int32 uProcDaccTotRdCnt; + u_int32 uProcDaccTotWrCnt; + u_int32 uProcDaccRegRdCnt; + u_int32 uProcDaccRegWrCnt; + u_int32 uProcDaccRngRdCnt; + u_int32 uProcDaccRngWrCnt; + +} MEDIAIP_DEC_METRICS_INFO, *pMEDIAIP_DEC_METRICS_INFO; + +////////////////////////////////////////////////////////////// +// GOP info + +typedef struct +{ + u_int32 closed_gop; + u_int32 broken_link; + +} MEDIAIP_GOP_INFO; + +////////////////////////////////////////////////////////////// +// Stream frequency + +typedef enum +{ + MEDIAIP_FR_UNKNOWN = 0, + MEDIAIP_FR_23_97_HZ = 1, + MEDIAIP_FR_24_HZ = 2, + MEDIAIP_FR_25_HZ = 3, + MEDIAIP_FR_29_97_HZ = 4, + MEDIAIP_FR_30_HZ = 5, + MEDIAIP_FR_50_HZ = 6, + MEDIAIP_FR_59_94_HZ = 7, + MEDIAIP_FR_60_HZ = 8, + MEDIAIP_FR_7P992_HZ = 9, + MEDIAIP_FR_8_HZ = 10, + MEDIAIP_FR_8P33_HZ = 11, + MEDIAIP_FR_9P99_HZ = 12, + MEDIAIP_FR_10_HZ = 13, + MEDIAIP_FR_11P988_HZ= 14, + MEDIAIP_FR_12_HZ = 15, + MEDIAIP_FR_12P5_HZ = 16, + MEDIAIP_FR_14P985_HZ= 17, + MEDIAIP_FR_15_HZ = 18 + +} MEDIAIP_OUTPUT_FREQ; + +////////////////////////////////////////////////////////////// +// Scan info + +typedef enum +{ + MEDIAIP_PROGRESSIVE, + MEDIAIP_INTERLACE + +} MEDIAIP_SCAN_INFO; + +////////////////////////////////////////////////////////////// +// Pipeline type enumeration + +typedef enum +{ + MEDIAIP_VIDEO_DECODE_PIPELINE = 0x0, + MEDIAIP_VIDEO_ENCODE_PIPELINE, + MEDIAIP_VIDEO_TRANSCODE_PIPELINE, + MEDIAIP_VIDEO_TRANSDISP_PIPELINE, + MEDIAIP_VIDEO_NULL_PIPELINE + +} MEDIAIP_VIDEO_PIPELINE_TYPE; + +////////////////////////////////////////////////////////////// +// Decode info + +/* TODO-KMC */ +/* Why do these structures break the protocol in case used for naming ? */ + +typedef enum +{ + MediaIPFW_DEC_CodingTypeI = 1, + MediaIPFW_DEC_CodingTypeP, + MediaIPFW_DEC_CodingTypeAny, + MediaIPFW_DEC_CodingTypeIP, + MediaIPFW_DEC_CodingTypeSkip, + MediaIPFW_DEC_CodingTypeLast + +} MediaIPFW_DEC_CodingType; + +////////////////////////////////////////////////////////////// +// Decode Command Mode + +typedef enum +{ + MediaIPFW_DEC_ModeSplit = 0, + MediaIPFW_DEC_ModeNoSplit + +} MediaIPFW_DEC_Mode; + +////////////////////////////////////////////////////////////// +// Tag structures + +typedef enum +{ + TAG_FREE = 0, + TAG_IN_USE + +} TAG_STATUS; + +typedef struct +{ + + u_int32 pts; // TSP aspect of the structure + u_int32 dts; + u_int32 pts_flags; +#ifdef PES_INPUT_ENABLE +#else + u_int32 maturity_address; +#endif + u_int32 scode_loc; // Possibly this variable could be combined with maturity_address + // They are the same thing, but come from very different places + BOOL bValid; + +} DEMUX_INFO, *pDEMUX_INFO; + +// This struct is AVC specific - needs to be generic or at least cast as generic +typedef struct +{ + + u_int32 sei_flags; // Display aspect + u_int32 sei_pic_struct; + +} DISP_INFO, *pDISP_INFO; + +typedef struct +{ + u_int32 fs_idc; + u_int32 uUseFrameCRC; + u_int32 uBotFirst; + u_int32 uTopData[2]; + u_int32 uBotData[2]; + u_int32 uReported; + + u_int32 uDpbmcCRC; // Internal MC interface CRC + u_int32 uBsCRC; // Byte Stream CRC + + u_int32 uDPBLevel; // DPB Level at frame start + + u_int16 fs_is_used; + u_int16 Monochrome; + + u_int32 control; + +} CRC_INFO, *pCRC_INFO; + +typedef struct +{ + u_int32 frame_size_inmbs; // {Size[15:0],Height[7:0],Width[7:0]} + u_int32 bs_ib_empty; + u_int32 frm_dec_active; + u_int32 slc_dec_active; + u_int32 stc_at_decode; + u_int32 stc_at_display; + u_int32 num_slc_overlapped; + u_int32 num_mb_overlapped; + u_int32 luma_address; + u_int32 cpb_min_level; + u_int32 rbsp_byte_count; + u_int32 dpb_read_count; + u_int32 mpr_wait_count; + u_int32 slice_count; + u_int16 drm_pull_count; + u_int16 drm_pap_pts_cnt; + u_int16 drm_pap_skip_cnt; + u_int16 drm_pap_dang_cnt; + +} PERF_INFO, *pPERF_INFO; + +typedef struct +{ + u_int32 uNumSlices; + u_int32 uSumQP; + +}QMETER_INFO, *pQMETER_INFO; + +typedef struct +{ + + DEMUX_INFO TspInfo; + DISP_INFO DispInfo; + CRC_INFO CRCInfo; + TAG_STATUS Status; // General info on the structure - free or taken... + QMETER_INFO QMeterInfo; + u_int32 uPercentMBInErr; +#ifdef PERF_DEBUG + PERF_INFO PerfInfo; +#endif + +} TAG, *pTAG; + +typedef struct +{ + + u_int32 uLastTSP; + u_int32 uLastNonTSP; + u_int32 uInUse; + +} TAG_CTRL, *pTAG_CTRL; + + +// Film Grain technology support +typedef struct +{ + BOOL bFGS_Flag; + u_int32 log2_scale_factor; + u_int32 pic_order_count; + u_int32 pic_order_offset; + u_int16 fgs_lut[3][256]; + +}USERDATA_FILMGRAIN_CONTROL; + +#define DIAG_ARRAY_SIZE 26 + +typedef struct +{ + + int32 nAvcDiagState; + int32 nTSPDiagState; + u_int32 uFailurePt; + u_int32 uFailData[4]; + int32 nLastCall; + int32 nDecodeBegan; + int32 nEngStart; + u_int32 uLastStart; + int32 DPBCount; + int32 DPBAnomaly; + int32 DPBAnomalyCnt; + int32 nEntryIndex; + int32 nEntryArray[DIAG_ARRAY_SIZE]; + int32 nExitIndex; + int32 nExitArray[DIAG_ARRAY_SIZE]; + +} DiagInfo, *pDiagInfo; + + +//////////////////////////////////////////////////////// +// Frame store structure - +// Common to multiple modules will hold all information +// which needs to be transferred between any two modules +// in relation to a picture buffer + +typedef struct mediaip_fw_frame_store +{ + struct mediaip_fw_frame_store * pNext; // Not entirely sure I need this - we will see as the architecture evolves... + + /* Frame store description */ + u_int32 uBaseAddr; // Base Address - Luma base for a image store, address for MBI or BLI + u_int32 uChromaOffset; + u_int32 uPitch; + u_int32 uDimsMBs; + + // Module usage + u_int32 uModUsage; // 1 bit set for each module that considers this frame store to be in use by it + // For a real time display / transcode situation this could be more than 2 + + // Last Frame flag + BOOL bLastFrame; // Flag to indicate whether this is the last frame store decoded by the decoder. + // Important when stopping a transcode pipeline or reaching the last frame of a bitstream + // so that we can tell the encoder not to expect any more frames and hence empty it's + // pipeline. + + // Display params + u_int32 uDispData; // Bottom field first etc - normally to be filled in by decode module + + // Frame store + u_int32 uFSID; // An ID used to cross reference with a local structure - filled in by the capture unit, decoder or + // image capture unit, etc + + pTAG pFSTag; // A pointer to a tag for the frame store - normally allocated by the decoder so that unit should + // set the pointer + + USERDATA_FILMGRAIN_CONTROL ud_filmgrain; // Filmgrain support structure + + // Want to give anything that may be managed by the resource layer a generic resource tag! + // Until I can be bothered working out how to do this I will go with the 3 below... + + u_int8 uDynBuffType; // What is the buffer type of the currently allocayted frame store + // Could be worked out from uFSInternBufNum - Remember if we have to + // hold a frames over a channel change not all uDynBuffType members + // will be the same in each stream's group of frame stores + + u_int8 uFSInternBufStart; + u_int8 uFSInternBufNum; + +} MEDIAIP_FW_FRAME_STORE; + +typedef MEDIAIP_FW_FRAME_STORE MEDIAIP_FW_ENCODER_REF_FRAME_STORE; +typedef MEDIAIP_FW_FRAME_STORE MEDIAIP_FW_ENCODER_FRAME_ACT_STORE; + + +//////////////////////////////////////////////////////// +// MetaData store structure - +// Defines an area which may be passed to a base module for its own internal use + +typedef struct +{ + u_int32 uMetadataBase; + u_int32 uMetadataSize; + +} MEDIAIP_FW_METADATA_STORE, *pMEDIAIP_FW_METADATA_STORE; + +//////////////////////////////////////////////////////// +// Stream Frequency enumeration - + + +typedef enum { + + STREAM_FR_UNKNOWN = 0, + STREAM_FR_23_97_HZ = 1, + STREAM_FR_24_HZ = 2, + STREAM_FR_25_HZ = 3, + STREAM_FR_29_97_HZ = 4, + STREAM_FR_30_HZ = 5, + STREAM_FR_50_HZ = 6, + STREAM_FR_59_94_HZ = 7, + STREAM_FR_60_HZ = 8 + + } STREAM_SCAN_FREQ; + +//////////////////////////////////////////////////////// +// Digital Encode Mode ( at the tv encoder) + +typedef enum { + MODE_240p = 0x0, + MODE_240i = 0x1, + MODE_480p = 0x2, + MODE_NTSC = 0x3, + MODE_PALp = 0x4, + MODE_PAL = 0x5, + MODE_720p = 0x6, + MODE_720p_50Hz = 0x7, + MODE_720i = 0x8, + MODE_720i_25Hz = 0x9, + MODE_720i_50Hz = 0xa, + MODE_720i_60Hz = 0xb, + MODE_1080p = 0xc, + MODE_1080p_25Hz = 0xd, + MODE_1080i = 0xe, + MODE_1080i_25Hz = 0xf, + MODE_2Kp = 0x10, + MODE_1080p_24Hz = 0x11, + MODE_UNKNOWN = 0xff + + } TV_ENC_MODE; + +//////////////////////////////////////////////////////// +// Stream Display parameters + +typedef struct +{ + u_int32 uTargetLevel; + u_int32 uHorDecodeRes; + u_int32 uVerDecodeRes; + u_int32 uHorDispRes; + u_int32 uVerDispRes; + u_int32 uDispWidthMBs; + u_int32 uDispHeightMBs; + u_int32 uBufWidthMBs; + u_int32 uBufHeightMBs; + u_int32 uAspectRatio; + u_int32 uSizeMBs; + u_int32 uYUVFmt; + u_int32 uScanFormat; + STREAM_SCAN_FREQ sFreq; + u_int32 uNumRefFrms; + u_int32 uNumDPBFrms; + u_int32 uNumDFEAreas; + u_int32 uProfLevelIDC; + MEDIAIP_OUTPUT_FREQ eOutputFreq; + MEDIAIP_SCAN_INFO eScanInfo; + u_int32 uAR; + u_int32 uColorDesc; + u_int32 uBitDepthLuma; + u_int32 uBitDepthChroma; + u_int32 uNumViews; + u_int32 uViewList; + +} MEDIAIP_FW_STREAM_DISPLAY_PARAMS; + + +//////////////////////////////////////////////////////// +// Frame decoded parameters + +typedef struct +{ + BOOL bTopFieldFirst; + BOOL bRepeatFirstField; + MEDIAIP_PIC_TYPE ePicType; + MEDIAIP_PIC_STRUCT ePicStruct; + + u_int32 uFSHandle; + + u_int32 uPicStartAddr; + u_int32 uPercentMBsInErr; + + u_int32 uPTSLo; + u_int32 uPTSHi; + BOOL bPTSValid; + + BOOL bQMeterValid; + u_int32 uQMeter; + BOOL bGopBitRateAvail; + u_int32 uGopBitRate; + + u_int32 bTemporalRef; + + u_int32 uBbdHorActive; + u_int32 uBbdVerActive; + u_int32 uBbdLogoActive; + u_int32 uBbdBotPrev; + u_int32 uBbdMinColPrj; + u_int32 uBbdMinRowPrj; + + u_int32 uFSBaseAddr; + BOOL bDangling; + BOOL bTopFieldPresent; + + /* Only for RealVideo RPR */ + u_int32 uRprPicWidth; + u_int32 uRprPicHeight; + + /* Only for DivX3 */ + u_int32 uFrameRate; + + /* For decode time yuv gathering */ + u_int32 ulTopLumBaseAddr; + u_int32 ulTopChrBaseAddr; + u_int32 ulBotLumBaseAddr; + u_int32 ulBotChrBaseAddr; + + u_int32 ulStride; + + void * pAltView; + u_int32 uMVCTargetViewIdx; +} MEDIAIP_FW_FRAME_DEC_PARAMS , *pMEDIAIP_FW_FRAME_DEC_PARAMS; + +//////////////////////////////////////////////////////// +// SVC Seq parameters + +typedef struct +{ + u_int32 uNumValidLayers; + MEDIAIP_FW_STREAM_DISPLAY_PARAMS tLayerParams[MEDIAIP_MAX_SVC_DID]; + +} MEDIAIP_FW_SVC_STREAM_PARAMS; + +////////////////////////////////////////////////////////////// +// IRQ Event data + +typedef struct +{ + void * pMVDHw; + u_int32 uIrqStatus[0x3]; + +} MEDIAIP_FW_IRQ_DATA, *pMEDIAIP_FW_IRQ_DATA; + + +////////////////////////////////////////////////////////////// +// CMD Event data + +typedef struct +{ + u_int32 uCmdData; + +}MEDIAIP_FW_CMD_DATA, *pMEDIAIP_FW_CMD_DATA; + +////////////////////////////////////////////////////////////// +// Callback Request Data + +typedef struct +{ + u_int32 uReason; + +}MEDIAIP_FW_CBACK_DATA, *pMEDIAIP_FW_CBACK_DATA; + +//////////////////////////////////////////////////////// +// Interface descriptor +// Generic descriptor type as initially defined by Tempest +// module + +typedef struct +{ + + volatile u_int32 address; + volatile u_int32 parameters; + +} INTERFACE_DESCRIPTOR_TYPE, *pINTERFACE_DESCRIPTOR_TYPE; + +//////////////////////////////////////////////////////// +// Buffer descriptor +// Generic buffer descriptor as initially defined by Tempest +// module + +typedef struct +{ + u_int32 descriptor_number; + u_int32 descriptor_size; + u_int32 descriptor_ptr; + +} BUFFER_TBL_DESCRIPTOR, *BUFFER_TBL_DESCRIPTOR_PTR; + +//////////////////////////////////////////////////////// +// Buffer descriptor +// Generic buffer descriptor as initially defined by Tempest +// module + +typedef struct +{ + u_int32 wptr; + u_int32 rptr; + u_int32 start; + u_int32 end; + +} BUFFER_DESCRIPTOR_TYPE, *pBUFFER_DESCRIPTOR_TYPE; + +//////////////////////////////////////////////////////// +// Stream Buffer descriptor +// Specific buffer descriptor for stream data + +typedef struct +{ + volatile u_int32 wptr; + volatile u_int32 rptr; + volatile u_int32 start; + volatile u_int32 end; + volatile u_int32 LWM; + +} STREAM_BUFFER_DESCRIPTOR_TYPE, *pSTREAM_BUFFER_DESCRIPTOR_TYPE; + +#ifdef TCODE_API_TEST +// Defined specific for PCI ,for its access unit is 64 bits +typedef struct +{ + volatile u_int32 wptr; + volatile u_int32 wptr_res; + volatile u_int32 rptr; + volatile u_int32 rptr_res; + volatile u_int32 start; + volatile u_int32 end; + +} BUF_DES_PCI_SHARE_TYPE, BUF_DES_PCI_SHARE_TYPE_PTR; + +#endif +//////////////////////////////////////////////////////// +// Stream Buffer descriptor +// Buffer descriptor as used by the encoder +// module + +typedef struct +{ + + u_int32 stream_index; + u_int32 stream_buffer_size; + u_int32 stream_buffer_base; + +} STREAM_BUFFER_DESCRIPTOR, *STREAM_BUFFER_DESCRIPTOR_PTR; + +typedef STREAM_BUFFER_DESCRIPTOR MEDIAIP_FW_ENCODER_STREAM_BUFFER_DESC; + +//////////////////////////////////////////////////////// +// PTS debug descriptor +// This descriptor is as initially defined by Tempest +// module + +typedef struct +{ + volatile u_int32 pts_lo; + volatile u_int32 stc_lo; + volatile int32 error; + volatile u_int32 flags; + +} PTS_DEBUG_DESCRIPTOR_TYPE, *pPTS_DEBUG_DESCRIPTOR_TYPE; + +//////////////////////////////////////////////////////// +// PTS descriptor +// This descriptor is as initially defined by Tempest +// module + +typedef struct +{ + volatile u_int32 pts_lo; + volatile u_int32 dts_lo; + volatile int32 flags; + volatile u_int32 maturity_addr; + +} PTS_DESCRIPTOR_TYPE, *pPTS_DESCRIPTOR_TYPE; + +////////////////////////////////////////////////////////////// +// Video Stream Status structure +// +// Note : I am putting this in the communal include file because we may wish to let +// module base FW update such a structure directly as opposed to sending messages +// back to the public FW level... +// We may also wish to lump all module's status into this one structure + +// Why are these volatiles? Should consider removing their volatility!!... +typedef struct +{ + ////////////////////// + // Pipeline variables + volatile u_int32 run; + volatile u_int32 pause; + + ////////////////////// + // Decoder variables + volatile u_int32 mpeg_format; + volatile u_int32 DSS; + volatile u_int32 native_sd; + volatile u_int32 stop; + volatile u_int32 stop_pending; + volatile u_int32 stream_terminate_type; + volatile u_int32 ES; + volatile u_int32 PAL; + volatile u_int32 CRC; + volatile u_int32 update_offset; + volatile u_int32 pcr_sent; + volatile u_int32 PVRMode; + volatile u_int32 malone_mp2_dbdrng_en; + volatile u_int32 uWaitFlush; + + volatile u_int32 pvr_type; /* These are new - need to be fixed */ + volatile u_int32 valid_frame_mask; + + ////////////////////// + // Display variables + volatile u_int32 force_interlace; + volatile u_int32 sync_stc; + volatile int32 nTrinityDisc; + volatile u_int32 uTrinityDiscPCRLo; + volatile u_int32 display_mode_status; + volatile u_int32 sync; + +} MEDIAIP_FW_STREAM_STATUS, *MEDIAIP_FW_STREAM_STATUS_PTR; + +////////////////////////////////////////////////////////////// +// Stream Descriptor Structure +// +// Currently this is basically the stream descriptor structure +// from the decoder FW interface with the host SW +// This needs to evolve to suit our needs better +#if ( TARGET_PLATFORM == GENTB_PLATFORM ) + +typedef struct +{ + volatile u_int32 Control; + volatile u_int32 Buffer_Indices; + volatile u_int32 Message_Filter; + volatile u_int32 Extended_Message_Filter; + volatile u_int32 Tempest_Command_Filter; + volatile u_int32 Status; + volatile u_int32 Bitstream_Error; + volatile u_int32 Skip_Count; + volatile u_int32 Repeat_Count; + volatile u_int32 Frame_Count; + volatile u_int32 Bitstream_Timeout; + volatile u_int32 Max_Frame_Dpb_Size; // For dynamic frame allocation this actually means the start of the allocated memory + volatile u_int32 Decode_Buffer_Count; // For dynamic frame allocation this actually means the size of allocated memory + volatile u_int32 Buffer_Pitch; // For dynamic frame allocation this actually means the memory controller tile width + volatile INTERFACE_DESCRIPTOR_TYPE DPB_Base_Address_dec; // For dynamic frame allocation this actually means the MB info address + volatile u_int32 PTS_DTS_Offset; + volatile u_int32 Internal_PTS_Delay; + volatile u_int32 Sync_Window_Start; + volatile u_int32 Sync_Window_End; + volatile u_int32 Sync_Sanity_Limit; + volatile u_int32 trick_speed; + INTERFACE_DESCRIPTOR_TYPE user_data_desc; + + INTERFACE_DESCRIPTOR_TYPE FrameStoreDesc; + INTERFACE_DESCRIPTOR_TYPE frame_buffer_control_desc; + + INTERFACE_DESCRIPTOR_TYPE pvr_command_list_desc; + volatile u_int32 Pad[2]; + + pPTS_DESCRIPTOR_TYPE pts_table_desc; + pPTS_DEBUG_DESCRIPTOR_TYPE pts_debug_table_desc; + + volatile u_int32 PVR_Control; + volatile u_int32 RAI; + + // For PecosB onwards this is the security control word + volatile u_int32 security_control; + // Status variables for a stream + volatile u_int32 sd_changed_control; + volatile u_int32 ud_type_mask; + MEDIAIP_FW_STREAM_STATUS stream_status; + +#if TARGET_APP == VIDEO_TRANS + volatile u_int32 FrameStoreCount; + // Second set of image buffers ( only required in a dual MC situation ) + volatile u_int32 FrameStoreCount2; + volatile INTERFACE_DESCRIPTOR_TYPE FrameStoreDesc2; + + // Encoder Reference buffers + volatile u_int32 EncRefCount; + volatile INTERFACE_DESCRIPTOR_TYPE EncRefDesc; + + // Encoder Image Activity buffers + volatile u_int32 EncActCount; + volatile INTERFACE_DESCRIPTOR_TYPE EncActDesc; + + // Stream buffer descriptor index - for encoder and decoder + volatile u_int32 uDecStrmBufIdx; // Current decode FW expects that the buffer used will match the SDIndex + volatile u_int32 uEncOutBufIdx; + + // Only enc, vamux interDesc used at present to pass params + volatile INTERFACE_DESCRIPTOR_TYPE uDecParamSet; + volatile INTERFACE_DESCRIPTOR_TYPE uEncParamSet; + volatile INTERFACE_DESCRIPTOR_TYPE uVamuxParamSet; + + // Hardware Interface to system layer + INTERFACE_DESCRIPTOR_TYPE system_config_desc; + +#ifdef TCODE_API_TEST + volatile INTERFACE_DESCRIPTOR_TYPE uBitRateDispSet; +#endif + + volatile u_int32 streamdes_id; + +#else + +#if PLAYMODE == STB + volatile u_int32 streamdes_id; +#endif +#endif + +} STREAM_DESCRIPTOR, *STREAM_DESCRIPTOR_PTR; + +#else + +typedef struct +{ + volatile u_int32 Control; // 0 + volatile u_int32 Buffer_Indices; + volatile u_int32 Message_Filter; + volatile u_int32 Extended_Message_Filter; + volatile u_int32 Tempest_Command_Filter; + volatile u_int32 Status; + volatile u_int32 Bitstream_Error; + volatile u_int32 Skip_Count; + volatile u_int32 Repeat_Count; + volatile u_int32 Frame_Count; + volatile u_int32 Bitstream_Timeout; + volatile u_int32 Max_Frame_Dpb_Size; + volatile u_int32 Buffer_Pitch; + volatile u_int32 Decode_Buffer_Count; + volatile u_int32 PTS_DTS_Offset; + volatile u_int32 Internal_PTS_Delay; + volatile u_int32 Sync_Window_Start; + volatile u_int32 Sync_Window_End; + volatile u_int32 Sync_Sanity_Limit; + volatile u_int32 trick_speed; // 20 + + // Image buffers + volatile u_int32 FrameStoreCount; + volatile INTERFACE_DESCRIPTOR_TYPE FrameStoreDesc; + + // Second set of image buffers ( only required in a dual MC situation ) + volatile u_int32 FrameStoreCount2; + volatile INTERFACE_DESCRIPTOR_TYPE FrameStoreDesc2; + + // Encoder Reference buffers + volatile u_int32 EncRefCount; + volatile INTERFACE_DESCRIPTOR_TYPE EncRefDesc; + + // Encoder Image Activity buffers + volatile u_int32 EncActCount; // 30 + volatile INTERFACE_DESCRIPTOR_TYPE EncActDesc; + + // Stream buffer descriptor index - for encoder and decoder + volatile u_int32 uDecStrmBufIdx; // Current decode FW expects that the buffer used will match the SDIndex + volatile u_int32 uEncOutBufIdx; + + // Only enc, vamux interDesc used at present to pass params + volatile INTERFACE_DESCRIPTOR_TYPE uDecParamSet; + volatile INTERFACE_DESCRIPTOR_TYPE uEncParamSet; + volatile INTERFACE_DESCRIPTOR_TYPE uVamuxParamSet; + + INTERFACE_DESCRIPTOR_TYPE user_data_desc; + INTERFACE_DESCRIPTOR_TYPE frame_buffer_attribute_desc; // Address of the attribute table used by the display process + // Who fills this in?? Do I give a shite in module architecture? + INTERFACE_DESCRIPTOR_TYPE frame_buffer_control_desc; + BUFFER_DESCRIPTOR_TYPE pvr_command_list_desc; + pPTS_DESCRIPTOR_TYPE pts_table_desc; + pPTS_DEBUG_DESCRIPTOR_TYPE pts_debug_table_desc; + + // Hardware Interface to system layer + INTERFACE_DESCRIPTOR_TYPE system_config_desc; + + // Status variables for a stream + volatile u_int32 sd_changed_control; + MEDIAIP_FW_STREAM_STATUS stream_status; + + volatile u_int32 RAI; + + +#ifdef DRM_AV_SYNC_DEBUG + volatile u_int32 DRMPath_Take_Snapshot; // Only used when DRM_AV_SYNC_DEBUG defined but included + volatile u_int32 DRMPath_Snapshot_Addr; // in all builds to enable more transparent api + volatile u_int32 DRMPath_Snapshot_Index; // operations +#endif + +#ifdef TCODE_API_TEST + volatile INTERFACE_DESCRIPTOR_TYPE uBitRateDispSet; +#endif + + volatile u_int32 streamdes_id; + + /* Following have been removed from official descriptor area + INTERFACE_DESCRIPTOR_TYPE sps_td; + INTERFACE_DESCRIPTOR_TYPE pps_td; + INTERFACE_DESCRIPTOR_TYPE spds_td; + */ + +} STREAM_DESCRIPTOR, *STREAM_DESCRIPTOR_PTR; + +#endif + +#define CRC_DEBUG_NUM 1024 +#define PERF_DEBUG_NUM 2048 // 68secs +#define CRC_FRAME 0 +#define CRC_FIELD_TOP 1 +#define CRC_FIELD_BOT 3 + +typedef struct +{ + + u_int32 abort_type; + u_int32 mode; + u_int32 link_reg; + u_int32 stack_pointer; + +}ExceptionDesc, pExceptionDesc; + +#ifndef VIDEO_SOFTWARE +/* Structure below needs to be in shared memory header file for SW apps */ +typedef enum +{ + MVDDecoderOK = 0x0, + MVDDecoderServiceIrq, + MVDDecoderCmdPending, + MVDDecoderFWLoop, + MVDDecoderHWActive, + MVDDecoderHWActiveStreamStall, + MVDDecoderHWActiveMemStall, + MVDDecoderFWHWDeadlock, + MVDDecoderFWHWAutoRec, + MVDDecoderHWBSDMAIssue, + MVDDecoderUnknown, + MVDDecoderLast = MVDDecoderUnknown + +} MEDIAIP_FW_DECODER_STATUS; + +#endif + +typedef struct + +{ + + u_int32 size; // Size of this structure + u_int32 index; // Current index into array + u_int32 loops; // Number of times we looped + u_int32 num_frames; // Number of frames in a loop + u_int32 frame_size_inmbs; // {Size[15:0],Height[7:0],Width[7:0]} + + u_int32 not_first_time; + u_int32 prev_vsync_count; + u_int32 worst_frame; + u_int32 loop_key; // Value used to decide when stream has looped + u_int32 skip_start; + + + u_int32 luma_mismatches; // + u_int32 chroma_mismatches; // + u_int32 dpbmc_mismatches; // + u_int32 bs_mismatches; // + u_int32 skip_count; // + u_int32 repeat_count; // + u_int32 loop_lu_crc; // Merge of CRCs + u_int32 loop_ch_crc; // Merge of CRCs + + // Most recent captured Info + u_int32 crc_type[PERF_DEBUG_NUM]; + u_int32 idr_pic[PERF_DEBUG_NUM]; + u_int32 poc[PERF_DEBUG_NUM]; + u_int32 luma_crc[PERF_DEBUG_NUM]; + u_int32 chroma_crc[PERF_DEBUG_NUM]; + u_int32 dpbmc_crc[PERF_DEBUG_NUM]; // Only valid for BBV & above + u_int32 bs_crc[PERF_DEBUG_NUM]; // Only valid for BBV & above + + // Mismatches & skips + u_int32 luma_mismatch[PERF_DEBUG_NUM]; + u_int32 chroma_mismatch[PERF_DEBUG_NUM]; + u_int32 dpbmc_mismatch[PERF_DEBUG_NUM]; // Only valid for BBV & above + u_int32 bs_mismatch[PERF_DEBUG_NUM]; // Only valid for BBV & above + + u_int32 mismatch_fs_idc[32]; + u_int32 skip[PERF_DEBUG_NUM]; + u_int32 repeat[PERF_DEBUG_NUM]; + + + // Performance metrics & the associated CRCs for first loop + u_int32 crc_type_l0[PERF_DEBUG_NUM]; + u_int32 idr_pic_l0[PERF_DEBUG_NUM]; + u_int32 poc_l0[PERF_DEBUG_NUM]; + u_int32 luma_crc_l0[PERF_DEBUG_NUM]; + u_int32 chroma_crc_l0[PERF_DEBUG_NUM]; + u_int32 dpbmc_crc_l0[PERF_DEBUG_NUM]; // Only valid for BBV & above + u_int32 bs_crc_l0[PERF_DEBUG_NUM]; // Only valid for BBV & above + + // Max of metrics + u_int32 max_slc_dec_active; + u_int32 max_dpb_read_count; + u_int32 max_mpr_wait_count; + u_int32 max_rbsp_byte_count; + u_int32 max_bs_ib_empty; + u_int32 max_slice_count; + u_int32 max_mb_overlapped; + u_int32 min_stc_diff; + u_int32 max_frm_dec_active; + u_int32 max_frm_dec_active_2; + u_int32 max_frm_dec_active_4; + u_int32 max_frm_dec_active_8; + + // Max of metrics assiciated with worst frame + u_int32 mfda_bs_ib_empty; + u_int32 mfda_mpr_wait_count; + u_int32 mfda_dpb_read_count; + u_int32 mfda_rbsp_byte_count; + u_int32 mfda_slice_count; + u_int32 mfda_slc_dec_active; + u_int32 mfda_mb_overlapped; + + // Will effectively be averages + u_int32 Av_frm_dec_active; + u_int32 Av_slc_dec_active; + u_int32 Av_mpr_wait_count; + u_int32 Av_dpb_read_count; + u_int32 Av_rbsp_byte_count; + u_int32 Av_bs_ib_empty; + u_int32 Av_slice_count; + u_int32 Av_mb_overlapped; + + u_int32 stc_diff[PERF_DEBUG_NUM]; + u_int32 frm_dec_active[PERF_DEBUG_NUM]; + u_int32 bs_ib_empty[PERF_DEBUG_NUM]; + u_int32 slc_dec_active[PERF_DEBUG_NUM]; + u_int32 num_slc_overlapped[PERF_DEBUG_NUM]; // Only valid for BBV & above + u_int32 num_mb_overlapped[PERF_DEBUG_NUM]; // Only valid for BBV & above + u_int32 cpb_min_level[PERF_DEBUG_NUM]; + u_int32 rbsp_byte_count[PERF_DEBUG_NUM]; + u_int32 dpb_read_count[PERF_DEBUG_NUM]; + u_int32 mpr_wait_count[PERF_DEBUG_NUM]; + u_int16 drm_pull_count[PERF_DEBUG_NUM]; + u_int16 drm_pap_pts_cnt[PERF_DEBUG_NUM]; + u_int16 drm_pap_skip_cnt[PERF_DEBUG_NUM]; + u_int16 drm_pap_dang_cnt[PERF_DEBUG_NUM]; + + u_int32 initial_dpb_level[PERF_DEBUG_NUM]; // DPB level at frame start + +} PerfDebug; + +typedef struct + +{ + + u_int32 loops; // Number of times we looped + u_int32 loop_frames; // Number of frames in a loop + u_int32 num_frames; // Position in current loop + u_int32 loop_dpbmc_crc; // Merge of CRCs + u_int32 loop_stream_crc; // Merge of CRCs + u_int32 LoopCyCntD1024; // Sum of frm_dec_active/1024 + u_int32 MaxDecActive; // Max frm_dec_active + u_int32 not_first_time; + u_int32 first_crc; + u_int32 WorstFrame; + +} DecDebug; + + +/////////////////////////////////////////// +// System Configuration structure + +typedef struct +{ + u_int32 uCfgCookie; + + u_int32 uNumMalones; + u_int32 uMaloneBaseAddress[MEDIAIP_MAX_NUM_MALONES]; + u_int32 uHifOffset[MEDIAIP_MAX_NUM_MALONES]; + u_int32 uMaloneIrqPin[MEDIAIP_MAX_NUM_MALONES][MEDIAIP_MAX_NUM_MALONE_IRQ_PINS]; + u_int32 uMaloneIrqTarget[MEDIAIP_MAX_NUM_MALONES][MEDIAIP_MAX_NUM_MALONE_IRQ_PINS]; + + u_int32 uNumWindsors; + u_int32 uWindsorBaseAddress[MEDIAIP_MAX_NUM_WINDSORS]; + u_int32 uWindsorIrqPin[MEDIAIP_MAX_NUM_WINDSORS][MEDIAIP_MAX_NUM_WINDSOR_IRQ_PINS]; + u_int32 uWindsorIrqTarget[MEDIAIP_MAX_NUM_WINDSORS][MEDIAIP_MAX_NUM_WINDSOR_IRQ_PINS]; + + u_int32 uCmdIrqPin[MEDIAIP_MAX_NUM_CMD_IRQ_PINS]; + u_int32 uCmdIrqTarget[MEDIAIP_MAX_NUM_CMD_IRQ_PINS]; + + u_int32 uMsgIrqPin[MEDIAIP_MAX_NUM_MSG_IRQ_PINS]; + u_int32 uMsgIrqTarget[MEDIAIP_MAX_NUM_MSG_IRQ_PINS]; + + u_int32 uSysClkFreq; + u_int32 uNumTimers; + u_int32 uTimerBaseAddr; + u_int32 uTimerIrqPin[MEDIAIP_MAX_NUM_TIMER_IRQ_PINS]; + u_int32 uTimerIrqTarget[MEDIAIP_MAX_NUM_TIMER_IRQ_PINS]; + u_int32 uTimerSlots[MEDIAIP_MAX_NUM_TIMER_IRQ_SLOTS]; + + u_int32 uGICBaseAddr; + u_int32 uUartBaseAddr; + + u_int32 uDPVBaseAddr; + u_int32 uDPVIrqPin; + u_int32 uDPVIrqTarget; + + u_int32 uPixIfBaseAddr; + + u_int32 pal_trace_level; + u_int32 pal_trace_destination; + + u_int32 pal_trace_level1; + u_int32 pal_trace_destination1; + + u_int32 uHeapBase; + u_int32 uHeapSize; + + u_int32 uFSLCacheBaseAddr; + +} MEDIAIP_FW_SYSTEM_CONFIG, *pMEDIAIP_FW_SYSTEM_CONFIG; + + +/////////////////////////////////////////// +// Encoder types to be globally used across +// all encode / transcode apps and components + +/////////////////////////////////////////// +// MEDIAIP_ENC_FMT + +typedef enum +{ + MEDIAIP_ENC_FMT_H264 = 0, + MEDIAIP_ENC_FMT_VC1, + MEDIAIP_ENC_FMT_MPEG2, + MEDIAIP_ENC_FMT_MPEG4SP, + MEDIAIP_ENC_FMT_H263, + MEDIAIP_ENC_FMT_MPEG1, + MEDIAIP_ENC_FMT_SHORT_HEADER, + MEDIAIP_ENC_FMT_NULL + +} MEDIAIP_ENC_FMT; + +/////////////////////////////////////////// +// MEDIAIP_ENC_PROFILE + +typedef enum +{ + MEDIAIP_ENC_PROF_MPEG2_SP = 0, + MEDIAIP_ENC_PROF_MPEG2_MP, + MEDIAIP_ENC_PROF_MPEG2_HP, + MEDIAIP_ENC_PROF_H264_BP, + MEDIAIP_ENC_PROF_H264_MP, + MEDIAIP_ENC_PROF_H264_HP, + MEDIAIP_ENC_PROF_MPEG4_SP, + MEDIAIP_ENC_PROF_MPEG4_ASP, + MEDIAIP_ENC_PROF_VC1_SP, + MEDIAIP_ENC_PROF_VC1_MP, + MEDIAIP_ENC_PROF_VC1_AP + +} MEDIAIP_ENC_PROFILE; + +/////////////////////////////////////////// +// MEDIAIP_ENC_CONFIG_CODEC_PARAMETER + +typedef struct +{ + MEDIAIP_ENC_FMT eCodecMode; + MEDIAIP_ENC_PROFILE eProfile; + u_int32 uReserved[2]; + +} MEDIAIP_ENC_CONFIG_CODEC_PARAMETER, *pMEDIAIP_ENC_CONFIG_CODEC_PARAMETER; //8 words + +/////////////////////////////////////////// +// MEDIAIP_ENC_PIXEL_FORMAT + +typedef enum +{ + MEDIAIP_ENC_PLANAR = 0, + MEDIAIP_ENC_SEMIPLANAR + +} MEDIAIP_ENC_PIXEL_FORMAT; + +/////////////////////////////////////////// +// MEDIAIP_ENC_CHROMA_FMT + +typedef enum +{ + MODE_420=0, + MODE_422, + MODE_444 + +} MEDIAIP_ENC_CHROMA_FMT; + +/////////////////////////////////////////// +// MEDIAIP_ENC_FRAME_STRUCT + +typedef struct +{ + u_int32 uSrcFieldModeForDsa; + u_int32 uDstFieldModeForEnc; + u_int32 uReserved[2]; + +} MEDIAIP_ENC_FRAME_STRUCT, *pMEDIAIP_ENC_FRAME_STRUCT; + +/////////////////////////////////////////// +// MEDIAIP_ENC_FRAME_DIMENSIONS + +typedef struct +{ + /* Input picture features */ + u_int32 uSrcWidth; + u_int32 uSrcHeight; + u_int32 uYStride; + u_int32 uUVStride; + + /* Clipping information */ + u_int32 uClipFlag; /*Note: 0: don't clip, 1: clip. encode only a part of input frame */ + u_int32 uOffset_x; + u_int32 uOffset_y; + u_int32 uClipPicWidth; + u_int32 uClipPicHeight; + + /* Output picture features */ + u_int32 uDstWidth; + u_int32 uDstHeight; + u_int32 uTileMode; /* 0: scan raster mode 1: tile mode. */ + u_int32 uTileWidth; /* Note: In tile mode, uYStride should be calculated depend on uTileWidth */ + u_int32 uTileHeight; + +} MEDIAIP_ENC_FRAME_DIMENSIONS, *pMEDIAIP_ENC_FRAME_DIMENSIONS; + +/////////////////////////////////////////// +// MEDIAIP_ENC_BITRATE_MODE + +typedef enum +{ + MEDIAIP_ENC_BITRATECONTROLMODE_VBR = 0x00000001, + MEDIAIP_ENC_BITRATECONTROLMODE_CBR = 0x00000002, + MEDIAIP_ENC_BITRATECONTROLMODE_CONSTANT_QP = 0x00000004 /* Only in debug mode */ + +} MEDIAIP_ENC_BITRATE_MODE, *pMEDIAIP_ENC_BITRATE_MODE; + +/////////////////////////////////////////// +// MEDIAIP_ENC_BITRATE_CONTROL + +typedef struct +{ + MEDIAIP_ENC_BITRATE_MODE eBitRateMode; + u_int32 uTargetBitrate; + u_int32 uMaxBitRate; + u_int32 uMinBitRate; /* Requested by Windsor, for soft encoder, it is useless */ + u_int32 uSliceQP; + +} MEDIAIP_ENC_BITRATE_CONTROL, *pMEDIAIP_ENC_BITRATE_CONTROL; + +/////////////////////////////////////////// +// MEDIAIP_ENC_GOP_STRUCTURE + +typedef struct +{ + u_int32 uFrameRateNum; + u_int32 uFrameRateDen; + u_int32 uIFrameInterval; + u_int32 uGopBLength; /* How many B frames between I or P frames, max is 4 for Windsor */ + u_int32 uLowLatencyMode; /* Switch off scene change mode, no B frame, only in VBR Mode */ + /* TODO-KMC */ + /* Remove the crap below */ + u_int32 reserved[3]; + +} MEDIAIP_ENC_GOP_STRUCTURE, *pMEDIAIP_ENC_GOP_STRUCTURE; + +/////////////////////////////////////////// +// MEDIAIP_ENC_STREAM_PARAMETER + +typedef struct +{ + MEDIAIP_ENC_CHROMA_FMT eVideoFormat; + MEDIAIP_ENC_PIXEL_FORMAT ePixelFormat; + + MEDIAIP_ENC_GOP_STRUCTURE mGOPStructure; + MEDIAIP_ENC_FRAME_STRUCT mFrameStructure; + MEDIAIP_ENC_FRAME_DIMENSIONS mFrameSize; + MEDIAIP_ENC_BITRATE_CONTROL mBitRateControl; + u_int32 uExpertModeEnable; /* Enable expert mode */ + u_int32 uMemChunkAddr; /* Start address of memory chunk */ + u_int32 uMemChunkSize; /* Size of memory chunk */ + u_int32 uStreamFinish; + /* TODO-KMC */ + /* Remove the crap below */ + u_int32 reserved[64 - 40]; + +} MEDIAIP_ENC_STREAM_PARAMETER, *pMEDIAIP_ENC_STREAM_PARAMETER; + + +/////////////////////////////////////////// +// MEDIAIP_ENC_YUV_BUFFER_DESC + +typedef struct +{ + u_int32 uFrameID; + u_int32 uLumaBase; + u_int32 uChromaBase; + u_int32 uParamIdx; + +} MEDIAIP_ENC_YUV_BUFFER_DESC, *pMEDIAIP_ENC_YUV_BUFFER_DESC; + +/////////////////////////////////////////// +// eMEDIAIP_ENC_PIC_TYPE + +typedef enum +{ + MEDIAIP_ENC_PIC_TYPE_B_FRAME = 0, + MEDIAIP_ENC_PIC_TYPE_P_FRAME, + MEDIAIP_ENC_PIC_TYPE_I_FRAME, + MEDIAIP_ENC_PIC_TYPE_IDR_FRAME, + MEDIAIP_ENC_PIC_TYPE_BI_FRAME + +} MEDIAIP_ENC_PIC_TYPE, *pMEDIAIP_ENC_PIC_TYPE; + +/////////////////////////////////////////// +// MEDIAIP_ENC_PIC_TYPE + +typedef struct +{ + u_int32 uFrameID; + u_int32 uPicEncodDone; + MEDIAIP_ENC_PIC_TYPE ePicType; + u_int32 uSkippedFrame; + u_int32 uErrorFlag; + u_int32 uPSNR; + u_int32 uFlushDone; + u_int32 uMBy; + u_int32 uMBx; + u_int32 uFrameSize; + u_int32 uFrameEncTtlFrmCycles; + u_int32 uFrameEncTtlSlcCycles; + u_int32 uFrameEncTtlEncCycles; + u_int32 uFrameEncTtlHmeCycles; + u_int32 uFrameEncTtlDsaCycles; + u_int32 uFrameEncFwCycles; + u_int32 uFrameCrc; + u_int32 uNumInterrupts_1; + u_int32 uNumInterrupts_2; + u_int32 uH264POC; + u_int32 uRefInfo; + u_int32 uPicNum; + u_int32 uPicActivity; + u_int32 uSceneChange; + u_int32 uMBStats; + u_int32 uEncCacheCount0; + u_int32 uEncCacheCount1; + u_int32 uMtlWrStrbCnt; + u_int32 uMtlRdStrbCnt; + u_int32 uStrBuffWrPtr; + u_int32 uDiagnosticEvents; + u_int32 uProcIaccTotRdCnt; + u_int32 uProcDaccTotRdCnt; + u_int32 uProcDaccTotWrCnt; + u_int32 uProcDaccRegRdCnt; + u_int32 uProcDaccRegWrCnt; + u_int32 uProcDaccRngRdCnt; + u_int32 uProcDaccRngWrCnt; + +} MEDIAIP_ENC_PIC_INFO, *pMEDIAIP_ENC_PIC_INFO; + +/////////////////////////////////////////// +// MEDIAIP_ENC_DSA_INFO + +typedef struct +{ + u_int32 uHeight; + u_int32 uWidth; + u_int32 uCropWidth; + u_int32 uCropHeight; + u_int32 uCropPixelXOffset; + u_int8 * pImgBuffer; + u_int32 uStride; + u_int32 uOffset2Chroma; + u_int32 uOffset2Decimate; + +} MEDIAIP_ENC_DSA_INFO, *pMEDIAIP_ENC_DSA_INFO; + +/////////////////////////////////////////// +// MEDIAIP_ENC_PIC_PARAM_UPD + +typedef struct +{ + /* Each bit indicate corresponding parameter should be updated */ + u_int32 uMaskflag; + + /* ENC_GOP_STRUCTURE variables */ + u_int32 uFrameRateNum; + u_int32 uFrameRateDen; + + /* MEDIAIP_ENC_FRAME_STRUCT variables */ + u_int32 uSrcFieldModeForDsa; + u_int32 uDstFieldModeForEnc; + + /* MEDIAIP_ENC_FRAME_DIMENSIONS variables */ + u_int32 uSrcWidth; + u_int32 uSrcHeight; + u_int32 uYStride; + u_int32 uUVStride; + u_int32 uOffset_x; + u_int32 uOffset_y; + u_int32 uClipPicWidth; + u_int32 uClipPicHeight; + u_int32 uDstWidth; + u_int32 uDstHeight; + u_int32 uIFrameInterval; + u_int32 uGopBLength; + u_int32 uLowLatencyMode; + + /* MEDIAIP_ENC_BITRATE_CONTROL variables */ + MEDIAIP_ENC_BITRATE_MODE eBitRateMode; + u_int32 uTargetBitrate; + u_int32 uMaxBitRate; + u_int32 uMinBitRate; + u_int32 uSliceQP; + u_int32 uReserved[32-23]; + +} MEDIAIP_ENC_PIC_PARAM_UPD, *pMEDIAIP_ENC_PIC_PARAM_UPD; + + +/////////////////////////////////////////// +// MEDIAIP_ENC_CALIB_PARAMS +// +// Encoder Hardware calibration parameters + +typedef struct +{ + u_int32 use_ame; + + u_int32 cme_mvx_max; + u_int32 cme_mvy_max; + u_int32 ame_prefresh_y0; + u_int32 ame_prefresh_y1; + u_int32 fme_min_sad; + u_int32 cme_min_sad; + + u_int32 fme_pred_int_weight; + u_int32 fme_pred_hp_weight; + u_int32 fme_pred_qp_weight; + u_int32 fme_cost_weight; + u_int32 fme_act_thold; + u_int32 fme_sad_thold; + u_int32 fme_zero_sad_thold; + + u_int32 fme_lrg_mvx_lmt; + u_int32 fme_lrg_mvy_lmt; + u_int32 fme_force_mode; + u_int32 fme_force4mvcost; + u_int32 fme_force2mvcost; + + u_int32 h264_inter_thrd; + + u_int32 i16x16_mode_cost; + u_int32 i4x4_mode_lambda; + u_int32 i8x8_mode_lambda; + + u_int32 inter_mod_mult; + u_int32 inter_sel_mult; + u_int32 inter_bid_cost; + u_int32 inter_bwd_cost; + u_int32 inter_4mv_cost; + int32 one_mv_i16_cost; + int32 one_mv_i4x4_cost; + int32 one_mv_i8x8_cost; + int32 two_mv_i16_cost; + int32 two_mv_i4x4_cost; + int32 two_mv_i8x8_cost; + int32 four_mv_i16_cost; + int32 four_mv_i4x4_cost; + int32 four_mv_i8x8_cost; + + u_int32 intra_pred_enab; + u_int32 intra_chr_pred; + u_int32 intra16_pred; + u_int32 intra4x4_pred; + u_int32 intra8x8_pred; + + u_int32 cb_base; + u_int32 cb_size; + u_int32 cb_head_room; + + u_int32 mem_page_width; + u_int32 mem_page_height; + u_int32 mem_total_size; + u_int32 mem_chunk_addr; + u_int32 mem_chunk_size; + u_int32 mem_y_stride; + u_int32 mem_uv_stride; + + u_int32 split_wr_enab; + u_int32 split_wr_req_size; + u_int32 split_rd_enab; + u_int32 split_rd_req_size; + +} MEDIAIP_ENC_CALIB_PARAMS, *pMEDIAIP_ENC_CALIB_PARAMS; + +/////////////////////////////////////////// +// MEDIAIP_ENC_CONFIG_PARAMS +// +// Stream-specific configuration parameters + +typedef struct +{ + u_int32 ParamChange; + + u_int32 start_frame; // These variables are for debugging purposes only + u_int32 end_frame; + + u_int32 userdata_enable; + u_int32 userdata_id[4]; + u_int32 userdata_message[MEDIAIP_ENC_USER_DATA_WORDS]; + u_int32 userdata_length; + + u_int32 h264_profile_idc; + u_int32 h264_level_idc; + u_int32 h264_au_delimiter; // Enable the use of Access Unit Delimiters + u_int32 h264_seq_end_code; // Enable the use of Sequence End Codes + u_int32 h264_recovery_points; // Enable the use of Recovery Points (must be with a fixed GOP structure) + u_int32 h264_vui_parameters; // Enable the use of VUI parameters (for rate control purposes) + u_int32 h264_aspect_ratio_present; + u_int32 h264_aspect_ratio_sar_width; + u_int32 h264_aspect_ratio_sar_height; + u_int32 h264_overscan_present; + u_int32 h264_video_type_present; + u_int32 h264_video_format; + u_int32 h264_video_full_range; + u_int32 h264_video_colour_descriptor; + u_int32 h264_video_colour_primaries; + u_int32 h264_video_transfer_char; + u_int32 h264_video_matrix_coeff; + u_int32 h264_chroma_loc_info_present; + u_int32 h264_chroma_loc_type_top; + u_int32 h264_chroma_loc_type_bot; + u_int32 h264_timing_info_present; + u_int32 h264_buffering_period_present; + u_int32 h264_low_delay_hrd_flag; + + u_int32 aspect_ratio; + u_int32 test_mode; // Automated firmware test mode + u_int32 dsa_test_mode; // Automated test mode for the DSA. + u_int32 fme_test_mode; // Automated test mode for the fme + + u_int32 cbr_row_mode; //0: FW mode; 1: HW mode + u_int32 windsor_mode; //0: normal mode; 1: intra only mode; 2: intra+0MV mode + u_int32 encode_mode; // H264, VC1, MPEG2, DIVX + u_int32 frame_width; // display width + u_int32 frame_height; // display height + u_int32 enc_frame_width; // encoding width, should be 16-pix align + u_int32 enc_frame_height; // encoding height, should be 16-pix aligned for progressive and 32-pix aligned for interlace + u_int32 frame_rate_num; + u_int32 frame_rate_den; + + u_int32 vi_field_source; // vi input source is frame or field + u_int32 vi_frame_width; + u_int32 vi_frame_height; + u_int32 crop_frame_width; + u_int32 crop_frame_height; + u_int32 crop_x_start_posn; + u_int32 crop_y_start_posn; + u_int32 mode422; + u_int32 mode_yuy2; + u_int32 dsa_luma_en; + u_int32 dsa_chroma_en; + u_int32 dsa_ext_hfilt_en; + u_int32 dsa_di_en; + u_int32 dsa_di_top_ref; + u_int32 dsa_vertf_disable; // disable the vertical filter. + u_int32 dsa_disable_pwb; + u_int32 dsa_hor_phase; + u_int32 dsa_ver_phase; + + u_int32 dsa_iac_enable; // IAC / DSA cannot operate independently in FW so this variable controls + u_int32 iac_sc_threshold; + u_int32 iac_vm_threshold; + u_int32 iac_skip_mode; + u_int32 iac_grp_width; + u_int32 iac_grp_height; + + u_int32 rate_control_mode; + u_int32 rate_control_resolution; + u_int32 buffer_size; + u_int32 buffer_level_init; + u_int32 buffer_I_bit_budget; + + u_int32 top_field_first; + + u_int32 intra_lum_qoffset; + u_int32 intra_chr_qoffset; + u_int32 inter_lum_qoffset; + u_int32 inter_chr_qoffset; + u_int32 use_def_scaling_mtx; + + u_int32 inter_8x8_enab; + u_int32 inter_4x4_enab; + + u_int32 fme_enable_qpel; + u_int32 fme_enable_hpel; + u_int32 fme_nozeromv; // can force the FME not to do the (0,0) search. + u_int32 fme_predmv_en; + u_int32 fme_pred_2mv4mv; + u_int32 fme_smallsadthresh; + + u_int32 ame_en_lmvc; + u_int32 ame_x_mult; + u_int32 cme_enable_4mv; // Enable the use of 4MV partitioning + u_int32 cme_enable_1mv; + u_int32 hme_enable_16x8mv; + u_int32 hme_enable_8x16mv; + u_int32 cme_mv_weight; // CME motion vector decisions are made by combining these + u_int32 cme_mv_cost; // cost and weight variables + u_int32 ame_mult_mv; + u_int32 ame_shift_mv; + + u_int32 hme_forceto1mv_en; + u_int32 hme_2mv_cost; // the cost of choosing a 2MV mode over 1MV. + u_int32 hme_pred_mode; + u_int32 hme_sc_rnge; + u_int32 hme_sw_rnge; + + // for windsor pes , add by fulin + u_int32 output_format; // 0: output ES; 1: output PES + u_int32 timestamp_enab; // 0: have timestamps in all frame; 1: have timestamps in I and P frame; 2: have timestamps only in I frame + u_int32 initial_PTS_enab; // if enabled , use following value,else compute by fw + u_int32 initial_PTS; // the initial value of PTS in the first frame (ms) + +} MEDIAIP_ENC_CONFIG_PARAMS, *pMEDIAIP_ENC_CONFIG_PARAMS; + + +/////////////////////////////////////////// +// MEDIAIP_ENC_STATIC_PARAMS +// +// Static parameters ( may change at the GOP level ) + +typedef struct +{ + u_int32 ParamChange; + + u_int32 gop_length; + + u_int32 rate_control_bitrate; + u_int32 rate_control_bitrate_min; + u_int32 rate_control_bitrate_max; + u_int32 rate_control_content_models; + u_int32 rate_control_iframe_maxsize; // Maximum size of I frame generated by BPM in comparison to ideal (/4) + u_int32 rate_control_qp_init; + u_int32 rate_control_islice_qp; + u_int32 rate_control_pslice_qp; + u_int32 rate_control_bslice_qp; + + u_int32 adaptive_quantization; // Enable the use of activity measures from VIPP in QP assignment + u_int32 aq_variance; + u_int32 cost_optimization; // Enable picture/frame level adjustments of the cost parameters by FW. + u_int32 fdlp_mode; // Frequency-domain low-pass filter control, 0: off, 1-4: specific, 5: adaptive + u_int32 enable_isegbframes; // Enable the use of B frames in the first segment of a GOP + u_int32 enable_adaptive_keyratio; // Enable the use of an adaptive I to P/B ratio (aims to reduce distortion) + u_int32 keyratio_imin; // Clamps applied to picture size ratios + u_int32 keyratio_imax; + u_int32 keyratio_pmin; + u_int32 keyratio_pmax; + u_int32 keyratio_bmin; + u_int32 keyratio_bmax; + int32 keyratio_istep; + int32 keyratio_pstep; + int32 keyratio_bstep; + + u_int32 enable_paff; // Enable Picture Adaptive Frame/Field + u_int32 enable_b_frame_ref; // Enable B frame as references + u_int32 enable_adaptive_gop; // Enable an adaptive GOP structure + u_int32 enable_closed_gop; // Enable a closed GOP structure + // i.e. if enabled, the first consecutive B frames following + // an I frame in each GOP will be intra or backwards only coded + // and do not rely on previous reference pictures. + u_int32 open_gop_refresh_freq; // Controls the insertion of closed GOP's (or IDR GOP's in H.264) + u_int32 enable_adaptive_sc; // Enable adaptive scene change GOP structure (0:off, 1:adaptive, 2:IDR) + u_int32 enable_fade_detection; // Enable fade detection and associated motion estimation restrictions + int32 fade_detection_threshold; // Threshold at which the activity slope indicates a possible fading event + u_int32 enable_repeat_b; // Enalbe the repeated B frame mode at CBR + +} MEDIAIP_ENC_STATIC_PARAMS, *pMEDIAIP_ENC_STATIC_PARAMS; + +/////////////////////////////////////////// +// MEDIAIP_ENC_DYN_PARAMS +// +// Dynamic parameters (may change at the frame level) + +typedef struct +{ + u_int32 ParamChange; + + u_int32 rows_per_slice; + + u_int32 mbaff_enable; // Macroblock adaptive frame/field enable + u_int32 dbf_enable; // Enable the deblocking filter + + u_int32 field_source; // progressive/interlaced control + u_int32 gop_b_length; // Number of B frames between anchor frames + // (only to be changed at a GOP segment boundary) + u_int32 mb_group_size; // Number of macroblocks normally assigned to a group + // (implications for performance, interrupts and rate control) + + u_int32 cbr_rows_per_group; + + u_int32 skip_enable; // Enable the use of skipped macroblocks + + u_int32 pts_bits_0_to_31; // TO BE REMOVED... + u_int32 pts_bit_32; + + u_int32 rm_expsv_cff; + u_int32 const_ipred; + int32 chr_qp_offset; + u_int32 intra_mb_qp_offset; + + u_int32 h264_cabac_init_method; + u_int32 h264_cabac_init_idc; + u_int32 h264_cabac_enable; // Main and stream + + int32 alpha_c0_offset_div2; + int32 beta_offset_div2; + + u_int32 intra_prefresh_y0; // for setting intra limits for prog refresh. + u_int32 intra_prefresh_y1; + + u_int32 dbg_dump_rec_src; + +} MEDIAIP_ENC_DYN_PARAMS, *pMEDIAIP_ENC_DYN_PARAMS; + +/////////////////////////////////////////// +// MEDIAIP_ENC_EXPERT_MODE_PARAM + +typedef struct +{ + MEDIAIP_ENC_CALIB_PARAMS Calib; + MEDIAIP_ENC_CONFIG_PARAMS Config; + MEDIAIP_ENC_STATIC_PARAMS Static; + MEDIAIP_ENC_DYN_PARAMS Dynamic; +} MEDIAIP_ENC_EXPERT_MODE_PARAM, *pMEDIAIP_ENC_EXPERT_MODE_PARAM; + +/////////////////////////////////////////// +// MEDIAIP_ENC_PARAM + +typedef struct +{ + MEDIAIP_ENC_FMT eCodecMode; + MEDIAIP_ENC_PROFILE eProfile; + + u_int32 uMemChunkAddr; + u_int32 uMemChunkSize; + + u_int32 uFrameRate; + u_int32 uSrcStride; + u_int32 uSrcWidth; + u_int32 uSrcHeight; + u_int32 uSrcOffset_x; + u_int32 uSrcOffset_y; + u_int32 uSrcCropWidth; + u_int32 uSrcCropHeight; + u_int32 uOutWidth; + u_int32 uOutHeight; + u_int32 uIFrameInterval; + u_int32 uGopBLength; + u_int32 uLowLatencyMode; + + MEDIAIP_ENC_BITRATE_MODE eBitRateMode; + u_int32 uTargetBitrate; + u_int32 uMaxBitRate; + u_int32 uMinBitRate; + u_int32 uInitSliceQP; + +} MEDIAIP_ENC_PARAM, *pMEDIAIP_ENC_PARAM; + +#endif /* _MEDIAIP_FW_TYPES_H_ */ + +/* End of File */ |