/******************************************************************************
 *
 * 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
*  iv.h
*
* @brief
*  This file contains all the necessary structure and  enumeration
* definitions needed for the Application  Program Interface(API) of the
* Ittiam Video and Image  codecs
*
* @author
*  100239(RCY)
*
* @par List of Functions:
*
* @remarks
*  None
*
*******************************************************************************
*/


#ifndef _IV_H
#define _IV_H

/*****************************************************************************/
/* Constant Macros                                                           */
/*****************************************************************************/


/*****************************************************************************/
/* Typedefs                                                                  */
/*****************************************************************************/

/*****************************************************************************/
/* Enums                                                                     */
/*****************************************************************************/


/* IV_API_CALL_STATUS_T:This is only to return the FAIL/PASS status to the  */
/* application for the current API call                                     */

typedef enum{
    IV_STATUS_NA                                = 0x7FFFFFFF,
    IV_SUCCESS                                  = 0x0,
    IV_FAIL                                     = 0x1,
}IV_API_CALL_STATUS_T;

/* IV_MEM_TYPE_T: This Enumeration defines the type of memory (Internal/Ext */
/* -ernal) along with the cacheable/non-cacheable attributes                */

typedef enum {
    IV_NA_MEM_TYPE                              = 0x7FFFFFFF,
    IV_INTERNAL_CACHEABLE_PERSISTENT_MEM        = 0x1,
    IV_INTERNAL_CACHEABLE_SCRATCH_MEM           = 0x2,
    IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM        = 0x3,
    IV_EXTERNAL_CACHEABLE_SCRATCH_MEM           = 0x4,
    IV_INTERNAL_NONCACHEABLE_PERSISTENT_MEM     = 0x5,
    IV_INTERNAL_NONCACHEABLE_SCRATCH_MEM        = 0x6,
    IV_EXTERNAL_NONCACHEABLE_PERSISTENT_MEM     = 0x7,
    IV_EXTERNAL_NONCACHEABLE_SCRATCH_MEM        = 0x8
}IV_MEM_TYPE_T;

/* IV_COLOR_FORMAT_T: This enumeration lists all the color formats which    */
/* finds usage in video/image codecs                                        */

typedef enum {
    IV_CHROMA_NA                            = 0x7FFFFFFF,
    IV_YUV_420P                             = 0x1,
    IV_YUV_422P                             = 0x2,
    IV_420_UV_INTL                          = 0x3,
    IV_YUV_422IBE                           = 0x4,
    IV_YUV_422ILE                           = 0x5,
    IV_YUV_444P                             = 0x6,
    IV_YUV_411P                             = 0x7,
    IV_GRAY                                 = 0x8,
    IV_RGB_565                              = 0x9,
    IV_RGB_24                               = 0xa,
    IV_YUV_420SP_UV                         = 0xb,
    IV_YUV_420SP_VU                         = 0xc,
    IV_RGBA_8888                            = 0xd
}IV_COLOR_FORMAT_T;

/* IV_PICTURE_CODING_TYPE_T: VOP/Frame coding type Enumeration              */

typedef enum {
    IV_NA_FRAME                             = 0x7FFFFFFF,
    IV_I_FRAME                              = 0x0,
    IV_P_FRAME                              = 0x1,
    IV_B_FRAME                              = 0x2,
    IV_IDR_FRAME                            = 0x3,
    IV_II_FRAME                             = 0x4,
    IV_IP_FRAME                             = 0x5,
    IV_IB_FRAME                             = 0x6,
    IV_PI_FRAME                             = 0x7,
    IV_PP_FRAME                             = 0x8,
    IV_PB_FRAME                             = 0x9,
    IV_BI_FRAME                             = 0xa,
    IV_BP_FRAME                             = 0xb,
    IV_BB_FRAME                             = 0xc,
    IV_MBAFF_I_FRAME                        = 0xd,
    IV_MBAFF_P_FRAME                        = 0xe,
    IV_MBAFF_B_FRAME                        = 0xf,
    IV_MBAFF_IDR_FRAME                      = 0x10,
    IV_NOT_CODED_FRAME                      = 0x11,
    IV_FRAMETYPE_DEFAULT                    = IV_I_FRAME
}IV_PICTURE_CODING_TYPE_T;

/* IV_FLD_TYPE_T: field type Enumeration                                    */

typedef enum {
    IV_NA_FLD                               = 0x7FFFFFFF,
    IV_TOP_FLD                              = 0x0,
    IV_BOT_FLD                              = 0x1,
    IV_FLD_TYPE_DEFAULT                     = IV_TOP_FLD
}IV_FLD_TYPE_T;

/* IV_CONTENT_TYPE_T: Video content type                                     */

typedef enum {
    IV_CONTENTTYPE_NA                       = 0x7FFFFFFF,
    IV_PROGRESSIVE                          = 0x0,
    IV_INTERLACED                           = 0x1,
    IV_PROGRESSIVE_FRAME                    = 0x2,
    IV_INTERLACED_FRAME                     = 0x3,
    IV_INTERLACED_TOPFIELD                  = 0x4,
    IV_INTERLACED_BOTTOMFIELD               = 0x5,
    IV_CONTENTTYPE_DEFAULT                  = IV_PROGRESSIVE,
}IV_CONTENT_TYPE_T;

/* IV_API_COMMAND_TYPE_T:API command type                                   */
typedef enum {
    IV_CMD_NA                           = 0x7FFFFFFF,
    IV_CMD_GET_NUM_MEM_REC              = 0x0,
    IV_CMD_FILL_NUM_MEM_REC             = 0x1,
    IV_CMD_RETRIEVE_MEMREC              = 0x2,
    IV_CMD_INIT                         = 0x3,
    IV_CMD_DUMMY_ELEMENT                = 0x4,
}IV_API_COMMAND_TYPE_T;

/*****************************************************************************/
/* Structure                                                                 */
/*****************************************************************************/

/* IV_OBJ_T: This structure defines the handle for the codec instance        */

typedef struct{
    /**
     * u4_size of the structure
     */
    UWORD32                                     u4_size;

    /**
     * Pointer to the API function pointer table of the codec
     */
    void                                        *pv_fxns;

    /**
     * Pointer to the handle of the codec
     */
    void                                        *pv_codec_handle;
}iv_obj_t;

/* iv_mem_rec_t: This structure defines the memory record holder which will  */
/* be used by the codec to communicate its memory requirements to the        */
/* application through appropriate API functions                             */

typedef struct {
    /**
     * u4_size of the structure
     */
    UWORD32                                     u4_size;

    /**
     * Pointer to the memory allocated by the application
     */
    void                                        *pv_base;

    /**
     * u4_size of the memory to be allocated
     */
    UWORD32                                     u4_mem_size;

    /**
     * Alignment of the memory pointer
     */
    UWORD32                                     u4_mem_alignment;
    /**
     * Nature of the memory to be allocated
     */
    IV_MEM_TYPE_T                               e_mem_type;
}iv_mem_rec_t;

/* IV_YUV_BUF_T: This structure defines attributes for the yuv buffer        */

typedef struct {
    /**
     * u4_size of the structure
     */
    UWORD32                                     u4_size;

    /**
     * Pointer to Luma (Y) Buffer
     */

    void                                        *pv_y_buf;
    /**
     * Pointer to Chroma (Cb) Buffer
     */
    void                                        *pv_u_buf;

    /**
     * Pointer to Chroma (Cr) Buffer
     */
    void                                        *pv_v_buf;

    /**
     * Width of the Luma (Y) Buffer
     */
    UWORD32                                     u4_y_wd;

    /**
     * Height of the Luma (Y) Buffer
     */
    UWORD32                                     u4_y_ht;

    /**
     * Stride/Pitch of the Luma (Y) Buffer
     */
    UWORD32                                     u4_y_strd;

    /**
     * Width of the Chroma (Cb) Buffer
     */
    UWORD32                                     u4_u_wd;

    /**
     * Height of the Chroma (Cb) Buffer
     */
    UWORD32                                     u4_u_ht;

    /**
     * Stride/Pitch of the Chroma (Cb) Buffer
     */
    UWORD32                                     u4_u_strd;

    /**
     * Width of the Chroma (Cr) Buffer
     */
    UWORD32                                     u4_v_wd;

    /**
     * Height of the Chroma (Cr) Buffer
     */
    UWORD32                                     u4_v_ht;

    /**
     * Stride/Pitch of the Chroma (Cr) Buffer
     */
    UWORD32                                     u4_v_strd;
}iv_yuv_buf_t;

/*****************************************************************************/
/*  Get Number of Memory Records                                             */
/*****************************************************************************/

/* IV_API_COMMAND_TYPE_T::e_cmd = IV_CMD_GET_NUM_MEM_REC                     */


typedef struct {
    /**
     * u4_size of the structure
     */
    UWORD32                                     u4_size;

    /**
     * cmd
     */
    IV_API_COMMAND_TYPE_T                       e_cmd;
}iv_num_mem_rec_ip_t;


typedef struct{
    /**
     * u4_size of the structure
     */
    UWORD32                                     u4_size;

    /**
     * error code
     */
    UWORD32                                     u4_error_code;

    /**
     * num_mem_rec
     */
    UWORD32                                     u4_num_mem_rec;
}iv_num_mem_rec_op_t;


/*****************************************************************************/
/*  Fill Memory Records                                                      */
/*****************************************************************************/

/* IV_API_COMMAND_TYPE_T::e_cmd = IV_CMD_FILL_NUM_MEM_REC                    */


typedef struct {
    /**
     * u4_size of the structure
     */
    UWORD32                                     u4_size;

    /**
     * cmd
     */
    IV_API_COMMAND_TYPE_T                       e_cmd;

    /**
     * pointer to array of memrecords structures should be filled by codec
    with details of memory resource requirements
     */
    iv_mem_rec_t                                *pv_mem_rec_location;

    /**
     * maximum width for which codec should request memory requirements
     */
    UWORD32                                     u4_max_frm_wd;

    /**
     * maximum height for which codec should request memory requirements
     */
    UWORD32                                     u4_max_frm_ht;
}iv_fill_mem_rec_ip_t;


typedef struct{
    /**
     * u4_size of the structure
     */
    UWORD32                                     u4_size;

    /**
     * error_code
     */
    UWORD32                                     u4_error_code;

    /**
     * no of memory record structures which are filled by codec
     */
    UWORD32                                     u4_num_mem_rec_filled;
}iv_fill_mem_rec_op_t;


/*****************************************************************************/
/*  Retrieve Memory Records                                                  */
/*****************************************************************************/

/* IV_API_COMMAND_TYPE_T::e_cmd = IV_CMD_RETRIEVE_MEMREC                     */



typedef struct {
    /**
     * u4_size of the structure
     */
    UWORD32                                     u4_size;

    /**
     * cmd
     */
    IV_API_COMMAND_TYPE_T                       e_cmd;

    /**
     * array of structures where codec should fill with all resources(memory) with it
     */
    iv_mem_rec_t                                *pv_mem_rec_location;
}iv_retrieve_mem_rec_ip_t;


typedef struct{
    /**
     * u4_size of the structure
     */
    UWORD32                                     u4_size;

    /**
     * error_code
     */
    UWORD32                                     u4_error_code;

    /**
     * no of memory records filled by codec
     */
    UWORD32                                     u4_num_mem_rec_filled;
}iv_retrieve_mem_rec_op_t;



#endif /* _IV_H */

