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



#endif /* _IV_H */