summaryrefslogtreecommitdiff
path: root/drivers/mxc/vpu-malone/Malone_Firmware/Incl/mediaip_fw_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mxc/vpu-malone/Malone_Firmware/Incl/mediaip_fw_types.h')
-rwxr-xr-xdrivers/mxc/vpu-malone/Malone_Firmware/Incl/mediaip_fw_types.h1991
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 */