Home | History | Annotate | Download | only in decoder
      1 /******************************************************************************
      2  *
      3  * Copyright (C) 2015 The Android Open Source Project
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at:
      8  *
      9  * http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  *
     17  *****************************************************************************
     18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
     19 */
     20 /*****************************************************************************/
     21 /*                                                                           */
     22 /*  File Name         : ih264d.h                                             */
     23 /*                                                                           */
     24 /*  Description       : This file contains all the necessary structure and   */
     25 /*                      enumeration definitions needed for the Application   */
     26 /*                      Program Interface(API) of the Ittiam H264 ASP       */
     27 /*                      Decoder on Cortex A8 - Neon platform                 */
     28 /*                                                                           */
     29 /*  List of Functions : ih264d_api_function                              */
     30 /*                                                                           */
     31 /*  Issues / Problems : None                                                 */
     32 /*                                                                           */
     33 /*  Revision History  :                                                      */
     34 /*                                                                           */
     35 /*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
     36 /*         26 08 2010   100239(RCY)     Draft                                */
     37 /*                                                                           */
     38 /*****************************************************************************/
     39 
     40 #ifndef _IH264D_H_
     41 #define _IH264D_H_
     42 #ifdef __cplusplus
     43 extern "C" {
     44 #endif
     45 
     46 #include "iv.h"
     47 #include "ivd.h"
     48 
     49 
     50 /*****************************************************************************/
     51 /* Constant Macros                                                           */
     52 /*****************************************************************************/
     53 
     54 /*****************************************************************************/
     55 /* Function Macros                                                           */
     56 /*****************************************************************************/
     57 #define IS_IVD_CONCEALMENT_APPLIED(x)       (x & (1 << IVD_APPLIEDCONCEALMENT))
     58 #define IS_IVD_INSUFFICIENTDATA_ERROR(x)    (x & (1 << IVD_INSUFFICIENTDATA))
     59 #define IS_IVD_CORRUPTEDDATA_ERROR(x)       (x & (1 << IVD_CORRUPTEDDATA))
     60 #define IS_IVD_CORRUPTEDHEADER_ERROR(x)     (x & (1 << IVD_CORRUPTEDHEADER))
     61 #define IS_IVD_UNSUPPORTEDINPUT_ERROR(x)    (x & (1 << IVD_UNSUPPORTEDINPUT))
     62 #define IS_IVD_UNSUPPORTEDPARAM_ERROR(x)    (x & (1 << IVD_UNSUPPORTEDPARAM))
     63 #define IS_IVD_FATAL_ERROR(x)               (x & (1 << IVD_FATALERROR))
     64 #define IS_IVD_INVALID_BITSTREAM_ERROR(x)   (x & (1 << IVD_INVALID_BITSTREAM))
     65 #define IS_IVD_INCOMPLETE_BITSTREAM_ERROR(x) (x & (1 << IVD_INCOMPLETE_BITSTREAM))
     66 
     67 
     68 /*****************************************************************************/
     69 /* API Function Prototype                                                    */
     70 /*****************************************************************************/
     71 IV_API_CALL_STATUS_T ih264d_api_function(iv_obj_t *ps_handle, void *pv_api_ip,void *pv_api_op);
     72 
     73 /*****************************************************************************/
     74 /* Enums                                                                     */
     75 /*****************************************************************************/
     76 /* Codec Error codes for H264 ASP Decoder                                   */
     77 
     78 typedef enum {
     79 
     80     IH264D_VID_HDR_DEC_NUM_FRM_BUF_NOT_SUFFICIENT   = IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS + 1,
     81     IH264D_UNSUPPORTED_LEVEL   = IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS + 2,
     82     IH264D_UNSUPPORTED_NUM_REF_FRAMES   = IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS + 3
     83 
     84 }IH264D_ERROR_CODES_T;
     85 
     86 /*****************************************************************************/
     87 /* Extended Structures                                                       */
     88 /*****************************************************************************/
     89 
     90 /*****************************************************************************/
     91 /*  Get Number of Memory Records                                             */
     92 /*****************************************************************************/
     93 
     94 
     95 typedef struct {
     96     iv_num_mem_rec_ip_t                    s_ivd_num_mem_rec_ip_t;
     97 }ih264d_num_mem_rec_ip_t;
     98 
     99 
    100 typedef struct{
    101     iv_num_mem_rec_op_t                    s_ivd_num_mem_rec_op_t;
    102 }ih264d_num_mem_rec_op_t;
    103 
    104 
    105 /*****************************************************************************/
    106 /*  Fill Memory Records                                                      */
    107 /*****************************************************************************/
    108 
    109 
    110 typedef struct {
    111     iv_fill_mem_rec_ip_t                    s_ivd_fill_mem_rec_ip_t;
    112     WORD32                                  i4_level;
    113     UWORD32                                 u4_num_reorder_frames;
    114     UWORD32                                 u4_num_ref_frames;
    115     UWORD32                                 u4_share_disp_buf;
    116 
    117     /* format in which codec has to give out frame data for display */
    118     IV_COLOR_FORMAT_T                       e_output_format;
    119 
    120     /* Number of extra display buffers that will be allocated to handle display pipeline depth */
    121     UWORD32                                 u4_num_extra_disp_buf;
    122 
    123 }ih264d_fill_mem_rec_ip_t;
    124 
    125 
    126 typedef struct{
    127     iv_fill_mem_rec_op_t                   s_ivd_fill_mem_rec_op_t;
    128 
    129 }ih264d_fill_mem_rec_op_t;
    130 
    131 /*****************************************************************************/
    132 /*  Retrieve Memory Records                                                  */
    133 /*****************************************************************************/
    134 
    135 
    136 typedef struct {
    137     iv_retrieve_mem_rec_ip_t               s_ivd_retrieve_mem_rec_ip_t;
    138 }ih264d_retrieve_mem_rec_ip_t;
    139 
    140 
    141 typedef struct{
    142     iv_retrieve_mem_rec_op_t               s_ivd_retrieve_mem_rec_op_t;
    143 }ih264d_retrieve_mem_rec_op_t;
    144 
    145 
    146 /*****************************************************************************/
    147 /*   Initialize decoder                                                      */
    148 /*****************************************************************************/
    149 
    150 
    151 typedef struct {
    152     ivd_init_ip_t                           s_ivd_init_ip_t;
    153     WORD32                                  i4_level;
    154     UWORD32                                 u4_num_reorder_frames;
    155     UWORD32                                 u4_num_ref_frames;
    156     UWORD32                                 u4_share_disp_buf;
    157     /* Number of extra display buffers that will be allocated to handle display pipeline depth */
    158     UWORD32                                 u4_num_extra_disp_buf;
    159 
    160 }ih264d_init_ip_t;
    161 
    162 
    163 typedef struct{
    164     ivd_init_op_t                           s_ivd_init_op_t;
    165 }ih264d_init_op_t;
    166 
    167 
    168 /*****************************************************************************/
    169 /*   Video Decode                                                            */
    170 /*****************************************************************************/
    171 
    172 
    173 typedef struct {
    174     ivd_video_decode_ip_t                   s_ivd_video_decode_ip_t;
    175 }ih264d_video_decode_ip_t;
    176 
    177 
    178 typedef struct{
    179     ivd_video_decode_op_t                   s_ivd_video_decode_op_t;
    180 }ih264d_video_decode_op_t;
    181 
    182 
    183 /*****************************************************************************/
    184 /*   Get Display Frame                                                       */
    185 /*****************************************************************************/
    186 
    187 
    188 typedef struct
    189 {
    190     ivd_get_display_frame_ip_t              s_ivd_get_display_frame_ip_t;
    191 }ih264d_get_display_frame_ip_t;
    192 
    193 
    194 typedef struct
    195 {
    196     ivd_get_display_frame_op_t              s_ivd_get_display_frame_op_t;
    197 }ih264d_get_display_frame_op_t;
    198 
    199 /*****************************************************************************/
    200 /*   Set Display Frame                                                       */
    201 /*****************************************************************************/
    202 
    203 
    204 typedef struct
    205 {
    206     ivd_set_display_frame_ip_t              s_ivd_set_display_frame_ip_t;
    207 }ih264d_set_display_frame_ip_t;
    208 
    209 
    210 typedef struct
    211 {
    212     ivd_set_display_frame_op_t              s_ivd_set_display_frame_op_t;
    213 }ih264d_set_display_frame_op_t;
    214 
    215 /*****************************************************************************/
    216 /*   Release Display Buffers                                                 */
    217 /*****************************************************************************/
    218 
    219 
    220 typedef struct
    221 {
    222     ivd_rel_display_frame_ip_t                  s_ivd_rel_display_frame_ip_t;
    223 }ih264d_rel_display_frame_ip_t;
    224 
    225 
    226 typedef struct
    227 {
    228     ivd_rel_display_frame_op_t                  s_ivd_rel_display_frame_op_t;
    229 }ih264d_rel_display_frame_op_t;
    230 
    231 
    232 typedef enum {
    233     /** Set number of cores/threads to be used */
    234     IH264D_CMD_CTL_SET_NUM_CORES         = IVD_CMD_CTL_CODEC_SUBCMD_START,
    235 
    236     /** Set processor details */
    237     IH264D_CMD_CTL_SET_PROCESSOR         = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x001,
    238 
    239     /** Get display buffer dimensions */
    240     IH264D_CMD_CTL_GET_BUFFER_DIMENSIONS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x100,
    241 
    242     /** Get VUI parameters */
    243     IH264D_CMD_CTL_GET_VUI_PARAMS        = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x101,
    244 
    245     /** Enable/disable GPU, supported on select platforms */
    246     IH264D_CMD_CTL_GPU_ENABLE_DISABLE    = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x200,
    247 
    248     /** Set degrade level */
    249     IH264D_CMD_CTL_DEGRADE               = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x300
    250 }IH264D_CMD_CTL_SUB_CMDS;
    251 /*****************************************************************************/
    252 /*   Video control  Flush                                                    */
    253 /*****************************************************************************/
    254 
    255 
    256 typedef struct{
    257     ivd_ctl_flush_ip_t                      s_ivd_ctl_flush_ip_t;
    258 }ih264d_ctl_flush_ip_t;
    259 
    260 
    261 typedef struct{
    262     ivd_ctl_flush_op_t                      s_ivd_ctl_flush_op_t;
    263 }ih264d_ctl_flush_op_t;
    264 
    265 /*****************************************************************************/
    266 /*   Video control reset                                                     */
    267 /*****************************************************************************/
    268 
    269 
    270 typedef struct{
    271     ivd_ctl_reset_ip_t                      s_ivd_ctl_reset_ip_t;
    272 }ih264d_ctl_reset_ip_t;
    273 
    274 
    275 typedef struct{
    276     ivd_ctl_reset_op_t                      s_ivd_ctl_reset_op_t;
    277 }ih264d_ctl_reset_op_t;
    278 
    279 
    280 /*****************************************************************************/
    281 /*   Video control  Set Params                                               */
    282 /*****************************************************************************/
    283 
    284 
    285 typedef struct {
    286     ivd_ctl_set_config_ip_t             s_ivd_ctl_set_config_ip_t;
    287 }ih264d_ctl_set_config_ip_t;
    288 
    289 
    290 typedef struct{
    291     ivd_ctl_set_config_op_t             s_ivd_ctl_set_config_op_t;
    292 }ih264d_ctl_set_config_op_t;
    293 
    294 /*****************************************************************************/
    295 /*   Video control:Get Buf Info                                              */
    296 /*****************************************************************************/
    297 
    298 
    299 typedef struct{
    300     ivd_ctl_getbufinfo_ip_t             s_ivd_ctl_getbufinfo_ip_t;
    301 }ih264d_ctl_getbufinfo_ip_t;
    302 
    303 
    304 
    305 typedef struct{
    306     ivd_ctl_getbufinfo_op_t             s_ivd_ctl_getbufinfo_op_t;
    307 }ih264d_ctl_getbufinfo_op_t;
    308 
    309 
    310 /*****************************************************************************/
    311 /*   Video control:Getstatus Call                                            */
    312 /*****************************************************************************/
    313 
    314 
    315 typedef struct{
    316     ivd_ctl_getstatus_ip_t                  s_ivd_ctl_getstatus_ip_t;
    317 }ih264d_ctl_getstatus_ip_t;
    318 
    319 
    320 
    321 typedef struct{
    322     ivd_ctl_getstatus_op_t                  s_ivd_ctl_getstatus_op_t;
    323 }ih264d_ctl_getstatus_op_t;
    324 
    325 
    326 /*****************************************************************************/
    327 /*   Video control:Get Version Info                                          */
    328 /*****************************************************************************/
    329 
    330 
    331 typedef struct{
    332     ivd_ctl_getversioninfo_ip_t         s_ivd_ctl_getversioninfo_ip_t;
    333 }ih264d_ctl_getversioninfo_ip_t;
    334 
    335 
    336 
    337 typedef struct{
    338     ivd_ctl_getversioninfo_op_t         s_ivd_ctl_getversioninfo_op_t;
    339 }ih264d_ctl_getversioninfo_op_t;
    340 
    341 typedef struct{
    342 
    343     /**
    344      * u4_size
    345      */
    346     UWORD32                                     u4_size;
    347 
    348     /**
    349      * cmd
    350      */
    351     IVD_API_COMMAND_TYPE_T                      e_cmd;
    352 
    353     /**
    354      * sub_cmd
    355      */
    356     IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
    357 
    358     /**
    359      * Pictures that are are degraded
    360      * 0 : No degrade
    361      * 1 : Only on non-reference frames
    362      * 2 : Use interval specified by u4_nondegrade_interval
    363      * 3 : All non-key frames
    364      * 4 : All frames
    365      */
    366     WORD32                                     i4_degrade_pics;
    367 
    368     /**
    369      * Interval for pictures which are completely decoded without any degradation
    370      */
    371     WORD32                                     i4_nondegrade_interval;
    372 
    373     /**
    374      * bit position (lsb is zero): Type of degradation
    375      * 1 : Disable deblocking
    376      * 2 : Faster inter prediction filters
    377      * 3 : Fastest inter prediction filters
    378      */
    379     WORD32                                     i4_degrade_type;
    380 
    381 }ih264d_ctl_degrade_ip_t;
    382 
    383 typedef struct
    384 {
    385     /**
    386      * u4_size
    387      */
    388     UWORD32                                     u4_size;
    389 
    390     /**
    391      * error_code
    392      */
    393     UWORD32                                     u4_error_code;
    394 }ih264d_ctl_degrade_op_t;
    395 
    396 typedef struct{
    397     UWORD32                                     u4_size;
    398     IVD_API_COMMAND_TYPE_T                      e_cmd;
    399     IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
    400     UWORD32                                     u4_disable_deblk_level;
    401 }ih264d_ctl_disable_deblock_ip_t;
    402 
    403 typedef struct{
    404     UWORD32                                     u4_size;
    405     UWORD32                                     u4_error_code;
    406 }ih264d_ctl_disable_deblock_op_t;
    407 
    408 
    409 typedef struct{
    410     UWORD32                                     u4_size;
    411     IVD_API_COMMAND_TYPE_T                      e_cmd;
    412     IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
    413     UWORD32                                     u4_num_cores;
    414 }ih264d_ctl_set_num_cores_ip_t;
    415 
    416 typedef struct{
    417     UWORD32                                     u4_size;
    418     UWORD32                                     u4_error_code;
    419 }ih264d_ctl_set_num_cores_op_t;
    420 
    421 typedef struct
    422 {
    423      /**
    424       * i4_size
    425       */
    426     UWORD32                                     u4_size;
    427     /**
    428      * cmd
    429      */
    430     IVD_API_COMMAND_TYPE_T                      e_cmd;
    431     /**
    432      * sub cmd
    433      */
    434     IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
    435     /**
    436      * Processor type
    437      */
    438     UWORD32                                     u4_arch;
    439     /**
    440      * SOC type
    441      */
    442     UWORD32                                     u4_soc;
    443 
    444     /**
    445      * num_cores
    446      */
    447     UWORD32                                     u4_num_cores;
    448 
    449 }ih264d_ctl_set_processor_ip_t;
    450 
    451 typedef struct
    452 {
    453     /**
    454      * i4_size
    455      */
    456     UWORD32                                     u4_size;
    457     /**
    458      * error_code
    459      */
    460     UWORD32                                     u4_error_code;
    461 }ih264d_ctl_set_processor_op_t;
    462 
    463 typedef struct{
    464     UWORD32                                     u4_size;
    465     IVD_API_COMMAND_TYPE_T                      e_cmd;
    466     IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
    467 }ih264d_ctl_get_frame_dimensions_ip_t;
    468 
    469 
    470 typedef struct{
    471     UWORD32                                     u4_size;
    472     UWORD32                                     u4_error_code;
    473     UWORD32                                     u4_x_offset[3];
    474     UWORD32                                     u4_y_offset[3];
    475     UWORD32                                     u4_disp_wd[3];
    476     UWORD32                                     u4_disp_ht[3];
    477     UWORD32                                     u4_buffer_wd[3];
    478     UWORD32                                     u4_buffer_ht[3];
    479 }ih264d_ctl_get_frame_dimensions_op_t;
    480 
    481 #ifdef __cplusplus
    482 } /* closing brace for extern "C" */
    483 #endif
    484 #endif /* _IH264D_H_ */
    485