C++程序  |  601行  |  17.49 KB

/******************************************************************************
 *
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *****************************************************************************
 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
/*****************************************************************************/
/*                                                                           */
/*  File Name         : impeg2d.h                                        */
/*                                                                           */
/*  Description       : This file contains all the necessary structure and   */
/*                      enumeration definitions needed for the Application   */
/*                      Program Interface(API) of the Ittiam MPEG2 ASP       */
/*                      Decoder on Cortex A8 - Neon platform                 */
/*                                                                           */
/*  List of Functions : impeg2d_api_function                             */
/*                                                                           */
/*  Issues / Problems : None                                                 */
/*                                                                           */
/*  Revision History  :                                                      */
/*                                                                           */
/*         DD MM YYYY   Author(s)       Changes (Describe the changes made)  */
/*         26 08 2010   100239(RCY)     Draft                                */
/*                                                                           */
/*****************************************************************************/

#ifndef __IMPEG2D_H__
#define __IMPEG2D_H__

#include "iv.h"
#include "ivd.h"
#ifdef __cplusplus
extern "C"
{
#endif

/*****************************************************************************/
/* Constant Macros                                                           */
/*****************************************************************************/
#define EXPORT_MPEG2DEC_FULLCODEC_MEM_RECORDS   22

/*****************************************************************************/
/* Function Macros                                                           */
/*****************************************************************************/
#define IS_IVD_CONCEALMENT_APPLIED(x)           (x & (1 << IVD_APPLIEDCONCEALMENT))
#define IS_IVD_INSUFFICIENTDATA_ERROR(x)        (x & (1 << IVD_INSUFFICIENTDATA))
#define IS_IVD_CORRUPTEDDATA_ERROR(x)           (x & (1 << IVD_CORRUPTEDDATA))
#define IS_IVD_CORRUPTEDHEADER_ERROR(x)         (x & (1 << IVD_CORRUPTEDHEADER))
#define IS_IVD_UNSUPPORTEDINPUT_ERROR(x)        (x & (1 << IVD_UNSUPPORTEDINPUT))
#define IS_IVD_UNSUPPORTEDPARAM_ERROR(x)        (x & (1 << IVD_UNSUPPORTEDPARAM))
#define IS_IVD_FATAL_ERROR(x)                   (x & (1 << IVD_FATALERROR))
#define IS_IVD_INVALID_BITSTREAM_ERROR(x)       (x & (1 << IVD_INVALID_BITSTREAM))
#define IS_IVD_INCOMPLETE_BITSTREAM_ERROR(x)    (x & (1 << IVD_INCOMPLETE_BITSTREAM))

#define SET_IVD_CONCEALMENT_APPLIED(x)          ((x) |= (x) | (1 << IVD_APPLIEDCONCEALMENT))
#define SET_IVD_INSUFFICIENTDATA_ERROR(x)       ((x) |= (x) | (1 << IVD_INSUFFICIENTDATA))
#define SET_IVD_CORRUPTEDDATA_ERROR(x)          ((x) |= (x) | (1 << IVD_CORRUPTEDDATA))
#define SET_IVD_CORRUPTEDHEADER_ERROR(x)        ((x) |= (x) | (1 << IVD_CORRUPTEDHEADER))
#define SET_IVD_UNSUPPORTEDINPUT_ERROR(x)       ((x) |= (x) | (1 << IVD_UNSUPPORTEDINPUT))
#define SET_IVD_UNSUPPORTEDPARAM_ERROR(x)       ((x) |= (x) | (1 << IVD_UNSUPPORTEDPARAM))
#define SET_IVD_FATAL_ERROR(x)                  ((x) |= (x) | (1 << IVD_FATALERROR))
#define SET_IVD_INVALID_BITSTREAM_ERROR(x)      ((x) |= (x) | (1 << IVD_INVALID_BITSTREAM))
#define SET_IVD_INCOMPLETE_BITSTREAM_ERROR(x)   ((x) |= (x) | (1 << IVD_INCOMPLETE_BITSTREAM))

/*****************************************************************************/
/* API Function Prototype                                                    */
/*****************************************************************************/
IV_API_CALL_STATUS_T impeg2d_api_function(iv_obj_t *ps_handle,
                                          void *pv_api_ip,
                                          void *pv_api_op);

/*****************************************************************************/
/* Enums                                                                     */
/*****************************************************************************/
/* Codec Error codes for MPEG2 ASP Decoder                                   */

typedef enum
{

    IMPEG2D_UNKNOWN_ERROR = IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS + 1,
    /* API calls without init call */
    IMPEG2D_INIT_NOT_DONE,
    /* Query number of Memory Records API */
    IMPEG2D_QUERY_NUM_MEM_REC_FAIL,

    /* Fill Memory Records API */
    IMPEG2D_FILL_NUM_MEM_REC_NOT_SUFFICIENT,

    /* Initialize Decoder API */
    IMPEG2D_INIT_DEC_SCR_MEM_INSUFFICIENT,
    IMPEG2D_INIT_DEC_PER_MEM_INSUFFICIENT,
    IMPEG2D_INIT_NUM_MEM_REC_NOT_SUFFICIENT,
    IMPEG2D_INIT_CHROMA_FORMAT_HEIGHT_ERROR,

    /* Decode Sequence Header API */
    IMPEG2D_FRM_HDR_START_CODE_NOT_FOUND,
    IMPEG2D_FRM_HDR_MARKER_BIT_NOT_FOUND,
    IMPEG2D_PROF_LEVEL_NOT_SUPPORTED,
    IMPEG2D_FMT_NOT_SUPPORTED,
    IMPEG2D_SCALABILITIY_NOT_SUPPORTED,
    IMPEG2D_PIC_SIZE_NOT_SUPPORTED,

    /* Search for start code API */
    //IMPEG2D_SEARCH_START_CODE_FAIL         ,
    /* Decode Video Frame API    */
    IMPEG2D_START_CODE_NOT_FOUND,
    IMPEG2D_MARKER_BIT_NOT_FOUND,
    IMPEG2D_INVALID_STUFFING,
    IMPEG2D_PROFILE_LEVEL_NOT_SUP,
    IMPEG2D_CHROMA_FMT_NOT_SUP,
    IMPEG2D_SCALABLITY_NOT_SUP,
    IMPEG2D_FRM_HDR_DECODE_ERR,
    IMPEG2D_MB_HDR_DECODE_ERR,
    IMPEG2D_MB_TEX_DECODE_ERR,
    IMPEG2D_INCORRECT_QUANT_MATRIX,
    IMPEG2D_INVALID_SKIP_MB,
    IMPEG2D_NOT_SUPPORTED_ERR,
    IMPEG2D_BITSTREAM_BUFF_EXCEEDED_ERR,
    IMPEG2D_INVALID_PIC_TYPE,
    IMPEG2D_INVALID_HUFFMAN_CODE,
    IMPEG2D_NO_FREE_BUF_ERR,

    /* slice header errors */
    IMPEG2D_INVALID_VERT_SIZE,
    IMPEG2D_MB_DATA_DECODE_ERR,

    /* Get Display Frame API */
    IMPEG2D_GET_DISP_FRM_FAIL,

    /* Sample Version limitation */
    IMPEG2D_SAMPLE_VERSION_LIMIT_ERR,
    /**
     * Width/height greater than max width and max height
     */
    IMPEG2D_UNSUPPORTED_DIMENSIONS,

    /* Unknown API Command */
    IMPEG2D_UNKNOWN_API_COMMAND

} IMPEG2D_ERROR_CODES_T;

/*****************************************************************************/
/* Extended Structures                                                       */
/*****************************************************************************/
typedef enum
{
    /** Set number of cores/threads to be used */
    IMPEG2D_CMD_CTL_SET_NUM_CORES = IVD_CMD_CTL_CODEC_SUBCMD_START,

    /** Set processor details */
    IMPEG2D_CMD_CTL_SET_PROCESSOR = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x001,

    /** Get display buffer dimensions */
    IMPEG2D_CMD_CTL_GET_BUFFER_DIMENSIONS = IVD_CMD_CTL_CODEC_SUBCMD_START
                    + 0x100,

    /** Get Seq header/seq header extension info */
    IMPEG2D_CMD_CTL_GET_SEQ_INFO     = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x101,

} IMPEG2D_CMD_CTL_SUB_CMDS;

/*****************************************************************************/
/*  Get Number of Memory Records                                             */
/*****************************************************************************/

typedef struct
{
    iv_num_mem_rec_ip_t s_ivd_num_mem_rec_ip_t;
} impeg2d_num_mem_rec_ip_t;

typedef struct
{
    iv_num_mem_rec_op_t s_ivd_num_mem_rec_op_t;
} impeg2d_num_mem_rec_op_t;

/*****************************************************************************/
/*  Fill Memory Records                                                      */
/*****************************************************************************/

typedef struct
{
    iv_fill_mem_rec_ip_t s_ivd_fill_mem_rec_ip_t;
    /* Flag to enable sharing of reference buffers between decoder
     and application */

    UWORD32 u4_share_disp_buf;

    /* format in which codec has to give out frame data for display */
    IV_COLOR_FORMAT_T e_output_format;

    /**
     * Flag to enable/disable deinterlacing
     */
    UWORD32 u4_deinterlace;

} impeg2d_fill_mem_rec_ip_t;

typedef struct
{
    iv_fill_mem_rec_op_t s_ivd_fill_mem_rec_op_t;
} impeg2d_fill_mem_rec_op_t;

/*****************************************************************************/
/*  Retrieve Memory Records                                                  */
/*****************************************************************************/

typedef struct
{
    iv_retrieve_mem_rec_ip_t s_ivd_retrieve_mem_rec_ip_t;
} impeg2d_retrieve_mem_rec_ip_t;

typedef struct
{
    iv_retrieve_mem_rec_op_t s_ivd_retrieve_mem_rec_op_t;
} impeg2d_retrieve_mem_rec_op_t;

/*****************************************************************************/
/*   Initialize decoder                                                      */
/*****************************************************************************/

typedef struct
{
    ivd_init_ip_t s_ivd_init_ip_t;
    /* Flag to enable sharing of reference buffers between decoder
     and application */
    UWORD32 u4_share_disp_buf;

    /**
     * Flag to enable/disable deinterlacing
     */
    UWORD32 u4_deinterlace;

} impeg2d_init_ip_t;

typedef struct
{
    ivd_init_op_t s_ivd_init_op_t;
} impeg2d_init_op_t;

/*****************************************************************************/
/*   Video Decode                                                            */
/*****************************************************************************/

typedef struct
{
    ivd_video_decode_ip_t s_ivd_video_decode_ip_t;
} impeg2d_video_decode_ip_t;

typedef struct
{
    ivd_video_decode_op_t s_ivd_video_decode_op_t;
} impeg2d_video_decode_op_t;

/*****************************************************************************/
/*   Get Display Frame                                                       */
/*****************************************************************************/

typedef struct
{
    ivd_get_display_frame_ip_t s_ivd_get_display_frame_ip_t;
} impeg2d_get_display_frame_ip_t;

typedef struct
{
    ivd_get_display_frame_op_t s_ivd_get_display_frame_op_t;
} impeg2d_get_display_frame_op_t;

/*****************************************************************************/
/*   Set Display Frame                                                       */
/*****************************************************************************/
typedef struct
{
    ivd_set_display_frame_ip_t s_ivd_set_display_frame_ip_t;
} impeg2d_set_display_frame_ip_t;

typedef struct
{
    ivd_set_display_frame_op_t s_ivd_set_display_frame_op_t;
} impeg2d_set_display_frame_op_t;

/*****************************************************************************/
/*   Release Display Buffers                                                 */
/*****************************************************************************/

typedef struct
{
    ivd_rel_display_frame_ip_t s_ivd_rel_display_frame_ip_t;
} impeg2d_rel_display_frame_ip_t;

typedef struct
{
    ivd_rel_display_frame_op_t s_ivd_rel_display_frame_op_t;
} impeg2d_rel_display_frame_op_t;

/*****************************************************************************/
/*   Video control  Flush                                                    */
/*****************************************************************************/

typedef struct
{
    ivd_ctl_flush_ip_t s_ivd_ctl_flush_ip_t;
} impeg2d_ctl_flush_ip_t;

typedef struct
{
    ivd_ctl_flush_op_t s_ivd_ctl_flush_op_t;
} impeg2d_ctl_flush_op_t;

/*****************************************************************************/
/*   Video control reset                                                     */
/*****************************************************************************/

typedef struct
{
    ivd_ctl_reset_ip_t s_ivd_ctl_reset_ip_t;
} impeg2d_ctl_reset_ip_t;

typedef struct
{
    ivd_ctl_reset_op_t s_ivd_ctl_reset_op_t;
} impeg2d_ctl_reset_op_t;

/*****************************************************************************/
/*   Video control  Set Params                                               */
/*****************************************************************************/

typedef struct
{
    ivd_ctl_set_config_ip_t s_ivd_ctl_set_config_ip_t;
} impeg2d_ctl_set_config_ip_t;

typedef struct
{
    ivd_ctl_set_config_op_t s_ivd_ctl_set_config_op_t;
} impeg2d_ctl_set_config_op_t;

/*****************************************************************************/
/*   Video control:Get Buf Info                                              */
/*****************************************************************************/

typedef struct
{
    ivd_ctl_getbufinfo_ip_t s_ivd_ctl_getbufinfo_ip_t;
} impeg2d_ctl_getbufinfo_ip_t;

typedef struct
{
    ivd_ctl_getbufinfo_op_t s_ivd_ctl_getbufinfo_op_t;
} impeg2d_ctl_getbufinfo_op_t;

/*****************************************************************************/
/*   Video control:Getstatus Call                                            */
/*****************************************************************************/

typedef struct
{
    ivd_ctl_getstatus_ip_t s_ivd_ctl_getstatus_ip_t;
} impeg2d_ctl_getstatus_ip_t;

typedef struct
{
    ivd_ctl_getstatus_op_t s_ivd_ctl_getstatus_op_t;
} impeg2d_ctl_getstatus_op_t;

/*****************************************************************************/
/*   Video control:Get Version Info                                          */
/*****************************************************************************/

typedef struct
{
    ivd_ctl_getversioninfo_ip_t s_ivd_ctl_getversioninfo_ip_t;
} impeg2d_ctl_getversioninfo_ip_t;

typedef struct
{
    ivd_ctl_getversioninfo_op_t s_ivd_ctl_getversioninfo_op_t;
} impeg2d_ctl_getversioninfo_op_t;

/*****************************************************************************/
/*   Video control:Disable Qpel                                              */
/*****************************************************************************/

typedef struct
{
    UWORD32 u4_size;
    IVD_API_COMMAND_TYPE_T e_cmd;
    IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
    UWORD32 u4_num_cores;
} impeg2d_ctl_set_num_cores_ip_t;

typedef struct
{
    UWORD32 u4_size;
    UWORD32 u4_error_code;
} impeg2d_ctl_set_num_cores_op_t;

typedef struct
{
    /**
     * size
     */
    UWORD32 u4_size;
    /**
     * cmd
     */
    IVD_API_COMMAND_TYPE_T e_cmd;
    /**
     * sub cmd
     */
    IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
    /**
     * Processor type
     */
    UWORD32 u4_arch;
    /**
     * SOC type
     */
    UWORD32 u4_soc;

    /**
     * num_cores
     */
    UWORD32 u4_num_cores;

} impeg2d_ctl_set_processor_ip_t;

typedef struct
{
    /**
     * size
     */
    UWORD32 u4_size;
    /**
     * error_code
     */
    UWORD32 u4_error_code;
} impeg2d_ctl_set_processor_op_t;

typedef struct
{

    /**
     * size
     */
    UWORD32 u4_size;

    /**
     * cmd
     */
    IVD_API_COMMAND_TYPE_T e_cmd;

    /**
     * sub cmd
     */
    IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
} impeg2d_ctl_get_frame_dimensions_ip_t;

typedef struct
{

    /**
     * size
     */
    UWORD32 u4_size;

    /**
     * error_code
     */
    UWORD32 u4_error_code;

    /**
     * x_offset[3]
     */
    UWORD32 u4_x_offset[3];

    /**
     * y_offset[3]
     */
    UWORD32 u4_y_offset[3];

    /**
     * disp_wd[3]
     */
    UWORD32 u4_disp_wd[3];

    /**
     * disp_ht[3]
     */
    UWORD32 u4_disp_ht[3];

    /**
     * buffer_wd[3]
     */
    UWORD32 u4_buffer_wd[3];

    /**
     * buffer_ht[3]
     */
    UWORD32 u4_buffer_ht[3];
} impeg2d_ctl_get_frame_dimensions_op_t;

typedef struct
{
    /**
     * size
     */
    UWORD32 u4_size;

    /**
     * cmd
     */
    IVD_API_COMMAND_TYPE_T e_cmd;

    /**
     * sub cmd
     */
    IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
} impeg2d_ctl_get_seq_info_ip_t;

typedef struct
{
    /**
     * size
     */
    UWORD32 u4_size;

    /**
     * error_code
     */
    UWORD32 u4_error_code;

    /**
     * aspect_ratio_information
     */
    UWORD8 u1_aspect_ratio_information;

    /**
     * frame_rate_code
     */
    UWORD8 u1_frame_rate_code;

    /**
     * frame_rate_extension_n
     */
    UWORD8 u1_frame_rate_extension_n;

    /**
     * frame_rate_extension_d
     */
    UWORD8 u1_frame_rate_extension_d;

    /**
     * video_format
     */
    UWORD8 u1_video_format;

    /**
     * colour_primaries
     */
    UWORD8 u1_colour_primaries;

    /**
     * transfer_characteristics
     */
    UWORD8 u1_transfer_characteristics;

    /**
     * matrix_coefficients
     */
    UWORD8 u1_matrix_coefficients;

    /**
     * display_horizontal_size
     */
    UWORD16 u2_display_horizontal_size;

    /**
     * display_vertical_size
     */
    UWORD16 u2_display_vertical_size;

} impeg2d_ctl_get_seq_info_op_t;
#ifdef __cplusplus
} /* closing brace for extern "C" */
#endif

#endif /* __IMPEG2D_H__ */