C++程序  |  145行  |  4.54 KB

/******************************************************************************
 *
 * 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_ */