/******************************************************************************
*
* 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 : ih264e.h */
/* */
/* Description : This file contains all the necessary structure and */
/* enumeration definitions needed for the Application */
/* Program Interface(API) of the Ittiam MPEG4 */
/* Encoder on Cortex A8 - Neon platform */
/* */
/* List of Functions : ih264e_api_function */
/* */
/* Issues / Problems : None */
/* */
/* Revision History : */
/* */
/* DD MM YYYY Author(s) Changes (Describe the changes made) */
/* 26 08 2010 100239(RCY) Draft */
/* */
/*****************************************************************************/
#ifndef _IH264E_H_
#define _IH264E_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "iv2.h"
#include "ive2.h"
/*****************************************************************************/
/* Constant Macros */
/*****************************************************************************/
/*****************************************************************************/
/* API Function Prototype */
/*****************************************************************************/
IV_STATUS_T ih264e_api_function(iv_obj_t *ps_handle, void *pv_api_ip,void *pv_api_op);
/*****************************************************************************/
/* Enums */
/*****************************************************************************/
typedef enum
{
IH264E_CMD_CTL_SET_ME_INFO_ENABLE,
}IH264E_CMD_CTL_SUB_CMDS;
/*****************************************************************************/
/* Extended Structures */
/*****************************************************************************/
/*****************************************************************************/
/* Get Number of Memory Records */
/*****************************************************************************/
typedef struct
{
iv_num_mem_rec_ip_t s_ive_ip;
}ih264e_num_mem_rec_ip_t;
typedef struct
{
iv_num_mem_rec_op_t s_ive_op;
}ih264e_num_mem_rec_op_t;
/*****************************************************************************/
/* Fill Memory Records */
/*****************************************************************************/
typedef struct
{
iv_fill_mem_rec_ip_t s_ive_ip;
}ih264e_fill_mem_rec_ip_t;
typedef struct
{
iv_fill_mem_rec_op_t s_ive_op;
}ih264e_fill_mem_rec_op_t;
/*****************************************************************************/
/* Retrieve Memory Records */
/*****************************************************************************/
typedef struct
{
iv_retrieve_mem_rec_ip_t s_ive_ip;
}ih264e_retrieve_mem_rec_ip_t;
typedef struct
{
iv_retrieve_mem_rec_op_t s_ive_op;
}ih264e_retrieve_mem_rec_op_t;
/*****************************************************************************/
/* Initialize encoder */
/*****************************************************************************/
typedef struct
{
ive_init_ip_t s_ive_ip;
}ih264e_init_ip_t;
typedef struct
{
ive_init_op_t s_ive_op;
}ih264e_init_op_t;
/*****************************************************************************/
/* Queue Input raw buffer - Send the YUV buffer to be encoded */
/*****************************************************************************/
typedef struct
{
ive_queue_inp_ip_t s_ive_ip;
}ih264e_queue_inp_ip_t;
typedef struct
{
ive_queue_inp_op_t s_ive_op;
}ih264e_queue_inp_op_t;
/*****************************************************************************/
/* Dequeue Input raw buffer - Get free YUV buffer from the encoder */
/*****************************************************************************/
typedef struct
{
ive_dequeue_inp_ip_t s_ive_ip;
}ih264e_dequeue_inp_ip_t;
typedef struct
{
ive_dequeue_inp_op_t s_ive_op;
}ih264e_dequeue_inp_op_t;
/*****************************************************************************/
/* Queue Output bitstream buffer - Send the bistream buffer to be filled */
/*****************************************************************************/
typedef struct
{
ive_queue_out_ip_t s_ive_ip;
}ih264e_queue_out_ip_t;
typedef struct
{
ive_queue_out_op_t s_ive_op;
}ih264e_queue_out_op_t;
/*****************************************************************************/
/* Dequeue Output bitstream buffer - Get the bistream buffer filled */
/*****************************************************************************/
typedef struct
{
ive_dequeue_out_ip_t s_ive_ip;
}ih264e_dequeue_out_ip_t;
typedef struct
{
ive_dequeue_out_op_t s_ive_op;
}ih264e_dequeue_out_op_t;
/*****************************************************************************/
/* Get Recon data - Get the reconstructed data from encoder */
/*****************************************************************************/
typedef struct
{
ive_get_recon_ip_t s_ive_ip;
}ih264e_get_recon_ip_t;
typedef struct
{
ive_get_recon_op_t s_ive_op;
}ih264e_get_recon_op_t;
/*****************************************************************************/
/* Video control Flush */
/*****************************************************************************/
typedef struct
{
ive_ctl_flush_ip_t s_ive_ip;
}ih264e_ctl_flush_ip_t;
typedef struct
{
ive_ctl_flush_op_t s_ive_op;
}ih264e_ctl_flush_op_t;
/*****************************************************************************/
/* Video control reset */
/*****************************************************************************/
typedef struct
{
ive_ctl_reset_ip_t s_ive_ip;
}ih264e_ctl_reset_ip_t;
typedef struct
{
ive_ctl_reset_op_t s_ive_op;
}ih264e_ctl_reset_op_t;
/*****************************************************************************/
/* Video control:Get Buf Info */
/*****************************************************************************/
typedef struct
{
ive_ctl_getbufinfo_ip_t s_ive_ip;
}ih264e_ctl_getbufinfo_ip_t;
typedef struct
{
ive_ctl_getbufinfo_op_t s_ive_op;
}ih264e_ctl_getbufinfo_op_t;
/*****************************************************************************/
/* Video control:Get Version Info */
/*****************************************************************************/
typedef struct
{
ive_ctl_getversioninfo_ip_t s_ive_ip;
}ih264e_ctl_getversioninfo_ip_t;
typedef struct
{
ive_ctl_getversioninfo_op_t s_ive_op;
}ih264e_ctl_getversioninfo_op_t;
/*****************************************************************************/
/* Video control:Set default params */
/*****************************************************************************/
typedef struct
{
ive_ctl_setdefault_ip_t s_ive_ip;
}ih264e_ctl_setdefault_ip_t;
typedef struct
{
ive_ctl_setdefault_op_t s_ive_op;
}ih264e_ctl_setdefault_op_t;
/*****************************************************************************/
/* Video control Set IPE params */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_ipe_params_ip_t s_ive_ip;
}ih264e_ctl_set_ipe_params_ip_t;
typedef struct
{
ive_ctl_set_ipe_params_op_t s_ive_op;
}ih264e_ctl_set_ipe_params_op_t;
/*****************************************************************************/
/* Video control Set Frame dimensions */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_dimensions_ip_t s_ive_ip;
}ih264e_ctl_set_dimensions_ip_t;
typedef struct
{
ive_ctl_set_dimensions_op_t s_ive_op;
}ih264e_ctl_set_dimensions_op_t;
/*****************************************************************************/
/* Video control Set Frame rates */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_frame_rate_ip_t s_ive_ip;
}ih264e_ctl_set_frame_rate_ip_t;
typedef struct
{
ive_ctl_set_frame_rate_op_t s_ive_op;
}ih264e_ctl_set_frame_rate_op_t;
/*****************************************************************************/
/* Video control Set Bitrate */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_bitrate_ip_t s_ive_ip;
}ih264e_ctl_set_bitrate_ip_t;
typedef struct
{
ive_ctl_set_bitrate_op_t s_ive_op;
}ih264e_ctl_set_bitrate_op_t;
/*****************************************************************************/
/* Video control Set Frame type */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_frame_type_ip_t s_ive_ip;
}ih264e_ctl_set_frame_type_ip_t;
typedef struct
{
ive_ctl_set_frame_type_op_t s_ive_op;
}ih264e_ctl_set_frame_type_op_t;
/*****************************************************************************/
/* Video control Set Encode mode */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_enc_mode_ip_t s_ive_ip;
}ih264e_ctl_set_enc_mode_ip_t;
typedef struct
{
ive_ctl_set_enc_mode_op_t s_ive_op;
}ih264e_ctl_set_enc_mode_op_t;
/*****************************************************************************/
/* Video control Set QP */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_qp_ip_t s_ive_ip;
}ih264e_ctl_set_qp_ip_t;
typedef struct
{
ive_ctl_set_qp_op_t s_ive_op;
}ih264e_ctl_set_qp_op_t;
/*****************************************************************************/
/* Video control Set AIR params */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_air_params_ip_t s_ive_ip;
}ih264e_ctl_set_air_params_ip_t;
typedef struct
{
ive_ctl_set_air_params_op_t s_ive_op;
}ih264e_ctl_set_air_params_op_t;
/*****************************************************************************/
/* Video control Set VBV params */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_vbv_params_ip_t s_ive_ip;
}ih264e_ctl_set_vbv_params_ip_t;
typedef struct
{
ive_ctl_set_vbv_params_op_t s_ive_op;
}ih264e_ctl_set_vbv_params_op_t;
/*****************************************************************************/
/* Video control Set Processor Details */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_num_cores_ip_t s_ive_ip;
}ih264e_ctl_set_num_cores_ip_t;
typedef struct
{
ive_ctl_set_num_cores_op_t s_ive_op;
}ih264e_ctl_set_num_cores_op_t;
/*****************************************************************************/
/* Video control Set Motion estimation params */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_me_params_ip_t s_ive_ip;
}ih264e_ctl_set_me_params_ip_t;
typedef struct
{
ive_ctl_set_me_params_op_t s_ive_op;
}ih264e_ctl_set_me_params_op_t;
/*****************************************************************************/
/* Video control Set GOP params */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_gop_params_ip_t s_ive_ip;
}ih264e_ctl_set_gop_params_ip_t;
typedef struct
{
ive_ctl_set_gop_params_op_t s_ive_op;
}ih264e_ctl_set_gop_params_op_t;
/*****************************************************************************/
/* Video control Set Deblock params */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_deblock_params_ip_t s_ive_ip;
}ih264e_ctl_set_deblock_params_ip_t;
typedef struct
{
ive_ctl_set_deblock_params_op_t s_ive_op;
}ih264e_ctl_set_deblock_params_op_t;
/*****************************************************************************/
/* Video control Set Profile params */
/*****************************************************************************/
typedef struct
{
ive_ctl_set_profile_params_ip_t s_ive_ip;
}ih264e_ctl_set_profile_params_ip_t;
typedef struct
{
ive_ctl_set_profile_params_op_t s_ive_op;
}ih264e_ctl_set_profile_params_op_t;
/*****************************************************************************/
/* Synchronous video encode call */
/*****************************************************************************/
typedef struct
{
ive_video_encode_ip_t s_ive_ip;
}ih264e_video_encode_ip_t;
typedef struct
{
ive_video_encode_op_t s_ive_op;
}ih264e_video_encode_op_t;
/* The enum values should not have greater than 8 bits as this is assigned to WORD8 */
typedef enum
{
INTRA16x16 = 0,
INTRA4x4,
INTER16x16
}IV_MB_TYPE_T;
/*****************************************************************************/
/* Pic info structures */
/*****************************************************************************/
typedef struct
{
/** Qp */
UWORD32 u4_qp;
/** Pic Type */
IV_PICTURE_CODING_TYPE_T e_frame_type;
}ih264e_pic_info1_t;
typedef struct
{
/** Qp */
UWORD32 u4_qp;
/** Pic Type */
IV_PICTURE_CODING_TYPE_T e_frame_type;
/** Disable deblock level (0: Enable completely, 3: Disable completely */
UWORD32 u4_disable_deblock_level;
}ih264e_pic_info2_t;
/*****************************************************************************/
/* MB info structures */
/*****************************************************************************/
typedef struct
{
/** MV X */
WORD16 i2_mv_x;
/** MV Y */
WORD16 i2_mv_y;
}ih264e_mv_t;
typedef struct
{
/** Intra / Inter */
WORD8 i1_mb_type;
union
{
ih264e_mv_t as_mv[1];
/** Intra mode */
WORD8 ai1_intra_mode[1];
};
}ih264e_mb_info1_t;
typedef struct
{
/** Intra / Inter */
WORD8 i1_mb_type;
/** SAD */
UWORD16 u2_sad;
union
{
ih264e_mv_t as_mv[1];
/** Intra mode */
WORD8 ai1_intra_mode[1];
};
}ih264e_mb_info2_t;
typedef struct
{
/** Intra / Inter */
WORD8 i1_mb_type;
union
{
ih264e_mv_t as_mv[4];
/** Intra mode */
WORD8 ai1_intra_mode[16];
};
}ih264e_mb_info3_t;
typedef struct
{
/** Intra / Inter */
WORD8 i1_mb_type;
/** Intra Mode */
WORD8 i1_intra_mode;
/** SAD */
UWORD16 u2_sad;
union
{
ih264e_mv_t as_mv[16];
/** Intra mode */
WORD8 ai1_intra_mode[16];
};
}ih264e_mb_info4_t;
/* Add any new structures to the following union. It is used to calculate the max size needed for allocation of memory */
typedef struct
{
union
{
ih264e_mb_info1_t s_mb_info1;
ih264e_mb_info2_t s_mb_info2;
ih264e_mb_info3_t s_mb_info3;
ih264e_mb_info4_t s_mb_info4;
};
}ih264e_mb_info_t;
#ifdef __cplusplus
} /* closing brace for extern "C" */
#endif
#endif /* _IH264E_H_ */