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 #define IVD_ERROR_MASK 0xFF
     54 
     55 /*****************************************************************************/
     56 /* Function Macros                                                           */
     57 /*****************************************************************************/
     58 #define IS_IVD_CONCEALMENT_APPLIED(x)       (x & (1 << IVD_APPLIEDCONCEALMENT))
     59 #define IS_IVD_INSUFFICIENTDATA_ERROR(x)    (x & (1 << IVD_INSUFFICIENTDATA))
     60 #define IS_IVD_CORRUPTEDDATA_ERROR(x)       (x & (1 << IVD_CORRUPTEDDATA))
     61 #define IS_IVD_CORRUPTEDHEADER_ERROR(x)     (x & (1 << IVD_CORRUPTEDHEADER))
     62 #define IS_IVD_UNSUPPORTEDINPUT_ERROR(x)    (x & (1 << IVD_UNSUPPORTEDINPUT))
     63 #define IS_IVD_UNSUPPORTEDPARAM_ERROR(x)    (x & (1 << IVD_UNSUPPORTEDPARAM))
     64 #define IS_IVD_FATAL_ERROR(x)               (x & (1 << IVD_FATALERROR))
     65 #define IS_IVD_INVALID_BITSTREAM_ERROR(x)   (x & (1 << IVD_INVALID_BITSTREAM))
     66 #define IS_IVD_INCOMPLETE_BITSTREAM_ERROR(x) (x & (1 << IVD_INCOMPLETE_BITSTREAM))
     67 
     68 
     69 /*****************************************************************************/
     70 /* API Function Prototype                                                    */
     71 /*****************************************************************************/
     72 IV_API_CALL_STATUS_T ih264d_api_function(iv_obj_t *ps_handle, void *pv_api_ip,void *pv_api_op);
     73 
     74 /*****************************************************************************/
     75 /* Enums                                                                     */
     76 /*****************************************************************************/
     77 /* Codec Error codes for H264 ASP Decoder                                   */
     78 
     79 typedef enum {
     80 
     81     IH264D_VID_HDR_DEC_NUM_FRM_BUF_NOT_SUFFICIENT   = IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS + 1,
     82 
     83 }IH264D_ERROR_CODES_T;
     84 
     85 /*****************************************************************************/
     86 /* Extended Structures                                                       */
     87 /*****************************************************************************/
     88 
     89 
     90 /*****************************************************************************/
     91 /*  Delete Codec                                                             */
     92 /*****************************************************************************/
     93 
     94 
     95 typedef struct {
     96     ivd_delete_ip_t               s_ivd_delete_ip_t;
     97 }ih264d_delete_ip_t;
     98 
     99 
    100 typedef struct{
    101     ivd_delete_op_t               s_ivd_delete_op_t;
    102 }ih264d_delete_op_t;
    103 
    104 
    105 /*****************************************************************************/
    106 /*   Initialize decoder                                                      */
    107 /*****************************************************************************/
    108 
    109 
    110 typedef struct {
    111     ivd_create_ip_t                         s_ivd_create_ip_t;
    112 }ih264d_create_ip_t;
    113 
    114 
    115 typedef struct{
    116     ivd_create_op_t                         s_ivd_create_op_t;
    117 }ih264d_create_op_t;
    118 
    119 
    120 /*****************************************************************************/
    121 /*   Video Decode                                                            */
    122 /*****************************************************************************/
    123 
    124 
    125 typedef struct {
    126     ivd_video_decode_ip_t                   s_ivd_video_decode_ip_t;
    127 }ih264d_video_decode_ip_t;
    128 
    129 
    130 typedef struct{
    131     ivd_video_decode_op_t                   s_ivd_video_decode_op_t;
    132 }ih264d_video_decode_op_t;
    133 
    134 
    135 /*****************************************************************************/
    136 /*   Get Display Frame                                                       */
    137 /*****************************************************************************/
    138 
    139 
    140 typedef struct
    141 {
    142     ivd_get_display_frame_ip_t              s_ivd_get_display_frame_ip_t;
    143 }ih264d_get_display_frame_ip_t;
    144 
    145 
    146 typedef struct
    147 {
    148     ivd_get_display_frame_op_t              s_ivd_get_display_frame_op_t;
    149 }ih264d_get_display_frame_op_t;
    150 
    151 /*****************************************************************************/
    152 /*   Set Display Frame                                                       */
    153 /*****************************************************************************/
    154 
    155 
    156 typedef struct
    157 {
    158     ivd_set_display_frame_ip_t              s_ivd_set_display_frame_ip_t;
    159 }ih264d_set_display_frame_ip_t;
    160 
    161 
    162 typedef struct
    163 {
    164     ivd_set_display_frame_op_t              s_ivd_set_display_frame_op_t;
    165 }ih264d_set_display_frame_op_t;
    166 
    167 /*****************************************************************************/
    168 /*   Release Display Buffers                                                 */
    169 /*****************************************************************************/
    170 
    171 
    172 typedef struct
    173 {
    174     ivd_rel_display_frame_ip_t                  s_ivd_rel_display_frame_ip_t;
    175 }ih264d_rel_display_frame_ip_t;
    176 
    177 
    178 typedef struct
    179 {
    180     ivd_rel_display_frame_op_t                  s_ivd_rel_display_frame_op_t;
    181 }ih264d_rel_display_frame_op_t;
    182 
    183 
    184 typedef enum {
    185     /** Set number of cores/threads to be used */
    186     IH264D_CMD_CTL_SET_NUM_CORES         = IVD_CMD_CTL_CODEC_SUBCMD_START,
    187 
    188     /** Set processor details */
    189     IH264D_CMD_CTL_SET_PROCESSOR         = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x001,
    190 
    191     /** Get display buffer dimensions */
    192     IH264D_CMD_CTL_GET_BUFFER_DIMENSIONS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x100,
    193 
    194     /** Get VUI parameters */
    195     IH264D_CMD_CTL_GET_VUI_PARAMS        = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x101,
    196 
    197     /** Enable/disable GPU, supported on select platforms */
    198     IH264D_CMD_CTL_GPU_ENABLE_DISABLE    = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x200,
    199 
    200     /** Set degrade level */
    201     IH264D_CMD_CTL_DEGRADE               = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x300
    202 }IH264D_CMD_CTL_SUB_CMDS;
    203 /*****************************************************************************/
    204 /*   Video control  Flush                                                    */
    205 /*****************************************************************************/
    206 
    207 
    208 typedef struct{
    209     ivd_ctl_flush_ip_t                      s_ivd_ctl_flush_ip_t;
    210 }ih264d_ctl_flush_ip_t;
    211 
    212 
    213 typedef struct{
    214     ivd_ctl_flush_op_t                      s_ivd_ctl_flush_op_t;
    215 }ih264d_ctl_flush_op_t;
    216 
    217 /*****************************************************************************/
    218 /*   Video control reset                                                     */
    219 /*****************************************************************************/
    220 
    221 
    222 typedef struct{
    223     ivd_ctl_reset_ip_t                      s_ivd_ctl_reset_ip_t;
    224 }ih264d_ctl_reset_ip_t;
    225 
    226 
    227 typedef struct{
    228     ivd_ctl_reset_op_t                      s_ivd_ctl_reset_op_t;
    229 }ih264d_ctl_reset_op_t;
    230 
    231 
    232 /*****************************************************************************/
    233 /*   Video control  Set Params                                               */
    234 /*****************************************************************************/
    235 
    236 
    237 typedef struct {
    238     ivd_ctl_set_config_ip_t             s_ivd_ctl_set_config_ip_t;
    239 }ih264d_ctl_set_config_ip_t;
    240 
    241 
    242 typedef struct{
    243     ivd_ctl_set_config_op_t             s_ivd_ctl_set_config_op_t;
    244 }ih264d_ctl_set_config_op_t;
    245 
    246 /*****************************************************************************/
    247 /*   Video control:Get Buf Info                                              */
    248 /*****************************************************************************/
    249 
    250 
    251 typedef struct{
    252     ivd_ctl_getbufinfo_ip_t             s_ivd_ctl_getbufinfo_ip_t;
    253 }ih264d_ctl_getbufinfo_ip_t;
    254 
    255 
    256 
    257 typedef struct{
    258     ivd_ctl_getbufinfo_op_t             s_ivd_ctl_getbufinfo_op_t;
    259 }ih264d_ctl_getbufinfo_op_t;
    260 
    261 
    262 /*****************************************************************************/
    263 /*   Video control:Getstatus Call                                            */
    264 /*****************************************************************************/
    265 
    266 
    267 typedef struct{
    268     ivd_ctl_getstatus_ip_t                  s_ivd_ctl_getstatus_ip_t;
    269 }ih264d_ctl_getstatus_ip_t;
    270 
    271 
    272 
    273 typedef struct{
    274     ivd_ctl_getstatus_op_t                  s_ivd_ctl_getstatus_op_t;
    275 }ih264d_ctl_getstatus_op_t;
    276 
    277 
    278 /*****************************************************************************/
    279 /*   Video control:Get Version Info                                          */
    280 /*****************************************************************************/
    281 
    282 
    283 typedef struct{
    284     ivd_ctl_getversioninfo_ip_t         s_ivd_ctl_getversioninfo_ip_t;
    285 }ih264d_ctl_getversioninfo_ip_t;
    286 
    287 
    288 
    289 typedef struct{
    290     ivd_ctl_getversioninfo_op_t         s_ivd_ctl_getversioninfo_op_t;
    291 }ih264d_ctl_getversioninfo_op_t;
    292 
    293 typedef struct{
    294 
    295     /**
    296      * u4_size
    297      */
    298     UWORD32                                     u4_size;
    299 
    300     /**
    301      * cmd
    302      */
    303     IVD_API_COMMAND_TYPE_T                      e_cmd;
    304 
    305     /**
    306      * sub_cmd
    307      */
    308     IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
    309 
    310     /**
    311      * Pictures that are are degraded
    312      * 0 : No degrade
    313      * 1 : Only on non-reference frames
    314      * 2 : Use interval specified by u4_nondegrade_interval
    315      * 3 : All non-key frames
    316      * 4 : All frames
    317      */
    318     WORD32                                     i4_degrade_pics;
    319 
    320     /**
    321      * Interval for pictures which are completely decoded without any degradation
    322      */
    323     WORD32                                     i4_nondegrade_interval;
    324 
    325     /**
    326      * bit position (lsb is zero): Type of degradation
    327      * 1 : Disable deblocking
    328      * 2 : Faster inter prediction filters
    329      * 3 : Fastest inter prediction filters
    330      */
    331     WORD32                                     i4_degrade_type;
    332 
    333 }ih264d_ctl_degrade_ip_t;
    334 
    335 typedef struct
    336 {
    337     /**
    338      * u4_size
    339      */
    340     UWORD32                                     u4_size;
    341 
    342     /**
    343      * error_code
    344      */
    345     UWORD32                                     u4_error_code;
    346 }ih264d_ctl_degrade_op_t;
    347 
    348 typedef struct{
    349     UWORD32                                     u4_size;
    350     IVD_API_COMMAND_TYPE_T                      e_cmd;
    351     IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
    352     UWORD32                                     u4_disable_deblk_level;
    353 }ih264d_ctl_disable_deblock_ip_t;
    354 
    355 typedef struct{
    356     UWORD32                                     u4_size;
    357     UWORD32                                     u4_error_code;
    358 }ih264d_ctl_disable_deblock_op_t;
    359 
    360 
    361 typedef struct{
    362     UWORD32                                     u4_size;
    363     IVD_API_COMMAND_TYPE_T                      e_cmd;
    364     IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
    365     UWORD32                                     u4_num_cores;
    366 }ih264d_ctl_set_num_cores_ip_t;
    367 
    368 typedef struct{
    369     UWORD32                                     u4_size;
    370     UWORD32                                     u4_error_code;
    371 }ih264d_ctl_set_num_cores_op_t;
    372 
    373 typedef struct
    374 {
    375      /**
    376       * i4_size
    377       */
    378     UWORD32                                     u4_size;
    379     /**
    380      * cmd
    381      */
    382     IVD_API_COMMAND_TYPE_T                      e_cmd;
    383     /**
    384      * sub cmd
    385      */
    386     IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
    387     /**
    388      * Processor type
    389      */
    390     UWORD32                                     u4_arch;
    391     /**
    392      * SOC type
    393      */
    394     UWORD32                                     u4_soc;
    395 
    396     /**
    397      * num_cores
    398      */
    399     UWORD32                                     u4_num_cores;
    400 
    401 }ih264d_ctl_set_processor_ip_t;
    402 
    403 typedef struct
    404 {
    405     /**
    406      * i4_size
    407      */
    408     UWORD32                                     u4_size;
    409     /**
    410      * error_code
    411      */
    412     UWORD32                                     u4_error_code;
    413 }ih264d_ctl_set_processor_op_t;
    414 
    415 typedef struct{
    416     UWORD32                                     u4_size;
    417     IVD_API_COMMAND_TYPE_T                      e_cmd;
    418     IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
    419 }ih264d_ctl_get_frame_dimensions_ip_t;
    420 
    421 
    422 typedef struct{
    423     UWORD32                                     u4_size;
    424     UWORD32                                     u4_error_code;
    425     UWORD32                                     u4_x_offset[3];
    426     UWORD32                                     u4_y_offset[3];
    427     UWORD32                                     u4_disp_wd[3];
    428     UWORD32                                     u4_disp_ht[3];
    429     UWORD32                                     u4_buffer_wd[3];
    430     UWORD32                                     u4_buffer_ht[3];
    431 }ih264d_ctl_get_frame_dimensions_op_t;
    432 
    433 typedef struct
    434 {
    435     UWORD32                                     u4_size;
    436     IVD_API_COMMAND_TYPE_T                      e_cmd;
    437     IVD_CONTROL_API_COMMAND_TYPE_T              e_sub_cmd;
    438 }ih264d_ctl_get_vui_params_ip_t;
    439 
    440 typedef struct
    441 {
    442     UWORD32                                     u4_size;
    443     UWORD32                                     u4_error_code;
    444     UWORD8                                      u1_aspect_ratio_idc;
    445     UWORD16                                     u2_sar_width;
    446     UWORD16                                     u2_sar_height;
    447     UWORD8                                      u1_overscan_appropriate_flag;
    448     UWORD8                                      u1_video_format;
    449     UWORD8                                      u1_video_full_range_flag;
    450     UWORD8                                      u1_colour_primaries;
    451     UWORD8                                      u1_tfr_chars;
    452     UWORD8                                      u1_matrix_coeffs;
    453     UWORD8                                      u1_cr_top_field;
    454     UWORD8                                      u1_cr_bottom_field;
    455     UWORD32                                     u4_num_units_in_tick;
    456     UWORD32                                     u4_time_scale;
    457     UWORD8                                      u1_fixed_frame_rate_flag;
    458     UWORD8                                      u1_nal_hrd_params_present;
    459     UWORD8                                      u1_vcl_hrd_params_present;
    460     UWORD8                                      u1_low_delay_hrd_flag;
    461     UWORD8                                      u1_pic_struct_present_flag;
    462     UWORD8                                      u1_bitstream_restriction_flag;
    463     UWORD8                                      u1_mv_over_pic_boundaries_flag;
    464     UWORD32                                     u4_max_bytes_per_pic_denom;
    465     UWORD32                                     u4_max_bits_per_mb_denom;
    466     UWORD32                                     u4_log2_max_mv_length_horz;
    467     UWORD32                                     u4_log2_max_mv_length_vert;
    468     UWORD32                                     u4_num_reorder_frames;
    469     UWORD32                                     u4_max_dec_frame_buffering;
    470 }ih264d_ctl_get_vui_params_op_t;
    471 
    472 #ifdef __cplusplus
    473 } /* closing brace for extern "C" */
    474 #endif
    475 #endif /* _IH264D_H_ */
    476