| /****************************************************************************** | |
| * | |
| * 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; | |
| /** | |
| * enabling threads | |
| */ | |
| UWORD32 u4_keep_threads_active; | |
| } 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; | |
| /** | |
| * enable_threads | |
| */ | |
| UWORD32 u4_keep_threads_active; | |
| } 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__ */ |