Home | History | Annotate | Download | only in mrst
      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  *    Zeng Li <zeng.li (at) intel.com>
     27  *    Shengquan Yuan  <shengquan.yuan (at) intel.com>
     28  *    Binglin Chen <binglin.chen (at) intel.com>
     29  *
     30  */
     31 
     32 
     33 #include "img_types.h"
     34 #include "psb_drv_video.h"
     35 #include "psb_surface.h"
     36 #include "lnc_cmdbuf.h"
     37 
     38 #define MAX_SLICES_PER_PICTURE 72
     39 
     40 #define CODED_BUFFER_EOSEQ_FLAG (0x1u<<0)
     41 #define CODED_BUFFER_EOSTREAM_FLAG (0x1u<<1)
     42 
     43 /* commands for topaz,shared with user space driver */
     44 enum drm_lnc_topaz_cmd {
     45     MTX_CMDID_NULL = 0,
     46     MTX_CMDID_DO_HEADER = 1,
     47     MTX_CMDID_ENCODE_SLICE = 2,
     48     MTX_CMDID_WRITEREG = 3,
     49     MTX_CMDID_START_PIC = 4,
     50     MTX_CMDID_END_PIC = 5,
     51     MTX_CMDID_SYNC = 6,
     52     MTX_CMDID_ENCODE_ONE_ROW = 7,
     53     MTX_CMDID_FLUSH = 8,
     54     MTX_CMDID_SW_LEAVE_LOWPOWER = 0x7c,
     55     MTX_CMDID_SW_ENTER_LOWPOWER = 0x7e,
     56     MTX_CMDID_SW_NEW_CODEC = 0x7f
     57 };
     58 
     59 /* codecs topaz supports,shared with user space driver */
     60 enum drm_lnc_topaz_codec {
     61     IMG_CODEC_JPEG = 0,
     62     IMG_CODEC_H264_NO_RC,
     63     IMG_CODEC_H264_VBR,
     64     IMG_CODEC_H264_CBR,
     65     IMG_CODEC_H264_VCM,
     66     IMG_CODEC_H263_NO_RC,
     67     IMG_CODEC_H263_VBR,
     68     IMG_CODEC_H263_CBR,
     69     IMG_CODEC_MPEG4_NO_RC,
     70     IMG_CODEC_MPEG4_VBR,
     71     IMG_CODEC_MPEG4_CBR,
     72     IMG_CODEC_NUM
     73 };
     74 
     75 typedef enum _img_format_ {
     76     IMG_CODEC_IYUV, /* IYUV */
     77     IMG_CODEC_IMC2, /* IMC2 */
     78     IMG_CODEC_PL8,
     79     IMG_CODEC_PL12,
     80     IMG_CODEC_NV12,
     81 } IMG_FORMAT;
     82 
     83 
     84 typedef struct _RC_PARAMS_ {
     85     IMG_UINT32  BitsPerSecond;
     86     IMG_UINT32  InitialQp;
     87     IMG_UINT32  BUSize;
     88     IMG_UINT32  FrameRate;
     89     IMG_UINT32  BufferSize;
     90     IMG_UINT32  BitsConsumed;
     91     IMG_UINT32  IntraFreq;
     92     IMG_UINT16  IDRFreq;
     93 
     94     IMG_UINT16   MinQP;
     95     IMG_BOOL    RCEnable;
     96     IMG_BOOL    FrameSkip;
     97 
     98     IMG_UINT8   Slices;
     99     IMG_UINT8   VCMBitrateMargin;
    100     IMG_UINT32   InitialLevel;
    101     IMG_UINT32   InitialDelay;
    102 } IMG_RC_PARAMS;
    103 
    104 /*!
    105 *****************************************************************************
    106 *
    107 * @Description    Struct describing rate control input parameters
    108 *
    109 * @Brief          Rate control input parameters
    110 *
    111 ****************************************************************************/
    112 typedef struct {
    113     IMG_UINT8   SeInitQP;               //!< Initial QP for Sequence
    114     IMG_UINT8   MinQPVal;               //!< Minimum QP value to use
    115     IMG_UINT8   MaxQPVal;               //!< Maximum QP value to use
    116 
    117     IMG_UINT8   MBPerRow;               /* Number of MBs Per Row */
    118     IMG_UINT16  MBPerFrm;               /* Number of MBs Per Frame */
    119     IMG_UINT16  MBPerBU;                /* Number of MBs Per BU */
    120     IMG_UINT16  BUPerFrm;               /* Number of BUs Per Frame */
    121 
    122     IMG_UINT16  IntraPeriod;    /* Intra frame frequency */
    123 
    124     IMG_INT32   BitsPerFrm;             /* Bits Per Frame */
    125     IMG_INT32   BitsPerBU;              /* Bits Per BU */
    126     IMG_INT32   BitsPerMB;              /* Bits Per MB */
    127 
    128     IMG_INT32   BitRate;                        /* Bit Rate (bps) */
    129     IMG_INT32   BufferSize;             /* Size of Buffer */
    130     IMG_UINT32   InitialLevel;   /* Initial Level of Buffer */
    131     IMG_INT32   InitialDelay;   /* Initial Delay of Buffer */
    132 
    133     IMG_UINT8   ScaleFactor;            /* Scale Factor (H264 only) */
    134     IMG_UINT8   VCMBitrateMargin; /* Bitrate that should be
    135                                         targetted as a fraction of
    136                                         128 relative to maximum bitrate
    137                                         i32BitRate (VCM mode only) */
    138     IMG_UINT8   HalfFrameRate;  /* Half Frame Rate (MP4 only) */
    139     IMG_UINT8   FCode;                  /* F Code (MP4 only) */
    140 
    141     /* TO BE DELETED -- ONCE MP4 RC CODE IS OPTIMISED */
    142     IMG_INT32   BitsPerGOP;             /* Bits Per GOP (MP4 only) */
    143     IMG_UINT16  AvQPVal;                /* Average QP in Current Picture */
    144     IMG_UINT16  MyInitQP;               /* Initial Quantizer */
    145 
    146     IMG_INT32   ForceSkipMargin; /* The number of bits of margin
    147                                         to leave before forcing skipped
    148                                         macroblocks (VCM mode only) */
    149     IMG_UINT32  RCScaleFactor;  /* A constant used in rate control = (GopSize/(BufferSize-InitialLevel))*256 */
    150 } IN_RC_PARAMS;
    151 
    152 struct coded_buf_aux_info {
    153     object_buffer_p buf;
    154     uint32_t aux_flag;          /*Indicate which operation should be applied when map coded buffer.*/
    155     struct coded_buf_aux_info *next;
    156 };
    157 
    158 struct context_ENC_s {
    159     object_context_p obj_context; /* back reference */
    160 
    161     IMG_UINT32       Width;
    162     IMG_UINT32       Height;
    163     IMG_UINT16       RawWidth;
    164     IMG_UINT16       RawHeight;
    165     IMG_UINT16       Slices;
    166     enum drm_lnc_topaz_codec eCodec;
    167     IMG_FORMAT      eFormat;
    168     unsigned int    FCode;
    169     IMG_RC_PARAMS   sRCParams;
    170 
    171     IMG_INT16       HeightMinus16MinusLRBTopOffset;
    172     IMG_INT16       HeightMinus32MinusLRBTopOffset;
    173     IMG_INT16       HeightMinusLRB_TopAndBottom_OffsetsPlus16;
    174     IMG_INT16       HeightMinusLRBSearchHeight;
    175     IMG_UINT32      IPEControl;
    176 
    177     object_surface_p    src_surface;
    178     object_surface_p    ref_surface;
    179     object_surface_p    dest_surface;/* reconstructed surface */
    180     object_buffer_p     coded_buf;
    181 
    182     /* save previous settings */
    183     object_surface_p    previous_src_surface;
    184     object_surface_p    previous_ref_surface;
    185     object_surface_p    previous_dest_surface; /* reconstructed surface */
    186     object_buffer_p     previous_coded_buf;
    187     object_buffer_p     pprevious_coded_buf;
    188 
    189     /* point to the place in cmdbuf following START_PIC, the initial_qp will fill into it later */
    190     uint32_t *initial_qp_in_cmdbuf;
    191 
    192 
    193     /* global topaz_params buffer shared by every cmdbuffer
    194      * it is because filling InParams for every MB is very time-consuming
    195      * and in most cases, we can reuse previous frames buffer
    196      */
    197     /* 0 and 1 are for in_parms, 2 is for bellow and above params*/
    198     struct psb_buffer_s topaz_in_params_I;
    199     struct psb_buffer_s topaz_in_params_P;
    200     struct psb_buffer_s topaz_above_bellow_params;
    201     uint32_t topaz_buffer_size;
    202     uint32_t in_params_size;
    203     uint32_t bellow_params_size;
    204     uint32_t above_params_size;
    205 
    206     /* offset in topaz_param buffer */
    207     uint32_t in_params_ofs;
    208     uint32_t bellow_params_ofs;
    209     uint32_t above_params_ofs;
    210 
    211     uint32_t pic_params_size;
    212 
    213     uint32_t header_buffer_size;
    214 
    215     uint32_t seq_header_ofs;
    216     uint32_t pic_header_ofs;
    217     uint32_t eoseq_header_ofs;
    218     uint32_t eostream_header_ofs;
    219     uint32_t slice_header_ofs;
    220 
    221     uint32_t sliceparam_buffer_size;
    222 
    223     IN_RC_PARAMS in_params_cache; /* following frames reuse the first frame's IN_RC_PARAMS, cache it */
    224 
    225     VAEncSliceParameterBuffer *slice_param_cache;
    226     uint16_t slice_param_num;
    227 
    228     IMG_UINT16 MPEG4_vop_time_increment_resolution;
    229 
    230     /* saved information for FrameSkip redo */
    231     uint32_t MPEG4_vop_time_increment_frameskip;
    232     uint32_t MPEG4_picture_type_frameskip;
    233     uint8_t profile_idc;
    234     uint8_t force_idr_h264;
    235     uint32_t update_rc_control;
    236     uint8_t OptionalCustomPCF;
    237     uint32_t max_slice_size;
    238     uint16_t num_air_mbs;
    239     uint16_t air_threshold;
    240     uint32_t autotune_air_flag;
    241     uint32_t delta_change;
    242 
    243     struct coded_buf_aux_info *p_coded_buf_info;
    244     unsigned char *save_seq_header_p;
    245 
    246     /*For H264 only.*/
    247     uint16_t idr_pic_id;
    248 };
    249 
    250 typedef struct context_ENC_s *context_ENC_p;
    251 
    252 /*#define BELOW_PARAMS_SIZE 8*/
    253 
    254 #define HEADER_SIZE             128
    255 
    256 #define BELOW_PARAMS_SIZE       16
    257 #define REGION_TYPE_2D          1
    258 #define REGION_TYPE_LINEAR      0
    259 #define REGION_TYPE_2DREF       3
    260 
    261 
    262 #define MAX_RESIDUAL_PER_MB_H264        1260
    263 #define ISINTER_FLAGS           0x1
    264 #define ISH264_FLAGS            0x2
    265 #define ISMPEG4_FLAGS           0x4
    266 #define ISH263_FLAGS            0x8
    267 #define DEBLOCK_FRAME           0x10
    268 #define ISRC_FLAGS              0x20
    269 #define ISCBR_FLAGS             0x40
    270 #define ISVBR_FLAGS             0x80
    271 #define ISRC_I16BIAS            0x100
    272 #define INTERLEAVE_TARGET       0x200
    273 #define ISVCM_FLAGS             0x400
    274 #define AUTOTUNE_AIR            0x800
    275 
    276 
    277 #define SPE_EDGE_LEFT   1       /* ->bMinXRealEdge*/
    278 #define SPE_EDGE_RIGHT  2       /* ->bMaxXRealEdge*/
    279 #define SPE_EDGE_TOP    4   /* ->bMinYRealEdge*/
    280 #define SPE_EDGE_BOTTOM 8       /* ->bMaxYRealEdge*/
    281 
    282 typedef struct {
    283     /* Transferred into the input params area of the macroblock parameter structure*/
    284     IMG_BYTE    CurBlockAddr;
    285     IMG_BYTE    IPEMin[2];
    286     IMG_BYTE    IPEMax[2];
    287     IMG_BYTE    RealEdge;  /*bMinXRealEdge, bMaxXRealEdge, bMinXRealEdge and bMinYRealEdge*/
    288     /* Surrounding block availability */
    289     IMG_BYTE    MVValid;
    290     IMG_BYTE    ParamsValid;
    291     IMG_BYTE     bySliceQP;
    292     IMG_BYTE     bySliceQPC;
    293 
    294     IMG_BYTE     Reserved[6]; /* This is padding to make the transfers 16 bytes aligned*/
    295     /* Transferred into the SW communication section of the macroblock
    296      * parameter structure We shall EDMA the whole lot of this into eiob
    297      * in one go, and then use two TDMA's to put it into seperate locations
    298      * within the macroblock structure
    299      */
    300     IMG_UINT32   IPEControl;
    301     IMG_UINT32   SPEControl;
    302     IMG_UINT32   JMCompControl;
    303     IMG_UINT32   VLCControl;
    304 } MTX_CURRENT_IN_PARAMS;
    305 
    306 typedef struct { /* corresponding bytes inside the MB_IN structure: */
    307     IMG_BYTE    BlockSizes;              /****************/
    308     IMG_BYTE    IntraMode;               /*              */
    309     IMG_BYTE    Intra4x4ModesBottom[2];  /*              */
    310     IMG_BYTE    CodeType;                /*  [64 : 71]   */
    311     IMG_BYTE    Reserved2;               /*              */
    312     /*IMG_BYTE   SAD;*/
    313     IMG_BYTE    QPy;                     /*              */
    314     IMG_BYTE    QPc;                     /****************/
    315 
    316     IMG_BYTE    Reserved3[8];    /* This is padding to make the transfers 16 byte aligned*/
    317 
    318     IMG_UINT16  LumaSubBlockCoded;      /****************/
    319     IMG_BYTE    ChromaSubBlockCoded;    /*              */
    320     IMG_BYTE    LumaChromaDCCoded;      /*              */
    321     /*  [129 : 143] */
    322     IMG_BYTE    Lambda;                 /*              */
    323     IMG_BYTE    Reserved[3];            /*              */
    324     /*              */
    325     IMG_BYTE    Intra4x4ModeDeltas[8];  /****************/
    326 
    327     /* Motion vectors */
    328     IMG_UINT16  IntegerMV[16][2];      /* [207 : 144]  */
    329     /* input region from host */
    330 } MTX_CURRENT_OUT_PARAMS;
    331 
    332 
    333 
    334 typedef enum _TH_SKIP_SCALE_ {
    335     TH_SKIP_0 = 0,
    336     TH_SKIP_12 = 1,
    337     TH_SKIP_24 = 2
    338 } TH_SKIP_SCALE;
    339 
    340 typedef struct _PIC_PARAMS_ {
    341     IMG_UINT32          SrcYBase;
    342     IMG_UINT32          SrcUBase;
    343     IMG_UINT32          SrcVBase;
    344     IMG_UINT32          DstYBase;
    345     IMG_UINT32          DstUVBase;
    346 
    347     IMG_UINT16          SrcYStride;
    348     IMG_UINT16          SrcUVStride;
    349     IMG_UINT16          SrcYRowStride;
    350     IMG_UINT16          SrcUVRowStride;
    351 
    352     IMG_UINT16          DstYStride;
    353     IMG_UINT16          DstUVStride;
    354     IMG_UINT16          DstYRowStride;
    355     IMG_UINT16          DstUVRowStride;
    356 
    357     IMG_UINT32          InParamsBase;
    358     IMG_UINT32          InParamsRowStride;
    359 
    360     IMG_UINT32          OutParamsBase;
    361     IMG_UINT32          CodedBase;
    362 
    363     IMG_UINT32          BelowParamsBase;
    364     IMG_UINT32          BelowParamRowStride;
    365 
    366     IMG_UINT32          AboveParamsBase;
    367     IMG_UINT32          AboveParamRowStride;
    368     IMG_UINT16          Width;
    369     IMG_UINT16          Height;
    370     IMG_UINT16          Flags;
    371 
    372     IN_RC_PARAMS        sInParams;
    373     TH_SKIP_SCALE       THSkip;
    374 
    375     IMG_UINT16          NumSlices;                      //!< Number of slices in the picture
    376 } PIC_PARAMS;
    377 
    378 
    379 /* This holds the data that is needed at the start of a slice
    380  */
    381 typedef struct _SLICE_PARAMS_ {
    382 
    383     IMG_UINT16  SliceStartRowNum;
    384     IMG_UINT16  SliceHeight;
    385 
    386     IMG_UINT32  RefYBase;
    387     IMG_UINT32  RefUVBase;
    388     IMG_UINT16  RefYStride;
    389     IMG_UINT16  RefUVStride;
    390     IMG_UINT16  RefYRowStride;
    391     IMG_UINT16  RefUVRowStride;
    392 
    393     IMG_UINT32  CodedData;
    394     IMG_UINT32  Flags;
    395     IMG_UINT32  CodedDataPos;
    396     IMG_UINT32  TotalCoded;
    397     IMG_UINT32  FCode;
    398 
    399     IMG_UINT32  MaxSliceSize;
    400     IMG_INT16   NumAirMBs;                      //!< Maximum number of Adaptive intra refresh macroblocks for this slice
    401     IMG_INT16   AirThreshold;           //!< Theshold value used in Adaptive intra refresh calculation.
    402 
    403 } SLICE_PARAMS;
    404 
    405 
    406 typedef struct _ROW_PARAMS_ {
    407     IMG_UINT32  TargetYBase;
    408     IMG_UINT32  TargetYStride;
    409     IMG_UINT32  TargetUBase;
    410     IMG_UINT32  TargetVBase;
    411     IMG_UINT32  TargetUVStride;
    412 
    413     IMG_UINT32  ReferenceYBase;
    414     IMG_UINT32  ReferenceYStride;
    415     IMG_UINT32  ReferenceUVBase;
    416     IMG_UINT32  ReferenceUVStride;
    417 
    418     IMG_UINT32  ReconstructedYBase;
    419     IMG_UINT32  ReconstructedYStride;
    420     IMG_UINT32  ReconstructedUVBase;
    421     IMG_UINT32  ReconstructedUVStride;
    422 
    423     IMG_UINT32  AboveParamsBase;
    424     IMG_UINT32  OutAboveParamsBase;
    425     IMG_UINT32  MacroblockInParamsBase;
    426     IMG_UINT32  MacroblockOutParamsBase;
    427     IMG_UINT32  BelowParamsBase;
    428     IMG_UINT32  OutBelowParamsBase;
    429     IMG_UINT32  CodedData;
    430 
    431     IMG_UINT32  Flags;
    432     IMG_UINT32  BlockWidth;
    433     IMG_UINT32  BlockHeight;
    434     IMG_UINT32  YPos;
    435     IMG_UINT32  FrameNum;
    436 
    437     IMG_INT     BelowParamsOffset;
    438     IMG_UINT32  CodedDataPos;
    439     IMG_UINT32  BaseResidual;
    440     IMG_UINT32  TotalCoded;
    441 
    442     IMG_UINT32  PADDING[5];
    443 
    444     IMG_UINT32  IPESkipVecBias;
    445     IMG_UINT32  SPESkipVecBias;
    446     IMG_INT32   InterMBBias;
    447     IMG_INT32   Intra16Bias;
    448     IMG_UINT32  SpeZeroThld;
    449     IMG_UINT32  SpeZeroThreshold;
    450 
    451 } ROW_PARAMS;
    452 
    453 #define ROW_PARAMS_TDMA_DIMENSIONS  16,16,sizeof(ROW_PARAMS)
    454 
    455 typedef struct _ENCODER_VARIABLES_ {
    456     IMG_UINT32        ActionFlags;
    457 
    458     IMG_UINT32        SrcYCurrent;
    459     IMG_UINT32        SrcUCurrent;
    460     IMG_UINT32        SrcVCurrent;
    461 
    462     IMG_UINT32        DstYCurrent;
    463     IMG_UINT32        DstUCurrent;
    464     IMG_UINT32        DstVCurrent;
    465 
    466     IMG_INT           BelowParamsOffset;
    467     IMG_UINT32        BaseResidual;
    468     IMG_UINT32        CodedDataPos;
    469     IMG_UINT32        TotalCoded;
    470 
    471     IMG_UINT32        SrcYOffset;
    472     IMG_UINT32        SrcUOffset;
    473     IMG_UINT32        SrcVOffset;
    474 
    475     IMG_UINT32        PADDING[2];
    476 } ENCODER_VARIABLES;
    477 
    478 #define SLICE_FLAGS_ISINTER                     0x00000001
    479 #define SLICE_FLAGS_DEBLOCK                     0x00000002
    480 
    481 #define SLICE_FLAGS_ISINTER                     0x00000001
    482 #define SLICE_FLAGS_DEBLOCK                     0x00000002
    483 
    484 #define RC_STATUS_FRAME_AVE_QP_MASK             0x0ff   /* the average Qp used in this frame */
    485 #define RC_STATUS_FLAG_LARGE_SLICE              0x100   /* At least one slice in this frame was large enough for the firmware to try to reduce it by increasing Qp or skipping MBs */
    486 #define RC_STATUS_FLAG_SLICE_OVERFLOW           0x200   /* At least one slice in this frame was larger than the slice limit */
    487 
    488 enum {
    489     CBR = 0,
    490     VBR,
    491     VCM
    492 } eRCMode;
    493 
    494 enum {
    495     EH263 = 0,
    496     EMpeg4 = 1,
    497     EH264 = 2,
    498     EHJpeg = 3
    499 } eEncodingFormat;
    500 
    501 #define VAEncSliceParameter_Equal(src, dst)                             \
    502     (((src)->start_row_number == (dst)->start_row_number)               \
    503      && ((src)->slice_height == (dst)->slice_height)                    \
    504      && ((src)->slice_flags.bits.is_intra == (dst)->slice_flags.bits.is_intra) \
    505      && ((src)->slice_flags.bits.disable_deblocking_filter_idc == (dst)->slice_flags.bits.disable_deblocking_filter_idc))
    506 
    507 #define VAEncSliceParameter_LightEqual(src, dst)                             \
    508     (((src)->start_row_number == (dst)->start_row_number)               \
    509      && ((src)->slice_height == (dst)->slice_height)                    \
    510      && ((src)->slice_flags.bits.disable_deblocking_filter_idc == (dst)->slice_flags.bits.disable_deblocking_filter_idc))
    511 
    512 
    513 
    514 #define SURFACE_INFO_SKIP_FLAG_SETTLED 0X80000000
    515 #define GET_SURFACE_INFO_skipped_flag(psb_surface) ((int) (psb_surface->extra_info[5]))
    516 #define SET_SURFACE_INFO_skipped_flag(psb_surface, value) psb_surface->extra_info[5] = (SURFACE_INFO_SKIP_FLAG_SETTLED | value)
    517 #define CLEAR_SURFACE_INFO_skipped_flag(psb_surface) psb_surface->extra_info[5] = 0
    518 
    519 VAStatus lnc_CreateContext(object_context_p obj_context,
    520                            object_config_p obj_config);
    521 
    522 
    523 void lnc__setup_rcdata(context_ENC_p ctx, PIC_PARAMS *psPicParams, IMG_RC_PARAMS *rc_params);
    524 void lnc__update_rcdata(context_ENC_p ctx, PIC_PARAMS *psPicParams, IMG_RC_PARAMS *rc_params);
    525 
    526 void lnc_DestroyContext(
    527     object_context_p obj_context
    528 );
    529 
    530 VAStatus lnc_BeginPicture(context_ENC_p ctx);
    531 VAStatus lnc_EndPicture(context_ENC_p ctx);
    532 
    533 void lnc_setup_slice_params(
    534     context_ENC_p  ctx, IMG_UINT16 YSliceStartPos,
    535     IMG_UINT16 SliceHeight, IMG_BOOL IsIntra,
    536     IMG_BOOL  VectorsValid, int bySliceQP);
    537 
    538 IMG_UINT32 lnc__send_encode_slice_params(
    539     context_ENC_p ctx,
    540     IMG_BOOL IsIntra,
    541     IMG_UINT16 CurrentRow,
    542     IMG_BOOL DeblockSlice,
    543     IMG_UINT32 FrameNum,
    544     IMG_UINT16 SliceHeight,
    545     IMG_UINT16 CurrentSlice,
    546     IMG_UINT32 MaxSliceSize);
    547 
    548 VAStatus lnc_RenderPictureParameter(context_ENC_p ctx);
    549 
    550 
    551 void lnc_reset_encoder_params(context_ENC_p ctx);
    552 unsigned int lnc__get_ipe_control(enum drm_lnc_topaz_codec  eEncodingFormat);
    553 
    554 
    555 
    556 
    557 
    558