/******************************************************************************
 *
 * 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_lap_structs.h
*
* @brief
*  This file contains structure definitions related to look-ahead processing
*
* @author
*  ittiam
*
******************************************************************************
*/

#ifndef _IHEVCE_LAP_STRUCTS_H_
#define _IHEVCE_LAP_STRUCTS_H_

/*****************************************************************************/
/* Constant Macros                                                           */
/*****************************************************************************/
#define EVAL_VERSION 0
#define EVAL_MODE_FORCE_LOGO 0
#define MAX_FRAMES_EVAL_VERSION 50000
#define LAP_DEBUG_PRINT 0
#define FORCE_IDR_TEST 1
#define MAX_NUM_ENC_NODES 8
#define MAX_QUEUE_LENGTH (MAX_LAP_WINDOW_SIZE + MAX_SUB_GOP_SIZE + 2)

/*****************************************************************************/
/* Enums                                                                     */
/*****************************************************************************/
typedef enum
{
    LAP_CTXT = 0,
    LAP_NODE_MEM,
    NUM_LAP_MEM_RECS,
} LAP_MEM_T;

/*****************************************************************************/
/* Structures                                                                */
/*****************************************************************************/

/* Picture types */
typedef enum PIC_TYPE_E
{
    PIC_TYPE_NA = -1, /* Invalid frame type*/
    PIC_TYPE_I, /* I frame */
    PIC_TYPE_P, /* P frame */
    PIC_TYPE_B, /* B frame */
    PIC_TYPE_IDR, /* IDR frame */
    PIC_TYPE_CRA, /* CRA frame */
    MAX_NUM_PIC_TYPES
} PIC_TYPE_E;

typedef struct ihevce_encode_node_t
{
    WORD32 data;
    void *pv_left_node;
    void *pv_right_node;
    WORD32 i4_hierachical_layer;
    WORD32 i4_interlace_field;
    ihevce_lap_enc_buf_t *ps_lap_top_buff;
    ihevce_lap_enc_buf_t *ps_lap_bottom_buff;

} ihevce_encode_node_t;

/**
******************************************************************************
 *  @brief  lap context
******************************************************************************
 */
typedef struct
{
    // cfg params
    ihevce_static_cfg_params_t s_static_cfg_params;
    ihevce_lap_static_params_t s_lap_static_params;

    //pic reorder info
    ihevce_lap_enc_buf_t *aps_lap_inp_buf[MAX_QUEUE_LENGTH];

    ihevce_encode_node_t *aps_encode_node[1];

    /** Array of nodes in encode order*/
    ihevce_lap_enc_buf_t *api4_encode_order_array[MAX_NUM_ENC_NODES];

    /** Array of nodes in capture order*/
    ihevce_lap_enc_buf_t *api4_capture_order_array[MAX_NUM_ENC_NODES];

    /**Array of POCS in encode order*/
    WORD32 ai4_encode_order_poc[MAX_NUM_ENC_NODES];

    /**Array of POCS in capture order*/
    WORD32 ai4_capture_order_poc[MAX_NUM_ENC_NODES];

    /** Pointer to POC in encode order*/
    WORD32 *pi4_encode_poc_ptr;

    /** Pointer to POC in capture order*/
    WORD32 *pi4_capture_poc_ptr;

    WORD32 ai4_pic_type_to_be_removed[NUM_LAP2_LOOK_AHEAD];

    void *pv_prev_inp_buf;

    WORD32 i4_buf_enq_idx;
    WORD32 i4_buf_deq_idx;
    WORD32 i4_lap_out_idx;
    WORD32 i4_capture_idx;
    WORD32 i4_idr_flag;
    WORD32 i4_num_bufs_encode_order;
    WORD32 i4_deq_idx;
    WORD32 i4_enq_idx;
    // poc info
    WORD32 ref_poc_array[MAX_REF_PICS];
    WORD8 ai1_pic_type[10];
    WORD32 i4_curr_poc;
    WORD32 i4_cra_poc;
    WORD32 i4_assoc_IRAP_poc;
    // counters
    WORD32 i4_max_idr_period;
    WORD32 i4_min_idr_period;
    WORD32 i4_max_cra_period;
    WORD32 i4_max_i_period;
    WORD32 i4_idr_counter;
    WORD32 i4_cra_counter;
    WORD32 i4_i_counter;
    WORD32 i4_idr_gop_num;
    WORD32 i4_curr_ref_pics;
    WORD32 i4_display_num;
    WORD32 i4_num_frames_after_force_idr;
    WORD32 i4_num_frm_type_decided;
    WORD32 i4_frm_gop_idx;
    WORD32 i4_is_all_i_pic_in_seq;
    WORD32 i4_next_start_ctr;
    WORD32 i4_fixed_open_gop_period;
    WORD32 i4_fixed_i_period;
    // misc
    WORD32 i4_enable_logo;
    WORD32 i4_cra_i_pic_flag;
    WORD32 i4_force_end_flag;
    WORD32 i4_sub_gop_size;
    WORD32 i4_sub_gop_size_idr;
    WORD32 i4_dyn_sub_gop_size;
    WORD32 end_flag;
    WORD32 i4_immediate_idr_case;
    WORD32 i4_max_buf_in_enc_order;
    WORD32 i4_end_flag_pic_idx;
    WORD32 i4_lap2_counter;
    WORD32 i4_rc_lap_period;
    WORD32 i4_gop_period;
    WORD32 i4_no_back_to_back_i_avoidance;
} lap_struct_t;

void ihevce_populate_tree_nodes(
    ihevce_encode_node_t *encode_parent_node_t,
    ihevce_encode_node_t *encode_node_t,
    WORD32 *loop_count,
    WORD32 layer,
    WORD32 hier_layer);

#endif /* _IHEVCE_LAP_STRUCTS_H_ */
