You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
601 lines
18 KiB
601 lines
18 KiB
/******************************************************************************
|
|
*
|
|
* 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__ */
|