/******************************************************************************
*
* Copyright (C) 2018 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 ihevce_plugin.h
*
* \brief
* This file contains plugin interface definations and structures
*
* \date
* 15/04/2014
*
* \author
* Ittiam
*
*
* List of Functions
*
*
******************************************************************************
*/
#ifndef _IHEVCE_PLUGIN_H_
#define _IHEVCE_PLUGIN_H_
#ifdef __cplusplus
extern "C"
{
#endif
/*****************************************************************************/
/* File Includes */
/*****************************************************************************/
/*****************************************************************************/
/* Constant Macros */
/*****************************************************************************/
#define MAX_INP_PLANES 3
/*****************************************************************************/
/* Typedefs */
/*****************************************************************************/
/*****************************************************************************/
/* Enums */
/*****************************************************************************/
typedef enum
{
IHEVCE_EFAIL = 0xFFFFFFFF,
IHEVCE_EOK = 0
} IHEVCE_PLUGIN_STATUS_T;
/*****************************************************************************/
/* Structure */
/*****************************************************************************/
typedef struct
{
/* input buffer pointers */
void *apv_inp_planes[MAX_INP_PLANES];
/* input buffer strides */
WORD32 ai4_inp_strd[MAX_INP_PLANES];
/* input buffer size */
WORD32 ai4_inp_size[MAX_INP_PLANES];
/* PTS of the input */
ULWORD64 u8_pts;
/* Current bitrate*/
WORD32 i4_curr_bitrate;
/* Current peak bitrate*/
WORD32 i4_curr_peak_bitrate;
/* Current rate factor*/
WORD32 i4_curr_rate_factor;
} ihevce_inp_buf_t;
typedef struct
{
/* Output buffer pointer (if set to NULL then no output is sent out from encoder) */
UWORD8 *pu1_output_buf;
/* Number of bytes generated in the buffer */
WORD32 i4_bytes_generated;
/* Key frame flag */
WORD32 i4_is_key_frame;
/* PTS of the output */
ULWORD64 u8_pts;
/* DTS of the output */
LWORD64 i8_dts;
/* Flag to check if last output buffer sent from encoder */
WORD32 i4_end_flag;
} ihevce_out_buf_t;
/*****************************************************************************/
/* Extern Variable Declarations */
/*****************************************************************************/
/*****************************************************************************/
/* Extern Function Declarations */
/*****************************************************************************/
IHEVCE_PLUGIN_STATUS_T ihevce_set_def_params(ihevce_static_cfg_params_t *ps_params);
IHEVCE_PLUGIN_STATUS_T ihevce_init(ihevce_static_cfg_params_t *ps_params, void **ppv_ihevce_hdl);
IHEVCE_PLUGIN_STATUS_T ihevce_encode_header(void *pv_ihevce_hdl, ihevce_out_buf_t *ps_out);
IHEVCE_PLUGIN_STATUS_T
ihevce_encode(void *pv_ihevce_hdl, ihevce_inp_buf_t *ps_inp, ihevce_out_buf_t *ps_out);
IHEVCE_PLUGIN_STATUS_T ihevce_close(void *pv_ihevce_hdl);
void ihevce_init_sys_api(void *pv_cb_handle, ihevce_sys_api_t *ps_sys_api);
#ifdef __cplusplus
}
#endif
#endif /* _IHEVCE_PLUGIN_H_ */