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@intel.com>
27 *    Zeng Li <zeng.li@intel.com>
28 *    Edward Lin <edward.lin@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 ****************/
63typedef 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
70typedef 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
118typedef 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 ****************/
167typedef 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
192typedef 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
205typedef  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
214typedef 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 */
230typedef 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
240struct 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
479typedef 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
486VAStatus 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
492void tng_DestroyContext(
493    object_context_p obj_context,
494    unsigned char is_JPEG);
495
496VAStatus tng_BeginPicture(context_ENC_p ctx);
497VAStatus tng_EndPicture(context_ENC_p ctx);
498
499void 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
504VAStatus 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
513VAStatus tng_RenderPictureParameter(context_ENC_p ctx);
514void tng__setup_enc_profile_features(context_ENC_p ctx, IMG_UINT32 ui32EncProfile);
515VAStatus tng__patch_hw_profile(context_ENC_p ctx);
516void tng_reset_encoder_params(context_ENC_p ctx);
517unsigned int tng__get_ipe_control(IMG_CODEC  eEncodingFormat);
518void tng__UpdateRCBitsTransmitted(context_ENC_p ctx);
519void tng__trace_in_params(IMG_MTX_VIDEO_CONTEXT* psMtxEncCtx);
520void tng__trace_mtx_context(IMG_MTX_VIDEO_CONTEXT* psMtxEncCtx);
521VAStatus 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