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  *    Edward Lin <edward.lin (at) intel.com>
     27  *
     28  */
     29 #ifndef _TNG_HOSTDEFS_H_
     30 #define _TNG_HOSTDEFS_H_
     31 
     32 #include "img_types.h"
     33 #include "hwdefs/coreflags.h"
     34 
     35 #define FORCED_REFERENCE 1
     36 #define LTREFHEADER 1
     37 
     38 #define MIN_30_REV 0x00030000
     39 #define MAX_30_REV 0x00030099
     40 #define MIN_32_REV 0x00030200
     41 #define MAX_32_REV 0x00030299
     42 #define MIN_34_REV 0x00030400
     43 #define MAX_34_REV 0x00030499
     44 #define MIN_36_REV 0x00030600
     45 #define MAX_36_REV 0x00030699
     46 
     47 #define MVEA_MV_PARAM_REGION_SIZE 16
     48 #define MVEA_ABOVE_PARAM_REGION_SIZE 96
     49 
     50 #define ALIGN_64(X)  (((X)+63) &~63)
     51 #define ALIGN_4(X)  (((X)+3) &~3)
     52 
     53 #define MTX_CONTEXT_SIZE (10 * 1024)
     54 
     55 
     56 #define SHIFT_GOP_FRAMETYPE		(0)
     57 #define MASK_GOP_FRAMETYPE		(0x3 << SHIFT_GOP_FRAMETYPE)
     58 #define SHIFT_GOP_REFERENCE		(2)
     59 #define MASK_GOP_REFERENCE		(0x1 << SHIFT_GOP_REFERENCE)
     60 #define SHIFT_GOP_POS			(3)
     61 #define MASK_GOP_POS			(0x1f << SHIFT_GOP_POS)
     62 #define SHIFT_GOP_LEVEL			(4)
     63 #define MASK_GOP_LEVEL			(0xF << SHIFT_GOP_LEVEL)
     64 #define SHIFT_GOP_REF0			(0 + 8)
     65 #define MASK_GOP_REF0			(0xf << SHIFT_GOP_REF0)
     66 #define SHIFT_GOP_REF1			(4 + 8)
     67 #define MASK_GOP_REF1			(0xf << SHIFT_GOP_REF1)
     68 /**********************************************************************************************************/
     69 
     70 #define MTX_CMDID_PRIORITY 0x80
     71 #define MV_ROW_STRIDE ((sizeof(IMG_MV_SETTINGS) * MAX_BFRAMES + 63) & ~63)
     72 #define MV_OFFSET_IN_TABLE(BDistance, Position) ((BDistance) * MV_ROW_STRIDE + (Position) * sizeof(IMG_MV_SETTINGS))
     73 
     74 //Edward FIXME
     75 #define MAX_GOP_SIZE    (MAX_BFRAMES + 1)
     76 #define MV_ROW_STRIDE ((sizeof(IMG_MV_SETTINGS) * MAX_BFRAMES + 63) & ~63)
     77 #define MV_ROW2 ((MAX_BFRAMES) * (MAX_BFRAMES) + 1)
     78 
     79 /* Specific to Standard Latency */
     80 
     81 //details   Sizes for arrays that depend on reference usage pattern
     82 //brief      Reference usage
     83 #define MAX_REF_B_LEVELS       3
     84 #define MAX_REF_SPACING        1
     85 #define MAX_REF_I_OR_P_LEVELS  (MAX_REF_SPACING + 2)
     86 #define MAX_REF_LEVELS         (MAX_REF_B_LEVELS + MAX_REF_I_OR_P_LEVELS)
     87 #define MAX_PIC_NODES          (MAX_REF_LEVELS + 2)
     88 #define MAX_MV                 (MAX_PIC_NODES * 2)
     89 
     90 #define MAX_BFRAMES            7
     91 #define MAX_GOP_SIZE           (MAX_BFRAMES + 1)
     92 #define MAX_SOURCE_SLOTS_SL    (MAX_GOP_SIZE + 1)
     93 
     94 
     95 //brief      WB FIFO
     96 #define LOG2_WB_FIFO_SIZE      ( 5 )
     97 
     98 #define WB_FIFO_SIZE           ( 1 << (LOG2_WB_FIFO_SIZE) )
     99 
    100 #define SHIFT_WB_PRODUCER      ( 0 )
    101 #define MASK_WB_PRODUCER       ( ((1 << LOG2_WB_FIFO_SIZE) - 1) << SHIFT_WB_PRODUCER )
    102 
    103 #define SHIFT_WB_CONSUMER      ( 0 )
    104 #define MASK_WB_CONSUMER       ( ((1 << LOG2_WB_FIFO_SIZE) - 1) << SHIFT_WB_CONSUMER )
    105 
    106 /*****************************************************************************/
    107 #define SCALE_TBL_SZ            (8)
    108 #define TOPAZHP_NUM_PIPES       (2)
    109 #define TNG_HEADER_SIZE         (128)
    110 #define NUM_SLICE_TYPES         (5)
    111 /*****************************************************************************/
    112 #define SHIFT_MTX_MSG_CMD_ID          (0)
    113 #define MASK_MTX_MSG_CMD_ID           (0x7f << SHIFT_MTX_MSG_CMD_ID)
    114 #define SHIFT_MTX_MSG_PRIORITY        (7)
    115 #define MASK_MTX_MSG_PRIORITY         (0x1 << SHIFT_MTX_MSG_PRIORITY)
    116 #define SHIFT_MTX_MSG_CORE            (8)
    117 #define MASK_MTX_MSG_CORE             (0xff << SHIFT_MTX_MSG_CORE)
    118 #define SHIFT_MTX_MSG_COUNT           (16)
    119 #define MASK_MTX_MSG_COUNT            (0xffff << SHIFT_MTX_MSG_COUNT)
    120 #define SHIFT_MTX_MSG_MESSAGE_ID      (16)
    121 #define MASK_MTX_MSG_MESSAGE_ID       (0xff << SHIFT_MTX_MSG_MESSAGE_ID)
    122 /*****************************************************************************/
    123 #define SHIFT_MTX_MSG_PICMGMT_SUBTYPE           (0)
    124 #define MASK_MTX_MSG_PICMGMT_SUBTYPE            (0xff << SHIFT_MTX_MSG_PICMGMT_SUBTYPE)
    125 #define SHIFT_MTX_MSG_PICMGMT_DATA              (8)
    126 #define MASK_MTX_MSG_PICMGMT_DATA               (0xffffff << SHIFT_MTX_MSG_PICMGMT_DATA)
    127 
    128 #define SHIFT_MTX_MSG_RC_UPDATE_QP              (0)
    129 #define MASK_MTX_MSG_RC_UPDATE_QP               (0x3f << SHIFT_MTX_MSG_RC_UPDATE_QP)
    130 #define SHIFT_MTX_MSG_RC_UPDATE_BITRATE         (6)
    131 #define MASK_MTX_MSG_RC_UPDATE_BITRATE          (0x03ffffff << SHIFT_MTX_MSG_RC_UPDATE_BITRATE)
    132 
    133 #define SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_USE    (0)
    134 #define MASK_MTX_MSG_PROVIDE_REF_BUFFER_USE     (0xff << SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_USE)
    135 #define SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_SLOT   (8)
    136 #define MASK_MTX_MSG_PROVIDE_REF_BUFFER_SLOT    (0xff << SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_SLOT)
    137 #define SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_LT     (16)
    138 #define MASK_MTX_MSG_PROVIDE_REF_BUFFER_LT      (0xff << SHIFT_MTX_MSG_PROVIDE_REF_BUFFER_LT)
    139 
    140 #define SHIFT_MTX_MSG_PROVIDE_CODED_BUFFER_SLOT (0)
    141 #define MASK_MTX_MSG_PROVIDE_CODED_BUFFER_SLOT  (0x0f << SHIFT_MTX_MSG_PROVIDE_CODED_BUFFER_SLOT)
    142 #define SHIFT_MTX_MSG_PROVIDE_CODED_BUFFER_SIZE (4)
    143 #define MASK_MTX_MSG_PROVIDE_CODED_BUFFER_SIZE  (0x0fffffff << SHIFT_MTX_MSG_PROVIDE_CODED_BUFFER_SLOT)
    144 
    145 #define SHIFT_MTX_MSG_RC_UPDATE_MIN_QP                  (0)
    146 #define MASK_MTX_MSG_RC_UPDATE_MIN_QP                   (0x3f << SHIFT_MTX_MSG_RC_UPDATE_MIN_QP)
    147 #define SHIFT_MTX_MSG_RC_UPDATE_MAX_QP                  (6)
    148 #define MASK_MTX_MSG_RC_UPDATE_MAX_QP                   (0x3f << SHIFT_MTX_MSG_RC_UPDATE_MAX_QP)
    149 #define SHIFT_MTX_MSG_RC_UPDATE_INTRA                   (12)
    150 #define MASK_MTX_MSG_RC_UPDATE_INTRA                    (0xffff << SHIFT_MTX_MSG_RC_UPDATE_INTRA)
    151 
    152 #define RC_MASK_frame_width        (1<<0)
    153 #define RC_MASK_frame_height       (1<<1)
    154 #define RC_MASK_bits_per_second    (1<<2)
    155 #define RC_MASK_target_percentage  (1<<3)
    156 #define RC_MASK_window_size        (1<<4)
    157 #define RC_MASK_initial_qp         (1<<5)
    158 #define RC_MASK_min_qp             (1<<6)
    159 #define RC_MASK_force_kf           (1<<7)
    160 #define RC_MASK_no_ref_last        (1<<8)
    161 #define RC_MASK_no_ref_gf          (1<<9)
    162 #define RC_MASK_no_ref_arf         (1<<10)
    163 #define RC_MASK_frame_rate         (1<<11)
    164 #define RC_MASK_intra_period       (1<<12)
    165 #define RC_MASK_intra_idr_period   (1<<13)
    166 #define RC_MASK_ip_period          (1<<14)
    167 #define RC_MASK_quality            (1<<15)
    168 #define RC_MASK_refresh_entropy_probs    (1<<16)
    169 #define RC_MASK_copy_buffer_to_golden    (1<<17)
    170 #define RC_MASK_copy_buffer_to_alternate (1<<18)
    171 #define RC_MASK_refresh_last             (1<<19)
    172 #define RC_MASK_refresh_golden_frame     (1<<20)
    173 #define RC_MASK_refresh_alternate_frame  (1<<21)
    174 #define RC_MASK_max_qp             (1<<22)
    175 
    176 /*!
    177  *****************************************************************************
    178  *
    179  * @details
    180  *
    181  * Enum describing Command IDs.  Some commands require data to be DMA'd in
    182  * from the Host, with the base address of the data specified in the Command
    183  * Data Address word of the command.  The data required is specified with each
    184  * command type.
    185  *
    186  * @brief          Command IDs
    187  *
    188  ****************************************************************************/
    189 typedef enum {
    190 	// Common Commands
    191     MTX_CMDID_NULL,                   //!< (no data)\n Null command does nothing\n
    192     MTX_CMDID_SHUTDOWN,               //!< (no data)\n shutdown the MTX\n
    193 
    194     // Video Commands
    195     MTX_CMDID_DO_HEADER,              //!< (extra data: #MTX_HEADER_PARAMS)\n Command for Sequence, Picture and Slice headers\n
    196     MTX_CMDID_ENCODE_FRAME,           //!< (no data)\n Encode frame data\n
    197     MTX_CMDID_START_FRAME,            //!< (no data)\n Prepare to encode frame\n
    198     MTX_CMDID_ENCODE_SLICE,           //!< (no data)\n Encode slice data\n
    199     MTX_CMDID_END_FRAME,              //!< (no data)\n Complete frame encoding\n
    200     MTX_CMDID_SETVIDEO,               //!< (data: pipe number, extra data: #IMG_MTX_VIDEO_CONTEXT)\n Set MTX Video Context\n
    201     MTX_CMDID_GETVIDEO,               //!< (data: pipe number, extra data: #IMG_MTX_VIDEO_CONTEXT)\n Get MTX Video Context\n
    202     MTX_CMDID_DO_CHANGE_PIPEWORK,     //!< (data: new pipe allocations for the context)\n Change pipe allocation for a Video Context\n
    203     MTX_CMDID_PICMGMT,                //!< (data: subtype and parameters, extra data: #IMG_PICMGMT_CUSTOM_QUANT_DATA (optional))\n Change encoding parameters\n
    204     MTX_CMDID_RC_UPDATE,              //!< (data: QP and bitrate)\n Change encoding parameters\n
    205     MTX_CMDID_PROVIDE_SOURCE_BUFFER,  //!< (extra data: #IMG_SOURCE_BUFFER_PARAMS)\n Transfer source buffer from host\n
    206     MTX_CMDID_PROVIDE_REF_BUFFER,     //!< (data: buffer parameters, extra data: reference buffer)\n Transfer reference buffer from host\n
    207     MTX_CMDID_PROVIDE_CODED_BUFFER,   //!< (data: slot and size, extra data: coded buffer)\n Transfer output buffer from host\n
    208     MTX_CMDID_ABORT,                  //!< (no data)\n Stop encoding and release all buffers\n
    209 
    210     // JPEG commands
    211     MTX_CMDID_SETQUANT,	             //!< (extra data: #JPEG_MTX_QUANT_TABLE)\n
    212     MTX_CMDID_SETUP_INTERFACE,       //!< (extra data: #JPEG WRITEBACK POINTERS)\n
    213     MTX_CMDID_ISSUEBUFF,             //!< (extra data: #MTX_ISSUE_BUFFERS)\n
    214     MTX_CMDID_SETUP,                 //!< (extra data: #JPEG_MTX_DMA_SETUP)\n\n
    215 
    216     MTX_CMDID_ENDMARKER,             //!< end marker for enum
    217 
    218     /* SW Commands */
    219     MTX_CMDID_PAD = 0x7a,           //!< Will be ignored by kernel
    220     MTX_CMDID_SW_WRITEREG = 0x7b,
    221     MTX_CMDID_SW_LEAVE_LOWPOWER = 0x7c,
    222     MTX_CMDID_SW_ENTER_LOWPOWER = 0x7e,
    223     MTX_CMDID_SW_NEW_CODEC = 0x7f,
    224     MTX_CMDID_SW_FILL_INPUT_CTRL = 0x81,
    225     MTX_CMDID_SW_UPDATE_AIR_SEND = 0x82,
    226     MTX_CMDID_SW_AIR_BUF_CLEAR = 0x83,
    227     MTX_CMDID_SW_UPDATE_AIR_CALC = 0x84
    228 } tng_MTX_CMD_ID;
    229 
    230 
    231 /*!
    232  *****************************************************************************
    233  * @details    Enum describing MTX firmware version (codec and rate control)
    234  * @brief          Firmware version
    235  ****************************************************************************/
    236 typedef enum
    237 {
    238     IMG_CODEC_JPEG = 0,    /* !< JPEG */
    239     IMG_CODEC_H264_NO_RC,  /* !< H264 with no rate control */
    240     IMG_CODEC_H264_VBR,    /* !< H264 variable bitrate */
    241     IMG_CODEC_H264_CBR,    /* !< H264 constant bitrate */
    242     IMG_CODEC_H264_VCM,    /* !< H264 video conferance mode */
    243     IMG_CODEC_H264_LLRC,   /* !< H264 low-latency rate control */
    244     IMG_CODEC_H264_ALL_RC, /* !< H264 with multiple rate control modes */
    245     IMG_CODEC_H263_NO_RC,  /* !< H263 with no rate control */
    246     IMG_CODEC_H263_VBR,    /* !< H263 variable bitrate */
    247     IMG_CODEC_H263_CBR,    /* !< H263 constant bitrate */
    248     IMG_CODEC_MPEG4_NO_RC, /* !< MPEG4 with no rate control */
    249     IMG_CODEC_MPEG4_VBR,   /* !< MPEG4 variable bitrate */
    250     IMG_CODEC_MPEG4_CBR,   /* !< MPEG4 constant bitrate */
    251     IMG_CODEC_MPEG2_NO_RC, /* !< MPEG2 with no rate control */
    252     IMG_CODEC_MPEG2_VBR,   /* !< MPEG2 variable bitrate */
    253     IMG_CODEC_MPEG2_CBR,   /* !< MPEG2 constant bitrate */
    254     IMG_CODEC_H264MVC_NO_RC, /* !< MVC H264 with no rate control */
    255     IMG_CODEC_H264MVC_CBR, /* !< MVC H264 constant bitrate */
    256     IMG_CODEC_H264MVC_VBR, /* !< MVC H264 variable bitrate */
    257     IMG_CODEC_NUM
    258 } IMG_CODEC;
    259 
    260 /*!
    261  *****************************************************************************
    262  * @details    Enum describing encoding standard (codec)
    263  * @brief          Encoding standard
    264  ****************************************************************************/
    265 typedef enum
    266 {
    267     IMG_STANDARD_NONE = 0,   //!< There is no FW in MTX memory
    268     IMG_STANDARD_JPEG,       //!< JPEG
    269     IMG_STANDARD_H264,       //!< H264 with no rate control
    270     IMG_STANDARD_H263,       //!< H263 with no rate control
    271     IMG_STANDARD_MPEG4,      //!< MPEG4 with no rate control
    272     IMG_STANDARD_MPEG2       //!< MPEG2 with no rate control
    273 } IMG_STANDARD;
    274 
    275 /*!
    276  *****************************************************************************
    277  * @details    Enum describing image surface format types
    278  * @brief          Image surface format
    279  ****************************************************************************/
    280 typedef enum
    281 {
    282     IMG_CODEC_YUV,                  //!< Planar Y U V
    283     IMG_CODEC_YV12,                 //!< YV12 format Data
    284     IMG_CODEC_IMC2,                 //!< IMC2 format Data
    285     IMG_CODEC_PL8,                   //!< PL8 format YUV data
    286     IMG_CODEC_PL12,                 //!< PL12 format YUV data
    287     IMG_CODEC_422_YUV,           //!< YUV format 422 data
    288     IMG_CODEC_422_YV12,          //!< YV12 format 422 data
    289     IMG_CODEC_422_PL8,            //!< PL8 format 422 data
    290     IMG_CODEC_422_IMC2,          //!< PL8 format 422 data
    291     IMG_CODEC_422_PL12,          //!< PL12 format 422 data
    292     IMG_CODEC_Y0UY1V_8888,   //!< 422 YUYV data
    293     IMG_CODEC_Y0VY1U_8888,   //!< 422 YVYU data
    294     IMG_CODEC_UY0VY1_8888,   //!< 422 UYVY data
    295     IMG_CODEC_VY0UY1_8888,   //!< 422 VYUY data
    296     PVR_SURF_UNSPECIFIED      //!< End of the enum
    297 } IMG_FORMAT;
    298 
    299 /*****************************************************************************
    300  * @details    Structure describing coded header data returned by the firmware.
    301  *             The size of the structure should not be more than 48-bytes
    302  *              (i.e. CODED_BUFFER_HEADER_SIZE)
    303  * @brief      Coded header structure
    304  ****************************************************************************/
    305 typedef struct
    306 {
    307     IMG_UINT32  ui32BytesWritten;   //!< Bytes in this coded buffer excluding this header
    308     IMG_UINT32  ui32Feedback;       //!< Feedback word for this coded buffers
    309     IMG_UINT32  ui32ExtraFeedback;  //!< Extra feedback word for this coded buffers
    310     IMG_UINT32  ui32HostCtx;            //!< Host context value
    311 
    312     IMG_UINT16  ui16_I_MbCnt;       //!< Number of MBs coded as I-macroblocks in this slice
    313     IMG_UINT16  ui16_P_MbCnt;       //!< Number of MBs coded as P-macroblocks in this slice
    314 
    315     IMG_UINT16  ui16_B_MbCnt;       //!< Number of MBs coded as B-macroblocks in this slice
    316     IMG_UINT16  ui16_Skip_MbCnt;    //!< Number of MBs coded as skipped in this slice
    317 
    318     IMG_UINT16  ui16_IPCM_MbCnt;    //!< Number of macroblocks coded as IPCM in this slice
    319     IMG_UINT8  ui8_InterSumSatdHi;    //!< High 8 bits for the inter sum satd
    320     IMG_UINT8  ui8_IntraSumSatdHi;    //!< High 8 bits for the intra sum satd
    321 
    322     IMG_UINT32  ui32_DC_Bits;       //!< Number of bits use for coding DC coefficients in this slice
    323     IMG_UINT32  ui32_MV_Bits;       //!< Number of bits used for coding all Motion vector data in this slice
    324     IMG_UINT32  ui32_Symbols_Bits;  //!< Number of bits used for coding all MB level symbols in this slice
    325     IMG_UINT32  ui32_Residual_Bits; //!< Number of bits used for coding residual data in all MBs in this slice
    326 
    327     IMG_UINT32  ui32_QpyInter;      //!< Sum of QPy/Qscale for all Inter-MBs in the slice
    328     IMG_UINT32  ui32_QpyIntra;      //!< Sum of QPy/Qscale for all Intra-MBs in the slice
    329     IMG_UINT32  ui32_InterSumSatd;  //!< Sum of SATD for all Inter-MBs in the slice
    330     IMG_UINT32  ui32_IntraSumSatd;  //!< Sum of SATD for all Intra-MBs in the slice
    331     IMG_UINT32  ui32_MVOutputIndex; //!< Index into the motion vector buffers for this frame
    332 } CODED_DATA_HDR, *P_CODED_DATA_HDR;
    333 
    334 /*!
    335  ************************************************************
    336  *
    337  * @details     Mask defines for the -ui8EnableSelStatsFlags variable
    338  *
    339  * @brief       Selectable first pass and multipass statistics flag values
    340  *
    341  *************************************************************/
    342 #define ESF_FIRST_STAGE_STATS 1
    343 #define ESF_MP_BEST_MB_DECISION_STATS 2
    344 #define ESF_MP_BEST_MOTION_VECTOR_STATS 4
    345 
    346 /*!
    347 ******************************************************************************
    348  @details    Struct describing Bias parameters
    349  @brief          Bias parameters
    350 ******************************************************************************/
    351 typedef struct tag_IMG_BIAS_PARAMS {
    352     IMG_UINT32      uLambdaSAD;
    353     IMG_UINT32      uLambdaSATD;
    354     IMG_UINT32      uLambdaSATDTable;
    355 
    356 
    357     IMG_UINT32      uIPESkipVecBias;
    358     IMG_UINT32      uDirectVecBias;
    359     IMG_UINT32      uSPESkipVecBias;
    360 
    361     IMG_UINT32  uisz1;
    362     IMG_UINT32  uisz2;
    363 
    364     IMG_INT32 uzb4;
    365     IMG_INT32 uzb8;
    366 
    367     IMG_UINT32  uTHInter;
    368     IMG_UINT32  uTHInterQP;
    369     IMG_UINT32  uTHInterMaxLevel;
    370     IMG_UINT32  uTHSkipIPE;
    371     IMG_UINT32  uTHSkipSPE;
    372 
    373     IMG_UINT32       iIntra16Bias;
    374     IMG_UINT32       iInterMBBias;
    375     IMG_UINT32       iInterMBBiasB;
    376 
    377     IMG_BOOL16      bRCEnable;
    378     IMG_BOOL16      bRCBiases;
    379     IMG_BOOL16      bZeroDetectionDisable;
    380 
    381 } IMG_BIAS_PARAMS;
    382 
    383 #define TOPAZ_PIC_PARAMS_VERBOSE 0
    384 
    385 #define MAX_SLICES_PER_PICTURE 72
    386 #define MAX_TOPAZ_CORES        4
    387 #define MAX_TOPAZ_CMD_COUNT    (0x1000)
    388 
    389 #define MAX_NUM_CORES 2
    390 
    391 /* defines used for the second 32 bit word of the coded data header */
    392 /* The peak bitrate was exceeded for this frame */
    393 #define RC_STATUS_FLAG_BITRATE_OVERFLOW 0x00000080
    394 /* At least one slice in this frame was larger than the slice limit */
    395 #define RC_STATUS_FLAG_SLICE_OVERFLOW   0x00000040
    396 /* At least one slice in this frame was large enough for the firmware to try to reduce it by increasing Qp or skipping MBs */
    397 #define RC_STATUS_FLAG_LARGE_SLICE           0x00000020
    398 #define SKIP_NEXT_FRAME                 0x800   /* The next frame should be skipped */
    399 
    400 typedef enum _WEIGHTED_BIPRED_IDC_ {
    401     WBI_NONE = 0x0,
    402     WBI_EXPLICIT,
    403     WBI_IMPLICIT
    404 } WEIGHTED_BIPRED_IDC;
    405 
    406 typedef enum _IMG_RCMODE_ {
    407     IMG_RCMODE_NONE = 0,
    408     IMG_RCMODE_CBR,
    409     IMG_RCMODE_VBR,
    410     IMG_RCMODE_ERC, //Example Rate Control
    411     IMG_RCMODE_VCM
    412 } IMG_RCMODE;
    413 
    414 /*!
    415 *****************************************************************************
    416 @details    Struct describing rate control params
    417 @brief          Rate control parameters
    418 ****************************************************************************/
    419 typedef struct _RC_PARAMS_ {
    420     IMG_UINT32  ui32BitsPerSecond;  //!< Bit rate
    421     IMG_UINT32  ui32TransferBitsPerSecond; //!< Transfer rate of encoded data from encoder to the output
    422     IMG_UINT32  ui32InitialQp;      //!< Initial QP (only field used by JPEG)
    423     IMG_UINT32  ui32BUSize;         //!< Basic unit size
    424     IMG_UINT32  ui32FrameRate;
    425     IMG_UINT32  ui32BufferSize;
    426     IMG_UINT32  ui32IntraFreq;
    427     IMG_UINT32  ui32SliceByteLimit;
    428     IMG_UINT32  ui32SliceMBLimit;
    429     IMG_INT32   i32InitialLevel;
    430     IMG_INT32   i32InitialDelay;
    431     IMG_UINT16   iMinQP;
    432     IMG_UINT16  ui16BFrames;
    433     IMG_BOOL16  b16Hierarchical;
    434     IMG_BOOL16  bIsH264Codec;
    435     IMG_BOOL    bRCEnable;
    436     IMG_BOOL    bScDetectDisable;
    437     IMG_BOOL    bDisableFrameSkipping;
    438     IMG_BOOL    bDisableBitStuffing;
    439     IMG_RCMODE  eRCMode;
    440     IMG_UINT8   u8Slices;
    441     IMG_INT8    i8QCPOffset;
    442 
    443     IMG_BOOL    bBitrateChanged;
    444 } IMG_RC_PARAMS;
    445 
    446 /*!
    447  *****************************************************************************
    448  * @details    Struct describing rate control input parameters
    449  * @brief          Rate control input parameters
    450  ****************************************************************************/
    451 typedef struct
    452 {
    453     IMG_UINT16 ui16MBPerFrm;        //!< Number of MBs Per Frame
    454     IMG_UINT16 ui16MBPerBU;         //!< Number of MBs Per BU
    455     IMG_UINT16 ui16BUPerFrm;        //!< Number of BUs Per Frame
    456 
    457     IMG_UINT16 ui16IntraPeriod;       //!< Intra frame frequency
    458     IMG_UINT16 ui16BFrames;         //!< B frame frequency
    459 
    460     IMG_INT32  i32BitsPerFrm;        //!< Bits Per Frame
    461     IMG_INT32  i32BitsPerBU;	  //!< Bits Per BU
    462 
    463     IMG_INT32  i32BitRate;             //!< Bit Rate (bps)
    464     IMG_INT32  i32BufferSize;        //!< Size of Buffer (VCM mode: in frames; all other modes: in bits)
    465     IMG_INT32  i32InitialLevel;        //!< Initial Level of Buffer
    466     IMG_INT32  i32InitialDelay;       //!< Initial Delay of Buffer
    467 
    468     IMG_BOOL16 bFrmSkipDisable; //!< Disable Frame skipping
    469 
    470     IMG_UINT8  ui8SeInitQP;          //!< Initial QP for Sequence
    471     IMG_UINT8  ui8MinQPVal;        //!< Minimum QP value to use
    472     IMG_UINT8  ui8MaxQPVal;       //!< Maximum QP value to use
    473 
    474     IMG_UINT8  ui8ScaleFactor;     //!< Scale Factor used to limit the range of arithmetic with high resolutions and bitrates
    475     IMG_UINT8  ui8MBPerRow;      //!< Number of MBs Per Row
    476 
    477     union {
    478         struct {
    479             IMG_INT32   i32TransferRate;    //!< Rate at which bits are sent from encoder to the output after each frame finished encoding
    480             IMG_BOOL16  bScDetectDisable;   //!< Disable Scene Change detection
    481             IMG_UINT32  ui32RCScaleFactor;  //!< Constant used in rate control = (GopSize/(BufferSize-InitialLevel))*256
    482             IMG_BOOL16  bHierarchicalMode;  //!< Flag indicating Hierarchical B Pic or Flat mode rate control
    483         } h264;
    484         struct {
    485             IMG_UINT8   ui8HalfFrameRate;   //!< Half Frame Rate (MP4 only)
    486             IMG_UINT8   ui8FCode;           //!< F Code (MP4 only)
    487             IMG_INT32   i32BitsPerGOP;	    //!< Bits Per GOP (MP4 only)
    488             IMG_BOOL16  bBUSkipDisable;     //!< Disable BU skipping
    489             IMG_INT32   i32BitsPerMB;       //!< Bits Per MB
    490             IMG_UINT16  ui16AvQPVal;        //!< Average QP in Current Picture
    491             IMG_UINT16  ui16MyInitQP;       //!< Initial Quantizer
    492         } other;
    493     } mode;
    494 } IN_RC_PARAMS;
    495 
    496 typedef enum _frame_type_ {
    497     IMG_INTRA_IDR = 0,
    498     IMG_INTRA_FRAME,
    499     IMG_INTER_P,
    500     IMG_INTER_B,
    501 } IMG_FRAME_TYPE;
    502 
    503 typedef struct {
    504     IMG_UINT32 ui32Flags;//!< Picture parameter flags
    505     IN_RC_PARAMS sInParams;//!< Rate control parameters
    506 } PIC_PARAMS;
    507 
    508 typedef struct tag_IMG_MV_SETTINGS {
    509     IMG_UINT32      ui32MVCalc_Below;
    510     IMG_UINT32      ui32MVCalc_Colocated;
    511     IMG_UINT32      ui32MVCalc_Config;
    512 } IMG_MV_SETTINGS;
    513 
    514 typedef enum {
    515     BLK_SZ_16x16 = 0,           //!< Use 16x16 block size for motion search. This is the smallest for h.263
    516     BLK_SZ_8x8 = 1,                     //!< Use 'upto' 8x8 block size for motion search. This is the smallest for MPEG-4
    517     BLK_SZ_4x4 = 2,                     //!< Use 'upto' 4x4 block size for motion search. This is the smallest for H.264
    518     BLK_SZ_DEFAULT = 3  //!< Driver picks the best possible block size for this encode session
    519 } IMG_IPE_MINBLOCKSIZE;
    520 
    521 typedef struct {
    522     IMG_BOOL16      bDisableIntra4x4;           //!< Disable Intra 4x4.
    523     IMG_BOOL16      bDisableIntra8x8;           //!< Disable Intra 8x8.
    524     IMG_BOOL16      bDisableIntra16x16; //!< Disable Intra 16x16.
    525     IMG_BOOL16      bDisableInter8x8;           //!< Disable Inter 8x8.
    526     IMG_BOOL16      bRestrictInter4x4;          //!< Only one 8x8 block may be divided into 4x4 block per MB
    527     IMG_BOOL16      bDisableBPicRef_1;  //!< Don't allow b-picture to refer reference-picture-1
    528     IMG_BOOL16      bDisableBPicRef_0;  //!< Don't allow b-picture to refer reference-picture-0
    529     IMG_BOOL16      bEnable8x16MVDetect;//!< Enable 8x16 motion vector block size detection
    530     IMG_BOOL16      bEnable16x8MVDetect;//!< Enable 16x8 motion vector block size detection
    531     IMG_BOOL16      bDisableBFrames;    //!< Disable B-frames in encoded output
    532     IMG_IPE_MINBLOCKSIZE    eMinBlkSz;  //!< Smallest block size used for motion search
    533 } IMG_ENCODE_FEATURES;
    534 
    535 typedef enum {
    536     ENC_PROFILE_DEFAULT = 0,    //!< Sets features for default video encode
    537     ENC_PROFILE_LOWCOMPLEXITY,  //!< Sets features for low complexity video encode
    538     ENC_PROFILE_HIGHCOMPLEXITY  //!< Sets features for low delay video encode
    539 } IMG_VIDEO_ENC_PROFILE;
    540 
    541 typedef enum {
    542     H264ES_PROFILE_BASELINE = 5,
    543     H264ES_PROFILE_MAIN,
    544     H264ES_PROFILE_HIGH
    545 } IMG_VIDEO_H264ES_PROFILE;
    546 
    547 #define MAX_SLICESPERPIC                (68)
    548 
    549 /*!
    550  ***********************************************************************************
    551  *
    552  * Description        : Video encode context
    553  *
    554  ************************************************************************************/
    555 typedef struct tag_IMG_MTX_VIDEO_CONTEXT
    556 {
    557     IMG_UINT64      ui64ClockDivBitrate; // keep this at the top as it has alignment issues
    558 
    559     IMG_UINT32      ui32WidthInMbs;                         //!< target output width
    560     IMG_UINT32      ui32PictureHeightInMbs;                 //!< target output height
    561 
    562 #ifdef FORCED_REFERENCE
    563     IMG_UINT32      apTmpReconstructured[MAX_PIC_NODES];
    564 #endif
    565     IMG_UINT32      apReconstructured[MAX_PIC_NODES];
    566     IMG_UINT32      apColocated[MAX_PIC_NODES];
    567     IMG_UINT32      apMV[MAX_MV];
    568     IMG_UINT32      apInterViewMV[2];
    569 
    570     IMG_UINT32      ui32DebugCRCs;                          //!< Send debug information from Register CRCs to Host with the coded buffer
    571 
    572     IMG_UINT32      apWritebackRegions[WB_FIFO_SIZE];       //!< Data section
    573 
    574     IMG_UINT32      ui32InitialCPBremovaldelayoffset;
    575     IMG_UINT32      ui32MaxBufferMultClockDivBitrate;
    576     IMG_UINT32      pSEIBufferingPeriodTemplate;
    577     IMG_UINT32      pSEIPictureTimingTemplate;
    578 
    579     IMG_BOOL16      b16EnableMvc;
    580     IMG_UINT16      ui16MvcViewIdx;
    581     IMG_UINT32      apSliceParamsTemplates[5];
    582     IMG_UINT32      apPicHdrTemplates[4];
    583 
    584     IMG_UINT32      apSeqHeader;
    585     IMG_UINT32      apSubSetSeqHeader;
    586     IMG_BOOL16      b16NoSequenceHeaders;
    587 
    588     IMG_UINT32      aui32SliceMap[MAX_SOURCE_SLOTS_SL];     //!< Slice map of the source picture
    589 
    590     IMG_UINT32      ui32FlatGopStruct;                      //!< Address of Flat MiniGop structure
    591 
    592     IMG_BOOL8       b8WeightedPredictionEnabled;
    593     IMG_UINT8       ui8MTXWeightedImplicitBiPred;
    594     IMG_UINT32      aui32WeightedPredictionVirtAddr[MAX_SOURCE_SLOTS_SL];
    595 
    596     IMG_UINT32      ui32HierarGopStruct;                    //!< Address of hierarchical MiniGop structure
    597 
    598     IMG_UINT32      pFirstPassOutParamAddr[MAX_SOURCE_SLOTS_SL];                //!< Output Parameters of the First Pass
    599 #ifndef EXCLUDE_BEST_MP_DECISION_DATA
    600     IMG_UINT32      pFirstPassOutBestMultipassParamAddr[MAX_SOURCE_SLOTS_SL];   //!< Selectable Output Best MV Parameters data of the First Pass
    601 #endif
    602     IMG_UINT32      pMBCtrlInParamsAddr[MAX_SOURCE_SLOTS_SL];                   //!< Input Parameters to the second pass
    603 
    604     IMG_UINT32      ui32InterIntraScale[SCALE_TBL_SZ];
    605     IMG_UINT32      ui32SkippedCodedScale[SCALE_TBL_SZ];
    606 
    607     IMG_UINT32      ui32PicRowStride;                       //!< Strides of source Y data and chroma data
    608 
    609     IMG_UINT32      apAboveParams[TOPAZHP_NUM_PIPES];       //!< Picture level parameters (supplied by driver)
    610 
    611     IMG_UINT32      ui32IdrPeriod;
    612     IMG_UINT32      ui32IntraLoopCnt;
    613     IMG_UINT32      ui32BFrameCount;
    614     IMG_BOOL8       b8Hierarchical;
    615     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.
    616     IMG_UINT8       aui8PicOnLevel[MAX_REF_LEVELS];
    617 
    618     IMG_UINT32      ui32VopTimeResolution;
    619 
    620     IMG_UINT32      ui32InitialQp;                          //!< Initial QP (only field used by JPEG)
    621     IMG_UINT32      ui32BUSize;                             //!< Basic unit size
    622 
    623     IMG_MV_SETTINGS sMVSettingsIdr;
    624 
    625     IMG_MV_SETTINGS sMVSettingsNonB[MAX_BFRAMES + 1];
    626 
    627     IMG_UINT32      ui32MVSettingsBTable;
    628     IMG_UINT32      ui32MVSettingsHierarchical;
    629 #ifdef FIRMWARE_BIAS
    630     IMG_UINT32      aui32DirectBias_P[27];
    631     IMG_UINT32      aui32InterBias_P[27];
    632 
    633     IMG_UINT32      aui32DirectBias_B[27];
    634     IMG_UINT32      aui32InterBias_B[27];
    635 #endif
    636 
    637     IMG_FORMAT      eFormat;                                //!< Pixel format of the source surface
    638     IMG_STANDARD    eStandard;                              //!< Encoder standard (H264 / H263 / MPEG4 / JPEG)
    639     IMG_RCMODE      eRCMode;                                //!< RC flavour
    640 
    641     IMG_BOOL8       b8FirstPic;
    642     IMG_BOOL8       b8IsInterlaced;
    643     IMG_BOOL8       b8TopFieldFirst;
    644     IMG_BOOL8       b8ArbitrarySO;
    645     IMG_BOOL8       bOutputReconstructed;
    646 
    647     IMG_BOOL8       b8DisableBitStuffing;
    648 
    649     IMG_BOOL8       b8InsertHRDparams;
    650 
    651     IMG_UINT8       ui8MaxSlicesPerPicture;
    652 
    653     /* Contents Adaptive Rate Control parameters*/
    654     IMG_BOOL16      bCARC;
    655     IMG_INT32       iCARCBaseline;
    656     IMG_UINT32      uCARCThreshold;
    657     IMG_UINT32      uCARCCutoff;
    658     IMG_UINT32      uCARCNegRange;
    659     IMG_UINT32      uCARCNegScale;
    660     IMG_UINT32      uCARCPosRange;
    661     IMG_UINT32      uCARCPosScale;
    662     IMG_UINT32      uCARCShift;
    663 
    664     IMG_UINT32      ui32MVClip_Config;                      //!< Value to use for MVClip_Config  register
    665     IMG_UINT32      ui32PredCombControl;                    //!< Value to use for Predictor combiner register
    666     IMG_UINT32      ui32LRITC_Tile_Use_Config;              //!< Value to use for LRITC_Tile_Use_Config register
    667     IMG_UINT32      ui32LRITC_Cache_Chunk_Config;           //!< Value to use for LRITC_Tile_Free_Config register
    668     IMG_UINT32      ui32IPEVectorClipping;                  //!< Value to use for IPEVectorClipping register
    669     IMG_UINT32      ui32H264CompControl;                    //!< Value to use for H264CompControl register
    670     IMG_UINT32      ui32H264CompIntraPredModes;             //!< Value to use for H264CompIntraPredMode register
    671     IMG_UINT32      ui32IPCM_0_Config;                      //!< Value to use for IPCM_0 Config register
    672     IMG_UINT32      ui32IPCM_1_Config;                      //!< Value to use for IPCM_1 Config register
    673     IMG_UINT32      ui32SPEMvdClipRange;                    //!< Value to use for SPEMvdClipRange register
    674     IMG_UINT32      ui32JMCompControl;                      //!< Value to use for JMCompControl register
    675     IMG_UINT32      ui32MBHostCtrl;                         //!< Value to use for MB_HOST_CONTROL register
    676     IMG_UINT32      ui32DeblockCtrl;                        //!< Value for the CR_DB_DISABLE_DEBLOCK_IDC register
    677     IMG_UINT32      ui32SkipCodedInterIntra;                //!< Value for the CR_DB_DISABLE_DEBLOCK_IDC register
    678 
    679     IMG_UINT32      ui32VLCControl;
    680     IMG_UINT32      ui32VLCSliceControl;                    //!< Slice control register value. Configures the size of a slice
    681     IMG_UINT32      ui32VLCSliceMBControl;                  //!< Slice control register value. Configures the size of a slice
    682     IMG_UINT16      ui16CQPOffset;                          //!< Chroma QP offset to use (when PPS id = 0)
    683 
    684     IMG_BOOL8       b8CodedHeaderPerSlice;
    685 
    686     IMG_UINT32      ui32FirstPicFlags;
    687     IMG_UINT32      ui32NonFirstPicFlags;
    688 
    689 #ifndef EXCLUDE_ADAPTIVE_ROUNDING
    690     IMG_BOOL16      bMCAdaptiveRoundingDisable;
    691     IMG_UINT16      ui16MCAdaptiveRoundingOffsets[18][4];
    692     IMG_INT16       i16MCAdaptiveRoundingOffsetsDelta[7][4];
    693 #endif
    694 
    695 #ifdef FORCED_REFERENCE
    696     IMG_UINT32      ui32PatchedReconAddress;                //!< Reconstructed address to allow host picture management
    697     IMG_UINT32      ui32PatchedRef0Address;                 //!< Reference 0 address to allow host picture management
    698     IMG_UINT32      ui32PatchedRef1Address;                 //!< Reference 1 address to allow host picture management
    699 #endif
    700 #ifdef LTREFHEADER
    701     IMG_UINT32      aui32LTRefHeader[MAX_SOURCE_SLOTS_SL];
    702     IMG_INT8        i8SliceHeaderSlotNum;
    703 #endif
    704     IMG_BOOL8       b8ReconIsLongTerm;
    705     IMG_BOOL8       b8Ref0IsLongTerm;
    706     IMG_BOOL8       b8Ref1IsLongTerm;
    707     IMG_UINT8       ui8RefSpacing;
    708 
    709 #if INPUT_SCALER_SUPPORTED
    710     IMG_UINT32      ui32ScalerInputSizeReg;
    711     IMG_UINT32      ui32ScalerCropReg;
    712     IMG_UINT32      ui32ScalerPitchReg;
    713     IMG_UINT32      asHorScalerCoeffRegs[4];
    714     IMG_UINT32      asVerScalerCoeffRegs[4];
    715 #endif
    716 
    717     IMG_UINT8       ui8NumPipes;
    718     IMG_UINT8       ui8FirstPipe;
    719     IMG_UINT8       ui8LastPipe;
    720     IMG_UINT8       ui8PipesToUseFlags;
    721 
    722     /*
    723     The following IN_RC_PARAMS should never be used by RC.
    724     This is because MVC RC module is unable to alter them, thus
    725     they may (and will, in case of MVC) contain incorrect values.
    726     */
    727     IN_RC_PARAMS    sInParams;
    728 }IMG_MTX_VIDEO_CONTEXT;
    729 
    730 typedef struct _OMX_CARC_PARAMS {
    731     IMG_BOOL        bCARC;
    732     IMG_INT32       i32CARCBaseline;
    733     IMG_UINT32      ui32CARCThreshold;
    734     IMG_UINT32      ui32CARCCutoff;
    735     IMG_UINT32      ui32CARCNegRange;
    736     IMG_UINT32      ui32CARCNegScale;
    737     IMG_UINT32      ui32CARCPosRange;
    738     IMG_UINT32      ui32CARCPosScale;
    739     IMG_UINT32      ui32CARCShift;
    740 } OMX_CARC_PARAMS;
    741 
    742 typedef struct tag_IMG_BIAS_TABLES {
    743     IMG_UINT32 aui32LambdaBias[53];
    744     IMG_UINT32 aui32IntraBias[53];
    745     IMG_UINT32 aui32IntraScale[53];
    746     IMG_UINT32 aui32QpBias[53];
    747 
    748     IMG_UINT32 aui32DirectBias_P[53];
    749     IMG_UINT32 aui32InterBias_P[53];
    750 
    751     IMG_UINT32 aui32DirectBias_B[53];
    752     IMG_UINT32 aui32InterBias_B[53];
    753 
    754     IMG_UINT32  ui32sz1;
    755     IMG_UINT32      ui32RejectThresholdH264;
    756 
    757     IMG_UINT32      ui32FCode;                          //!< value only used in MPEG4
    758 
    759     IMG_UINT32      ui32LritcCacheChunkConfig;
    760     IMG_UINT32      ui32SeqConfigInit;
    761 
    762 } IMG_BIAS_TABLES;
    763 
    764 /*!
    765 *****************************************************************************
    766 @details                Struct describing surface component info
    767 @brief                  Surface component info
    768 ****************************************************************************/
    769 typedef struct {
    770     IMG_UINT32 ui32Step;
    771     IMG_UINT32 ui32Width;
    772     IMG_UINT32 ui32Height;
    773     IMG_UINT32 ui32PhysWidth;
    774     IMG_UINT32 ui32PhysHeight;
    775 } IMG_SURF_COMPONENT_INFO;
    776 
    777 
    778 /*!
    779 *****************************************************************************
    780 @details                Struct describing a frame
    781 @brief                  Frame information
    782 ****************************************************************************/
    783 typedef struct {
    784     //IMG_BUFFER *psYPlaneBuffer;                    //!< pointer to the image buffer
    785     //IMG_BUFFER *psUPlaneBuffer;                    //!< pointer to the image buffer
    786     //IMG_BUFFER *psVPlaneBuffer;                    //!< pointer to the image buffer
    787     IMG_UINT32 ui32Width;                          //!< stride of pBuffer
    788     IMG_UINT32 ui32Height;                         //!< height of picture in pBuffer
    789 
    790     IMG_UINT32 ui32ComponentCount;                 //!< number of colour components used
    791     IMG_FORMAT eFormat;
    792 
    793     IMG_UINT32      aui32ComponentOffset[3];
    794     IMG_UINT32      aui32BottomComponentOffset[3];
    795     IMG_SURF_COMPONENT_INFO aui32ComponentInfo[3];
    796 
    797     IMG_INT32 i32YComponentOffset;
    798     IMG_INT32 i32UComponentOffset;
    799     IMG_INT32 i32VComponentOffset;
    800 
    801     IMG_INT32 i32Field0YOffset, i32Field1YOffset;
    802     IMG_INT32 i32Field0UOffset, i32Field1UOffset;
    803     IMG_INT32 i32Field0VOffset, i32Field1VOffset;
    804 
    805     IMG_UINT16 ui16SrcYStride, ui16SrcUVStride;
    806 
    807 } IMG_FRAME, JPEG_SOURCE_SURFACE;
    808 
    809 
    810 /*!
    811 *****************************************************************************
    812  @details    Struct describing the capabilities of the encoder
    813  @brief          Encoder Caps
    814 ****************************************************************************/
    815 typedef struct _IMG_ENC_CAPS {
    816     IMG_UINT16      ui16MinSlices;                  //!< Minimum slices to use
    817     IMG_UINT16      ui16MaxSlices;                  //!< Maximum slices to use
    818     IMG_UINT16      ui16RecommendedSlices;  //!< Recommended number of slices
    819     IMG_UINT32      ui32NumCores;                   //!< Number of cores that will be used
    820     IMG_UINT32      ui32CoreFeatures;               //!< Core features flags
    821 } IMG_ENC_CAPS;
    822 
    823 typedef struct _IMG_FIRST_STAGE_MB_PARAMS {
    824     IMG_UINT16      ui16Ipe0Sad;        //!< Final SAD value for best candidate calculated by IPE 0
    825     IMG_UINT16      ui16Ipe1Sad;        //!< Final SAD value for best candidate calculated by IPE 1
    826     IMG_UINT8       ui8Ipe0Blks;        //!< Block dimentions for IPE 0 for this Macro-Block
    827     IMG_UINT8       ui8Ipe1Blks;        //!< Block dimentions for IPE 1 for this Macro-Block
    828     IMG_UINT8       ui8CARCCmplxVal;    //!< CARC complexity value for this macroblock
    829     IMG_UINT8       ui8dummy;           //!< Reserved (added for alignment).
    830 
    831 } IMG_FIRST_STAGE_MB_PARAMS, *P_IMG_FIRST_STAGE_MB_PARAMS;
    832 
    833 /*!
    834  *****************************************************************************
    835  *
    836  * @Name           Picture Parameter Flags
    837  *
    838  * @details    Picture parameter flags used in the PIC_PARAM structure
    839  *
    840  ****************************************************************************/
    841 /* @{ */
    842 #define ISINTERP_FLAGS                          (0x00000001)
    843 #define ISMPEG2_FLAGS                          (0x00000002)
    844 #define ISMPEG4_FLAGS                          (0x00000004)
    845 #define ISH263_FLAGS                              (0x00000008)
    846 #define ISRC_FLAGS                                 (0x00000010)
    847 #define ISRC_I16BIAS                                (0x00000020)
    848 #define LOW_LATENCY_INTRA_ON_FLY   (0x00000040)
    849 #define ISINTERB_FLAGS                          (0x00000080)
    850 #define ISSCENE_DISABLED                     (0x00000100)
    851 #define ISMULTIREF_FLAGS                     (0x00000200)
    852 #define SPATIALDIRECT_FLAGS               (0x00000400)
    853 /* @} */
    854 
    855 /*!
    856  *****************************************************************************
    857  *
    858  * @details    SEI (Buffering Period and Picture Timing) Constants shared between host and firmware
    859  *
    860  * @brief      SEI Constants
    861  *
    862  ****************************************************************************/
    863 #define BPH_SEI_NAL_INITIAL_CPB_REMOVAL_DELAY_SIZE 23
    864 #define BPH_SEI_NAL_INITIAL_CPB_REMOVAL_DELAY_OFFSET_SIZE BPH_SEI_NAL_INITIAL_CPB_REMOVAL_DELAY_SIZE
    865 #define PTH_SEI_NAL_CPB_REMOVAL_DELAY_SIZE 23
    866 #define PTH_SEI_NAL_DPB_OUTPUT_DELAY_SIZE 7
    867 
    868 /*!
    869  *****************************************************************************
    870  * @details    Enum describing threshold values for skipped MB biasing
    871  * @brief          Skip thresholds
    872  ****************************************************************************/
    873 typedef enum
    874 {
    875     TH_SKIP_0    = 0,    //!< Bias threshold for QP 0 to 12
    876     TH_SKIP_12  = 1,    //!< Bias threshold for QP 12 to 24
    877     TH_SKIP_24  = 2     //!< Bias threshold for QP 24 and above
    878 } TH_SKIP_SCALE;
    879 
    880 
    881 typedef enum
    882 {
    883     MTX_SCRATCHREG_FULLNESS = 0,   //!< Coded buffer fullness
    884     MTX_SCRATCHREG_TOHOST,         //!< Reg for MTX->Host data
    885     MTX_SCRATCHREG_TOMTX,          //!< Reg for Host->MTX data
    886 
    887     MTX_SCRATCHREG_SIZE            //!< End marker for enum
    888 } MTX_eScratchRegData;
    889 
    890 
    891 #define MASK_INTEL_CH_PY 0x000000FF
    892 #define SHIFT_INTEL_CH_PY 0
    893 #define MASK_INTEL_CH_MX 0x0000FF00
    894 #define SHIFT_INTEL_CH_MX 8
    895 #define MASK_INTEL_CH_PM 0x00FF0000
    896 #define SHIFT_INTEL_CH_PM 16
    897 
    898 #define MASK_INTEL_H264_ConfigReg1 0x0000001F
    899 #define SHIFT_INTEL_H264_ConfigReg1 0
    900 #define MASK_INTEL_H264_ConfigReg2 0x00003F00
    901 #define SHIFT_INTEL_H264_ConfigReg2 8
    902 #define MASK_INTEL_H264_LL 0x00010000
    903 #define SHIFT_INTEL_H264_LL 16
    904 #define MASK_INTEL_H264_LL8X8P 0x00020000
    905 #define SHIFT_INTEL_H264_LL8X8P 17
    906 #define INTEL_SZ  0x0344
    907 #define INTEL_CHCF 0x0050
    908 #define INTEL_H264_RT 0x0184
    909 
    910 
    911 
    912 
    913 #endif //_TNG_HOSTDEFS_H_
    914