Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
      3  * Copyright (c) Imagination Technologies Limited, UK
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining a
      6  * copy of this software and associated documentation files (the
      7  * "Software"), to deal in the Software without restriction, including
      8  * without limitation the rights to use, copy, modify, merge, publish,
      9  * distribute, sub license, and/or sell copies of the Software, and to
     10  * permit persons to whom the Software is furnished to do so, subject to
     11  * the following conditions:
     12  *
     13  * The above copyright notice and this permission notice (including the
     14  * next paragraph) shall be included in all copies or substantial portions
     15  * of the Software.
     16  *
     17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     20  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
     21  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     22  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     23  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     24  *
     25  * Authors:
     26  *    Elaine Wang <elaine.wang (at) intel.com>
     27  *    Zeng Li <zeng.li (at) intel.com>
     28  *    Edward Lin <edward.lin (at) intel.com>
     29  *
     30  */
     31 #ifndef _TNG_HOSTCODE_H_
     32 #define _TNG_HOSTCODE_H_
     33 
     34 #include "img_types.h"
     35 #include "hwdefs/coreflags.h"
     36 #include "psb_drv_video.h"
     37 #include "psb_surface.h"
     38 #include "tng_cmdbuf.h"
     39 #include "tng_hostdefs.h"
     40 #include "tng_hostheader.h"
     41 #include "tng_jpegES.h"
     42 #include "tng_slotorder.h"
     43 
     44 #define tng__max(a, b) ((a)> (b)) ? (a) : (b)
     45 #define tng__min(a, b) ((a) < (b)) ? (a) : (b)
     46 
     47 #define F_MASK(basename)  (MASK_##basename)
     48 #define F_SHIFT(basename) (SHIFT_##basename)
     49 #define F_ENCODE(val,basename)  (((val)<<(F_SHIFT(basename)))&(F_MASK(basename)))
     50 #define F_EXTRACT(val,basename) (((val)&(F_MASK(basename)))>>(F_SHIFT(basename)))
     51 #define F_INSERT(word,val,basename) (((word)&~(F_MASK(basename))) | (F_ENCODE((val),basename)))
     52 
     53 #define COMM_CMD_DATA_BUF_NUM   (20)
     54 #define TOPAZHP_MAX_HIGHCMD_DATASIZE    256
     55 #define COMM_CMD_DATA_BUF_SIZE  (TOPAZHP_MAX_HIGHCMD_DATASIZE)
     56 #define COMM_WB_DATA_BUF_SIZE          (64)
     57 
     58 #define COMM_CMD_CODED_BUF_NUM     (4)
     59 #define COMM_CMD_FRAME_BUF_NUM     (16)
     60 #define COMM_CMD_PICMGMT_BUF_NUM (4)
     61 
     62 /**************** command buffer count ****************/
     63 typedef struct context_ENC_cmdbuf_s {
     64     unsigned int ui32LowCmdCount;           //!< count of low-priority commands sent to TOPAZ
     65     unsigned int ui32HighCmdCount;          //!< count of high-priority commands sent to TOPAZ
     66     unsigned int ui32HighWBReceived;        //!< count of high-priority commands received from TOPAZ
     67     unsigned int ui32LastSync;                    //!< Last sync value sent
     68 } context_ENC_cmdbuf;
     69 
     70 typedef struct context_ENC_mem_s {
     71     struct psb_buffer_s bufs_mtx_context;
     72     struct psb_buffer_s bufs_seq_header; //pSeqHeaderMem //!< Partially coded Sequence header
     73     struct psb_buffer_s bufs_sub_seq_header; //pSubSetSeqHeaderMem //!< Partially coded Subset sequence header for H264 mvc
     74     struct psb_buffer_s bufs_sei_header;  //pAUDHeaderMem + pSEIBufferingPeriodHeaderMem + pSEIPictureTimingHeaderMem
     75     struct psb_buffer_s bufs_pic_template;  //+ apPicHdrTemplateMem[4]
     76     struct psb_buffer_s bufs_slice_template; //apSliceParamsTemplateMem[NUM_SLICE_TYPES];
     77     struct psb_buffer_s bufs_lowpower_params;
     78 
     79     struct psb_buffer_s bufs_above_params;  //psAboveParams[TOPAZHP_NUM_PIPES] //!< Picture level parameters (supplied by driver)
     80     struct psb_buffer_s bufs_recon_pictures;  //apsReconPictures[MAX_PIC_NODES_ARRAYSIZE];// three reference pictures (2 input and 1 output)
     81     struct psb_buffer_s bufs_colocated;  //apsColocated[MAX_PIC_NODES_ARRAYSIZE];// three colocated vector stores (2 input and 1 output)
     82     struct psb_buffer_s bufs_mv;  //apsMV[MAX_MV_ARRAYSIZE];          // two colocated vector stores
     83     struct psb_buffer_s bufs_interview_mv;  //apsInterViewMV[2];
     84 
     85     struct psb_buffer_s bufs_src_phy_addr;   //apSrcPhysAddr;
     86 
     87     // WEIGHTED PREDICTION
     88     struct psb_buffer_s bufs_weighted_prediction;  //apsWeightedPredictionMem[MAX_SOURCE_SLOTS_SL];
     89     struct psb_buffer_s bufs_flat_gop;  //pFlatGopStruct;        //!< Flat MiniGop structure
     90     struct psb_buffer_s bufs_hierar_gop;  //pHierarGopStruct; //!< Hierarchical MiniGop structure
     91 
     92 #ifdef LTREFHEADER
     93     struct psb_buffer_s bufs_lt_ref_header;  //pLtRefHeader[MAX_SOURCE_SLOTS_SL];
     94 #endif
     95 
     96     struct psb_buffer_s bufs_custom_quant;
     97     struct psb_buffer_s bufs_slice_map;  //IMG_BUFFER* apsSliceMap[MAX_SOURCE_SLOTS_SL];  //!< Slice map of the source picture
     98 
     99     /*  | MVSetingsB0 | MVSetingsB1 | ... | MVSetings Bn |  */
    100     struct psb_buffer_s bufs_mv_setting_btable;  //pMVSettingsBTable;// three colocated vector stores (2 input and 1 output)
    101     struct psb_buffer_s bufs_mv_setting_hierar;  //pMVSettingsHierarchical;
    102     struct psb_buffer_s bufs_recon_buffer;  //psReconBuffer;
    103     struct psb_buffer_s bufs_patch_recon_buffer;  //psPatchedReconBuffer;
    104 
    105     struct psb_buffer_s bufs_first_pass_out_params; //sFirstPassOutParamBuf[MAX_SOURCE_SLOTS_SL]; //!< Output Parameters of the First Pass
    106 #ifndef EXCLUDE_BEST_MP_DECISION_DATA
    107     struct psb_buffer_s bufs_first_pass_out_best_multipass_param; //sFirstPassOutBestMultipassParamBuf[MAX_SOURCE_SLOTS_SL]; //!< Output Selectable Best MV Parameters of the First Pass
    108 #endif
    109     struct psb_buffer_s bufs_mb_ctrl_in_params;      //sMBCtrlInParamsBuf[MAX_SOURCE_SLOTS_SL]; //!< Input Parameters to the second pass
    110 
    111     struct psb_buffer_s bufs_ref_frames;
    112 
    113     //defined for dual-stream
    114     struct psb_buffer_s bufs_lowpower_data;
    115     struct psb_buffer_s bufs_lowpower_reg;
    116 } context_ENC_mem;
    117 
    118 typedef struct context_ENC_mem_size_s {
    119     IMG_UINT32 mtx_context;
    120     IMG_UINT32 seq_header;       //pSeqHeaderMem //!< Partially coded Sequence header
    121                                                  //+ pSubSetSeqHeaderMem //!< Partially coded Subset sequence header for H264 mvc
    122     IMG_UINT32 sei_header;        //pAUDHeaderMem + pSEIBufferingPeriodHeaderMem + pSEIPictureTimingHeaderMem
    123     IMG_UINT32 pic_template;      //+ apPicHdrTemplateMem[4]
    124     IMG_UINT32 slice_template;    //apSliceParamsTemplateMem[NUM_SLICE_TYPES];
    125     IMG_UINT32 writeback;
    126 
    127     IMG_UINT32 above_params;  //psAboveParams[TOPAZHP_NUM_PIPES] //!< Picture level parameters (supplied by driver)
    128     IMG_UINT32 recon_pictures;  //apsReconPictures[MAX_PIC_NODES_ARRAYSIZE];// three reference pictures (2 input and 1 output)
    129     IMG_UINT32 colocated;          //apsColocated[MAX_PIC_NODES_ARRAYSIZE];// three colocated vector stores (2 input and 1 output)
    130     IMG_UINT32 mv;                   //apsMV[MAX_MV_ARRAYSIZE];          // two colocated vector stores
    131     IMG_UINT32 interview_mv;    //apsInterViewMV[2];
    132 
    133     IMG_UINT32 src_phy_addr;   //apSrcPhysAddr;
    134 
    135     // WEIGHTED PREDICTION
    136     IMG_UINT32 weighted_prediction;  //apsWeightedPredictionMem[MAX_SOURCE_SLOTS_SL];
    137     IMG_UINT32 flat_gop;  //pFlatGopStruct;        //!< Flat MiniGop structure
    138     IMG_UINT32 hierar_gop;  //pHierarGopStruct; //!< Hierarchical MiniGop structure
    139 
    140 #ifdef LTREFHEADER
    141     IMG_UINT32 lt_ref_header;  //pLtRefHeader[MAX_SOURCE_SLOTS_SL];
    142 #endif
    143 
    144     IMG_UINT32 custom_quant;
    145     IMG_UINT32 slice_map;  //IMG_BUFFER* apsSliceMap[MAX_SOURCE_SLOTS_SL];  //!< Slice map of the source picture
    146 
    147     /*  | MVSetingsB0 | MVSetingsB1 | ... | MVSetings Bn |  */
    148     IMG_UINT32 mv_setting_btable;  //pMVSettingsBTable;// three colocated vector stores (2 input and 1 output)
    149     IMG_UINT32 mv_setting_hierar;  //pMVSettingsHierarchical;
    150     IMG_UINT32 recon_buffer;  //psReconBuffer;
    151     IMG_UINT32 patch_recon_buffer;  //psPatchedReconBuffer;
    152     IMG_UINT32 first_pass_out_params; //!< Output Parameters of the First Pass
    153 #ifndef EXCLUDE_BEST_MP_DECISION_DATA
    154     IMG_UINT32 first_pass_out_best_multipass_param;//!< Output Selectable Best MV Parameters of the First Pass
    155 #endif
    156     IMG_UINT32 mb_ctrl_in_params;
    157 
    158     //defined for dual-stream
    159     IMG_UINT32 lowpower_params;
    160     IMG_UINT32 lowpower_data;
    161 /****************************************/
    162     IMG_UINT32 coded_buf;
    163 
    164 } context_ENC_mem_size;
    165 
    166 /**************** surface buffer infor ****************/
    167 typedef struct context_ENC_frame_buf_s {
    168     object_surface_p  src_surface;
    169     object_surface_p  rec_surface;
    170 #ifdef _TNG_FRAMES_
    171     object_surface_p  ref_surface;
    172     object_surface_p  ref_surface1;
    173 #else
    174     object_surface_p  ref_surface[16];
    175 #endif
    176     object_buffer_p   coded_buf;
    177 
    178     IMG_UINT8         ui8SourceSlotReserved;
    179     IMG_UINT8         ui8CodedSlotReserved;
    180 
    181     // save previous settings
    182     object_surface_p    previous_src_surface;
    183     object_surface_p    previous_ref_surface;
    184     object_surface_p    previous_dest_surface; /* reconstructed surface */
    185     object_buffer_p     previous_coded_buf;
    186     object_buffer_p     pprevious_coded_buf;
    187 
    188     IMG_UINT16  ui16BufferStride;  //!< input buffer stride
    189     IMG_UINT16  ui16BufferHeight;  //!< input buffer width
    190 } context_ENC_frame_buf;
    191 
    192 typedef struct CARC_PARAMS_s
    193 {
    194     IMG_BOOL    bCARC;
    195     IMG_INT32   i32CARCBaseline;
    196     IMG_UINT32  ui32CARCThreshold;
    197     IMG_UINT32  ui32CARCCutoff;
    198     IMG_UINT32  ui32CARCNegRange;
    199     IMG_UINT32  ui32CARCNegScale;
    200     IMG_UINT32  ui32CARCPosRange;
    201     IMG_UINT32  ui32CARCPosScale;
    202     IMG_UINT32  ui32CARCShift;
    203 } CARC_PARAMS;
    204 
    205 typedef  struct _LOWPOWER_PARAMS {
    206     IMG_UINT32 host_context;
    207     IMG_UINT32 codec;
    208     IMG_UINT32 data_saving_buf_handle;    /*TTM buffer handle*/
    209     IMG_UINT32 data_saving_buf_size;        /*MTX RAM size - Firmware Size. Maximum value is 64K*/
    210     IMG_UINT32 reg_saving_buf_handle;      /*TTM buffer handle. One page is enough.*/
    211     IMG_UINT32 reg_saving_buf_size;
    212 } LOWPOWER_PARAMS;
    213 
    214 typedef struct _H264_PICMGMT_UP_PARAMS {
    215     IMG_INT8 updated;
    216     IMG_INT8 ref_type;
    217     IMG_INT8 gop_struct;
    218     IMG_INT8 skip_frame;
    219 
    220     IMG_INT8 eos;
    221     IMG_INT8 rc_updated;
    222     IMG_INT8 flush;
    223     IMG_INT8 quant;
    224 } H264_PICMGMT_UP_PARAMS;
    225 
    226 /*!
    227  *    \ADAPTIVE_INTRA_REFRESH_INFO_TYPE
    228  *    \brief Structure for parameters requierd for Adaptive intra refresh.
    229  */
    230 typedef struct
    231 {
    232     IMG_INT8   *pi8AIR_Table;
    233     IMG_INT32   i32NumAIRSPerFrame;
    234     IMG_INT16   i16AIRSkipCnt;
    235     IMG_UINT16  ui16AIRScanPos;
    236     IMG_INT32   i32SAD_Threshold;
    237 } ADAPTIVE_INTRA_REFRESH_INFO_TYPE;
    238 
    239 
    240 struct context_ENC_s {
    241     object_context_p obj_context; /* back reference */
    242     context_ENC_mem_size ctx_mem_size;
    243     context_ENC_frame_buf ctx_frame_buf;
    244     context_ENC_mem ctx_mem[2];
    245     context_ENC_cmdbuf ctx_cmdbuf[2];
    246     IMG_UINT32  ui32FrameCount[2];
    247 
    248     struct psb_buffer_s bufs_writeback;
    249 
    250     IMG_FRAME_TYPE eFrameType;
    251     IMG_FRAME_TYPE ePreFrameType;
    252 
    253     IMG_CODEC eCodec;
    254     CARC_PARAMS  sCARCParams;
    255     IMG_ENC_CAPS sCapsParams;
    256     IMG_ENCODE_FEATURES sEncFeatures;
    257     H264_CROP_PARAMS sCropParams;
    258     H264_VUI_PARAMS sVuiParams;
    259     FRAME_ORDER_INFO sFrameOrderInfo;
    260     // Adaptive Intra Refresh Control structure
    261     ADAPTIVE_INTRA_REFRESH_INFO_TYPE sAirInfo;
    262 
    263     IMG_UINT32  ui32RawFrameCount;
    264     IMG_UINT32  ui32HalfWayBU[NUM_SLICE_TYPES];
    265     IMG_UINT32  ui32LastPicture;
    266 
    267     IMG_UINT32  ui32CoreRev;
    268     IMG_UINT32  ui32StreamID;
    269     IMG_UINT32  ui32FCode;
    270     IMG_UINT32  ui32BasicUnit;
    271     IMG_UINT8   ui8ProfileIdc;
    272     IMG_UINT8   ui8LevelIdc;
    273     IMG_UINT8   ui8FieldCount;
    274     IMG_UINT8   ui8VPWeightedImplicitBiPred;
    275     IMG_UINT8   ui8MaxNumRefFrames;
    276     IMG_UINT8   i8CQPOffset;
    277     IMG_INT     iFineYSearchSize;
    278 
    279     IMG_UINT8   aui8CustomQuantParams4x4[6][16];
    280     IMG_UINT8   aui8CustomQuantParams8x8[2][64];
    281     IMG_UINT32  ui32CustomQuantMask;
    282 
    283     IMG_BOOL    bInsertPicHeader;
    284     IMG_UINT32  ui32PpsScalingCnt;
    285 
    286     /**************** FIXME: unknown ****************/
    287     IMG_UINT    uiCbrBufferTenths;           //TOPAZHP_DEFAULT_uiCbrBufferTenths
    288 
    289     /**************** IMG_VIDEO_PARAMS ****************/
    290     IMG_BOOL16 bVPAdaptiveRoundingDisable;
    291     IMG_INT16  ui16UseCustomScalingLists;
    292     IMG_UINT8  ui8RefSpacing;
    293     IMG_BOOL   bUseDefaultScalingList;
    294     IMG_BOOL   bEnableLossless;
    295     IMG_BOOL   bLossless8x8Prefilter;
    296     IMG_BOOL   bEnableCumulativeBiases;
    297 
    298     /*!
    299      ***********************************************************************************
    300      * Description        : Video encode context
    301      ************************************************************************************/
    302     /* stream level params */
    303     IMG_STANDARD  eStandard;                //!< Video standard
    304     IMG_UINT16  ui16SourceWidth;             //!< source frame width
    305     IMG_UINT16  ui16SourceHeight;            //!< source frame height
    306     IMG_UINT16  ui16Width;             //!< target output width
    307     IMG_UINT16  ui16FrameHeight;  //!< target output height
    308     IMG_UINT16  ui16PictureHeight;     //!< target output height
    309     IMG_UINT16  ui16BufferStride;              //!< input buffer stride
    310     IMG_UINT16  ui16BufferHeight;             //!< input buffer width
    311     IMG_UINT8   ui8FrameRate;
    312 
    313     IMG_UINT32  ui32DebugCRCs;
    314     IMG_FORMAT  eFormat;            //!< Pixel format of the source surface
    315 
    316     /* Numbers of array elements that will be allocated */
    317     IMG_INT32   i32PicNodes;
    318     IMG_INT32   i32MVStores;
    319     IMG_INT32   i32CodedBuffers;
    320 
    321     /* slice control parameters */
    322 
    323     /* per core params */
    324     PIC_PARAMS  sPicParams;  //!< Picture level parameters (supplied by driver)
    325     IMG_BOOL    bWeightedPrediction;
    326     IMG_UINT8   ui8WeightedBiPred;
    327     IMG_UINT8   ui8CustomQuantSlot;
    328 
    329     /* these values set at picture level & written in at slice */
    330     IMG_UINT32  ui32IPEControl;         //!< common bits IPE control register for entire picture
    331     IMG_UINT32  ui32PredCombControl;    //!< common bits of Predictor-combiner control register for entire picture
    332     IMG_BOOL    bCabacEnabled;          //!< FLAG to enable Cabac mode
    333     IMG_UINT32  ui32CabacBinLimit;      //!< Min Bin Limit after which the Topaz hardware would encode MB as IPCM
    334     IMG_UINT32  ui32CabacBinFlex;       //!< Max Flex-Limit, the Topaz-HW will encode MB as IPCM after (BinLimit+BinFlex)
    335 
    336     IMG_UINT32  ui32FirstPicFlags;
    337     IMG_UINT32  ui32NonFirstPicFlags;
    338 
    339     IMG_BOOL    bIsInterlaced;
    340     IMG_BOOL    bIsInterleaved;
    341     IMG_BOOL    bTopFieldFirst;
    342     IMG_BOOL    bArbitrarySO;
    343     IMG_UINT32  ui32NextSlice;
    344     IMG_UINT8   ui8SlicesPerPicture;
    345     IMG_UINT8   ui8DeblockIDC;
    346     //  We want to keep track of the basic unit size, as it is needed in deciding the number of macroblocks in a kick
    347     IMG_UINT32  ui32KickSize;
    348     IMG_UINT32  ui32VopTimeResolution;
    349     IMG_UINT32  ui32IdrPeriod;
    350     IMG_UINT32  ui32IntraCnt;
    351     IMG_UINT32  ui32IntraCntSave;
    352     IMG_BOOL    bMultiReferenceP;
    353     IMG_BOOL    bSpatialDirect;
    354     IMG_UINT8   ui8MPEG2IntraDCPrecision; // Only used in MPEG2, 2 bit field (0 = 8 bit, 1 = 9 bit, 2 = 10 bit and 3=11 bit precision). Set to zero for other encode standards.
    355 
    356     IMG_MV_SETTINGS sMVSettingsIdr;
    357     IMG_MV_SETTINGS sMVSettingsNonB[MAX_BFRAMES + 1];
    358 
    359     /*  | MVSetingsB0 | MVSetingsB1 | ... | MVSetings Bn |  */
    360     IMG_BOOL    b_is_mv_setting_hierar;
    361 
    362     // Source slots
    363     IMG_FRAME  *apsSourceSlotBuff[MAX_SOURCE_SLOTS_SL]; // Source slots
    364     IMG_UINT32 aui32SourceSlotPOC[MAX_SOURCE_SLOTS_SL]; // POCs of frames in slots
    365     IMG_UINT32 ui32pseudo_rand_seed;
    366     IMG_UINT8  ui8SlotsInUse;                           // Number of source slots used
    367     IMG_UINT8  ui8SlotsCoded;                          // Number of coded slots used
    368 
    369     IMG_BOOL   bSrcAllocInternally;                        // True for internal source frame allocation
    370 
    371     // Coded slots
    372     //IMG_CODED_BUFFER *  apsCodedSlotBuff[MAX_CODED_BUFFERS];        // Coded slots
    373     IMG_BOOL  bCodedAllocInternally;                      // True for internal coded frame allocation
    374     //IMG_CODED_BUFFER *  apsInternalCoded[MAX_CODED_BUFFERS];        // Frames placed in slots when using internal coded frame allocation
    375 
    376 
    377     IMG_UINT32  ui32FlushAtFrame;
    378     IMG_UINT32  ui32FlushedAtFrame;
    379     IMG_UINT32  ui32EncodeSent;
    380     IMG_UINT32  ui32EncodeRequested;
    381     IMG_UINT32  ui32FramesEncoded;
    382     IMG_BOOL    bEncoderIdle;       // Indicates that the encoder is waiting for data, Set to true at start of encode
    383     IMG_BOOL    bAutoEncode;
    384     IMG_BOOL    bSliceLevel;
    385     IMG_BOOL    bAborted;
    386 
    387     IMG_UINT32  ui32ReconPOC;
    388     IMG_UINT32  ui32NextRecon;
    389     IMG_UINT32  ui32BuffersStatusReg;
    390 
    391     IMG_RC_PARAMS   sRCParams;
    392     IMG_BIAS_TABLES sBiasTables;
    393     IMG_BIAS_PARAMS sBiasParams;
    394 
    395     IMG_UINT8  ui8H263SourceFormat;
    396 
    397     IMG_BOOL   bOverlapping;
    398     IMG_BOOL   bInsertSeqHeader;
    399 
    400     IMG_UINT32 ui32EncodePicProcessing;
    401     IMG_UINT8  ui8ExtraWBRetrieved;
    402 
    403     IMG_UINT8   ui8EnableSelStatsFlags;   //!< Flags to enable selective first-pass statistics gathering by the hardware. Bit 1 - First Stage Motion Search Data, Bit 2 - Best Multipass MB Decision Data, Bit 3 - Best Multipass Motion Vectors. (First stage Table 2 motion vectors are always switched on)
    404 
    405     IMG_BOOL   bEnableInpCtrl;  //!< Enable Macro-block input control
    406     IMG_BOOL   bEnableAIR;      //!< Enable Adaptive Intra Refresh
    407     IMG_BOOL   bEnableCIR;	//!< Enable Cyclic Intra Refresh
    408     IMG_INT32  i32NumAIRMBs;    //!< n = Max number of AIR MBs per frame, 0 = _ALL_ MBs over threshold will be marked as AIR Intras, -1 = Auto 10%
    409     IMG_INT32  i32AIRThreshold; //!< n = SAD Threshold above which a MB is a AIR MB candidate,  -1 = Auto adjusting threshold
    410     IMG_INT16  i16AIRSkipCnt;   //?!< n = Number of MBs to skip in AIR Table between frames, -1 = Random (0 - NumAIRMbs) skip between frames in AIR table
    411     // INPUT CONTROL
    412     IMG_UINT16 ui16IntraRefresh;
    413     IMG_INT32  i32LastCIRIndex;
    414 
    415     IMG_BOOL   bEnableHostBias;
    416     IMG_BOOL   bEnableHostQP;
    417 
    418     IMG_BOOL   bCustomScaling;
    419     IMG_BOOL   bPpsScaling;
    420     IMG_BOOL   bH2648x8Transform;
    421     IMG_BOOL   bH264IntraConstrained;
    422     IMG_UINT32 ui32VertMVLimit;
    423     IMG_BOOL16 bLimitNumVectors;
    424 //    IMG_BOOL16 bDisableBitStuffing;
    425     IMG_UINT8  ui8CodedSkippedIndex;
    426     IMG_UINT8  ui8InterIntraIndex;
    427     // SEI_INSERTION
    428     IMG_BOOL   bInsertHRDParams;
    429     //
    430     IMG_UINT32 uChunksPerMb;
    431     IMG_UINT32 uMaxChunks;
    432     IMG_UINT32 uPriorityChunks;
    433 
    434     IMG_UINT8  ui8SourceSlotReserved;
    435     IMG_UINT8  ui8CodedSlotReserved;
    436     IMG_UINT8  ui8SliceReceivedInFrame;
    437 
    438     /* Low latency stuff */
    439     IMG_UINT8  ui8ActiveCodedBuffer;
    440     IMG_UINT8  ui8BasePipe;
    441     IMG_UINT8  ui8PipesToUse;
    442     IMG_UINT32 ui32ActiveBufferBytesCoded;
    443     IMG_UINT32 ui32AcriveBufferPreviousBytes;
    444 
    445     IMG_UINT8  ui8HighestStorageNumber;
    446 
    447     IMG_BOOL   bEnableMVC;         //!< True if MVC is enabled. False by default
    448     IMG_UINT16 ui16MVCViewIdx;     //!< View Idx of this MVC view
    449     IMG_BOOL   bHighLatency;
    450     IMG_UINT32 uMBspS;
    451     IMG_BOOL   bSkipDuplicateVectors;
    452     IMG_BOOL   bNoOffscreenMv;
    453     IMG_BOOL   idr_force_flag;
    454 
    455     IMG_BOOL   bNoSequenceHeaders;
    456     IMG_BOOL   bUseFirmwareALLRC; //!< Defines if aLL RC firmware to be loaded
    457 
    458 
    459     //JPEG encode buffer sizes
    460     uint32_t jpeg_pic_params_size;
    461     uint32_t jpeg_header_mem_size;
    462     uint32_t jpeg_header_interface_mem_size;
    463 
    464     //JPEG encode context data
    465     TOPAZHP_JPEG_ENCODER_CONTEXT *jpeg_ctx;
    466 
    467     /* Save actual H263 width/height */
    468     IMG_UINT16 h263_actual_width;
    469     IMG_UINT16 h263_actual_height;
    470 
    471     uint32_t buffer_size;
    472     uint32_t initial_buffer_fullness;
    473 
    474     /* qp/maxqp/minqp/bitrate/intra_period */
    475     uint32_t rc_update_flag;
    476     IMG_UINT16 max_qp;
    477 };
    478 
    479 typedef struct context_ENC_s *context_ENC_p;
    480 
    481 #define SURFACE_INFO_SKIP_FLAG_SETTLED 0X80000000
    482 #define GET_SURFACE_INFO_skipped_flag(psb_surface) ((int) (psb_surface->extra_info[5]))
    483 #define SET_SURFACE_INFO_skipped_flag(psb_surface, value) psb_surface->extra_info[5] = (SURFACE_INFO_SKIP_FLAG_SETTLED | value)
    484 #define CLEAR_SURFACE_INFO_skipped_flag(psb_surface) psb_surface->extra_info[5] = 0
    485 
    486 VAStatus tng_CreateContext(object_context_p obj_context,
    487                            object_config_p obj_config,
    488                            unsigned char is_JPEG);
    489 
    490 //VAStatus tng_InitContext(context_ENC_p ctx);
    491 
    492 void tng_DestroyContext(
    493     object_context_p obj_context,
    494     unsigned char is_JPEG);
    495 
    496 VAStatus tng_BeginPicture(context_ENC_p ctx);
    497 VAStatus tng_EndPicture(context_ENC_p ctx);
    498 
    499 void tng_setup_slice_params(
    500     context_ENC_p  ctx, IMG_UINT16 YSliceStartPos,
    501     IMG_UINT16 SliceHeight, IMG_BOOL IsIntra,
    502     IMG_BOOL  VectorsValid, int bySliceQP);
    503 
    504 VAStatus tng__send_encode_slice_params(
    505     context_ENC_p ctx,
    506     IMG_BOOL IsIntra,
    507     IMG_UINT16 CurrentRow,
    508     IMG_UINT8  DeblockIDC,
    509     IMG_UINT32 FrameNum,
    510     IMG_UINT16 SliceHeight,
    511     IMG_UINT16 CurrentSlice);
    512 
    513 VAStatus tng_RenderPictureParameter(context_ENC_p ctx);
    514 void tng__setup_enc_profile_features(context_ENC_p ctx, IMG_UINT32 ui32EncProfile);
    515 VAStatus tng__patch_hw_profile(context_ENC_p ctx);
    516 void tng_reset_encoder_params(context_ENC_p ctx);
    517 unsigned int tng__get_ipe_control(IMG_CODEC  eEncodingFormat);
    518 void tng__UpdateRCBitsTransmitted(context_ENC_p ctx);
    519 void tng__trace_in_params(IMG_MTX_VIDEO_CONTEXT* psMtxEncCtx);
    520 void tng__trace_mtx_context(IMG_MTX_VIDEO_CONTEXT* psMtxEncCtx);
    521 VAStatus tng__alloc_init_buffer(
    522     psb_driver_data_p driver_data,
    523     unsigned int size,
    524     psb_buffer_type_t type,
    525     psb_buffer_p buf);
    526 
    527 #endif  //_TNG_HOSTCODE_H_
    528