/******************************************************************************
 *
 * 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
*/
#ifndef __IMPEG2D_STRUCTS_H__
#define __IMPEG2D_STRUCTS_H__

/* Decoder needs at least 4 reference buffers in order to support format conversion in a thread and
to support B pictures. Because of format conversion in a thread, codec delay is now 2 frames instead of 1.
To reduce this delay, format conversion has to wait for MB status before converting for B pictures.
To avoid this check the delay is increased to 2 and hence number of reference frames minimum is 4.
Because of temporal dependency in deinterlacer one additional buffer is also needed */
#define NUM_INT_FRAME_BUFFERS                     5


#define MAX_WIDTH               4096
#define MAX_HEIGHT              2160

#define MIN_WIDTH               16
#define MIN_HEIGHT              16


#define MAX_FRM_SIZE            (MAX_WIDTH * MAX_HEIGHT * 2)  /* Supports only 420P and 422ILE */

#define DEC_ORDER               0

#define MAX_BITSTREAM_BUFFER_SIZE       2000 * 1024
#define MIN_BUFFER_BYTES_AT_EOS 8

/* Flag to signal that buffer is held by deinterlacing */
#define MPEG2_BUF_MGR_DEINT (BUF_MGR_DISP << 1)

typedef enum
{
    CMD_PROCESS,
    CMD_FMTCONV,
}e_jobq_cmd_t;

/**
 * Structure to represent a processing job entry
 */
typedef struct
{
    /**
     * Command
     * Currently: PROCESS, FMTCONV are the only two jobs
     */
    WORD32 i4_cmd;

    /**
     * MB y of the starting MB
     */
    WORD16 i2_start_mb_y;

    /**
     * MB y of the last MB
     */

    WORD16 i2_end_mb_y;

    /**
     * Bitstream offset for the current job
     */
    WORD32 i4_bistream_ofst;

}job_t;

typedef struct
{
    /* Params of the reference buffer used as input to MC */
    UWORD32 u4_src_wd;
    UWORD32 u4_src_offset;

    /* Params of the buffer where MC output will be written */
    UWORD32 u4_dst_wd_res_buf;
    UWORD32 u4_dst_wd_cur_frm;
    UWORD32 u4_dst_offset_res_buf;
    UWORD32 u4_dst_offset_cur_frm;

    /* Operation Parameters */
    UWORD32 u4_rows;
    UWORD32 u4_cols;
    UWORD32 u4_mode;
}comp_mc_params_t;

typedef struct
{
    yuv_buf_t        s_ref;
    comp_mc_params_t s_luma;
    comp_mc_params_t s_chroma;
}mb_mc_params_t;

struct _dec_mb_params_t;

typedef WORD32 pf_inv_quant_t (WORD16 *blk,
                                UWORD8 *weighting_matrix,
                                UWORD8 quant_scale,
                                WORD32 intra_flag,
                                WORD32 i4_num_coeffs,
                                WORD16 *pi2_coeffs,
                                UWORD8 *pu1_pos,
                                const UWORD8   *scan,
                                UWORD16 *u2_def_dc_pred,
                                UWORD16 u2_intra_dc_precision);

typedef IMPEG2D_ERROR_CODES_T  pf_vld_inv_quant_t  (void  *dec,
                             WORD16       *out_addr,
                             const UWORD8 *scan,
                             UWORD16      intra_flag,
                             UWORD16      colr_comp,
                             UWORD16      d_picture);

typedef void  pf_mc_t(void *, UWORD8 *, UWORD32 , UWORD8 *, UWORD32 ,
                 UWORD32 , UWORD32  );

typedef struct dec_state_struct_t
{
    WORD16          ai2_vld_buf[NUM_PELS_IN_BLOCK];
    WORD16          ai2_idct_stg1[NUM_PELS_IN_BLOCK];


    UWORD8          au1_intra_quant_matrix[NUM_PELS_IN_BLOCK];
    UWORD8          au1_inter_quant_matrix[NUM_PELS_IN_BLOCK];

    IMPEG2D_ERROR_CODES_T (*pf_decode_slice)(struct dec_state_struct_t *);

    pf_vld_inv_quant_t *pf_vld_inv_quant;

    pf_idct_recon_t *pf_idct_recon[4];

    pf_mc_t         *pf_mc[4];
    pf_interpred_t  *pf_fullx_halfy_8x8;
    pf_interpred_t  *pf_halfx_fully_8x8;
    pf_interpred_t  *pf_halfx_halfy_8x8;
    pf_interpred_t  *pf_fullx_fully_8x8;


    pf_interpolate_t *pf_interpolate;
    pf_copy_mb_t     *pf_copy_mb;

    pf_memset0_one_16bit_buf_t *pf_memset_16bit_8x8_linear_block;
    pf_memset_8bit_t    *pf_memset_8bit_8x8_block;
    pf_copy_yuv420p_buf_t *pf_copy_yuv420p_buf;
    pf_fmt_conv_yuv420p_to_yuv422ile_t *pf_fmt_conv_yuv420p_to_yuv422ile;
    pf_fmt_conv_yuv420p_to_yuv420sp_t  *pf_fmt_conv_yuv420p_to_yuv420sp_uv;
    pf_fmt_conv_yuv420p_to_yuv420sp_t  *pf_fmt_conv_yuv420p_to_yuv420sp_vu;

    stream_t         s_bit_stream;
/* @ */

    UWORD16         u2_is_mpeg2; /* 0 if stream is MPEG1 1 otherwise */
    UWORD16         u2_frame_width;  /* Width of the frame */
    UWORD16         u2_frame_height; /* Height of the frame */
    UWORD16         u2_picture_width;
    UWORD16         u2_horizontal_size;
    UWORD16         u2_vertical_size;
    UWORD16         u2_create_max_width;
    UWORD16         u2_create_max_height;
    UWORD16         u2_reinit_max_width;
    UWORD16         u2_reinit_max_height;
    UWORD16         u2_header_done;
    UWORD16         u2_decode_header;

    UWORD16         u2_mb_x;
    UWORD16         u2_mb_y;
    UWORD16         u2_num_horiz_mb;
    UWORD16         u2_num_vert_mb;
    UWORD16         u2_num_flds_decoded;
    void            *pv_pic_buf_mg;

    UWORD32         u4_frm_buf_stride; /* for display Buffer */

    UWORD16         u2_field_dct;
    UWORD16         u2_read_dct_type;

    UWORD16         u2_read_motion_type;
    UWORD16         u2_motion_type;

    const UWORD16   *pu2_mb_type;
    UWORD16         u2_fld_pic;
    UWORD16         u2_frm_pic;

    yuv_buf_t       s_cur_frm_buf;

    UWORD16         u2_fld_parity;
    UWORD16         u2_def_dc_pred[MAX_COLR_COMPS];

    /* Variables related to Motion Vector predictors */

    WORD16          ai2_pred_mv[2][2][2];
    e_pred_direction_t   e_mb_pred;
    UWORD16         au2_fcode_data[2];

    /* Variables related to reference pictures */
    yuv_buf_t       as_recent_fld[2][2];

    UWORD8          u1_quant_scale;
    UWORD16         u2_num_mbs_left;
    UWORD16         u2_first_mb;
    UWORD16         u2_num_skipped_mbs;

    UWORD8          *pu1_inv_scan_matrix;

    UWORD16         u2_progressive_sequence;
    e_pic_type_t         e_pic_type;

    UWORD16         u2_full_pel_forw_vector;
    UWORD16         u2_forw_f_code;
    UWORD16         u2_full_pel_back_vector;
    UWORD16         u2_back_f_code;

    WORD16          ai2_mv[2][2][2]; /* Motion vectors */

    /* Bitstream code present in Picture coding extension */
    UWORD16         au2_f_code[2][2];
    UWORD16         u2_intra_dc_precision;
    UWORD16         u2_picture_structure;
    UWORD16         u2_top_field_first;
    UWORD16         u2_frame_pred_frame_dct;
    UWORD16         u2_concealment_motion_vectors;
    UWORD16         u2_q_scale_type;
    UWORD16         u2_intra_vlc_format;
    UWORD16         u2_alternate_scan;
    UWORD16         u2_repeat_first_field;
    UWORD16         u2_progressive_frame;


    /* Bitstream code related to frame rate of the bitstream */
    UWORD16         u2_frame_rate_code;
    UWORD16         u2_frame_rate_extension_n;
    UWORD16         u2_frame_rate_extension_d;
    UWORD16         u2_framePeriod;   /* Frame period in milli seconds */

    /* Members related to display dimensions of bitstream */
    /* The size values may not be returned right now. But they are read */
    /* and can be returned if there is a requirement.                   */
    UWORD8          u1_video_format;
    UWORD8          u1_colour_description;
    UWORD8          u1_colour_primaries;
    UWORD8          u1_transfer_characteristics;
    UWORD8          u1_matrix_coefficients;
    UWORD16         u2_display_horizontal_size;
    UWORD16         u2_display_vertical_size;
    UWORD16         u2_aspect_ratio_info;

    /* Members related to motion compensation */
    yuv_buf_t       s_mc_fw_buf;
    yuv_buf_t       s_mc_bk_buf;
    yuv_buf_t       s_mc_buf;
    mb_mc_params_t  as_mb_mc_params[2][2];
    yuv_buf_t       as_ref_buf[2][2];
    e_mb_type_t       s_mb_type;

    yuv_buf_t       s_dest_buf;

    /* Variable to handle intra MB */
    UWORD16         u2_prev_intra_mb;
    UWORD16         u2_coded_mb;

    /* Bidirect function pointers */
    const struct _dec_mb_params_t *ps_func_bi_direct;

    /* Forw or Back function pointers */
    const struct _dec_mb_params_t *ps_func_forw_or_back;


    /* CBP of the current MB        */
    UWORD16         u2_cbp;
    void            *pv_video_scratch;


    /* For global error handling */
    void            *pv_stack_cntxt;

/* @ */
    WORD32          i4_chromaFormat;
    UWORD32         u4_xdmBufID;
    UWORD32         u4_num_mem_records;
    /* For holding memRecords */
    void            *pv_memTab;

    UWORD8          u1_flushfrm;
    UWORD8          u1_flushcnt;
    iv_yuv_buf_t    as_frame_buf[MAX_FRAME_BUFFER];
    iv_yuv_buf_t    ps_yuv_buf;

    ivd_get_display_frame_op_t  s_disp_op;


    UWORD32         u4_non_zero_cols;
    UWORD32         u4_non_zero_rows;

    UWORD32         u4_num_frames_decoded;

    /* Adding error code variable to signal benign errors. */
    UWORD32         u4_error_code;

    WORD32          i4_num_cores;

    UWORD8          u1_first_frame_done;

    void            *pv_codec_thread_handle;
    void            *ps_dec_state_multi_core;
#ifdef KEEP_THREADS_ACTIVE
    UWORD32         currThreadId;
    /**
     * Condition variable to signal process start
     */
    void *pv_proc_start_condition;

    /**
     * Mutex used to keep the functions thread-safe
     */
    void *pv_proc_start_mutex;

    /**
     * Condition variable to signal process done
     */
    void *pv_proc_done_condition;

    /**
     * Mutex used to keep the functions thread-safe
     */
    void *pv_proc_done_mutex;

    /**
     * Process state start- One for each thread
     */
    WORD32 ai4_process_start;

    /**
     * Process state end- One for each thread
     */
    WORD32 ai4_process_done;
#endif
    UWORD32         u4_inp_ts;
    pic_buf_t       *ps_cur_pic;
    pic_buf_t       *ps_disp_pic;
    pic_buf_t       *aps_ref_pics[2];

    WORD32          i4_disp_buf_id;
    WORD32          i4_cur_buf_id;
    iv_yuv_buf_t    *ps_disp_frm_buf;

    UWORD32         u4_share_disp_buf;
    void            *pv_pic_buf_base;

    disp_mgr_t      s_disp_mgr;
    UWORD8          *pu1_chroma_ref_buf[BUF_MGR_MAX_CNT];
    ivd_out_bufdesc_t as_disp_buffers[BUF_MGR_MAX_CNT];

    /* Count the number of pictures decoded after init/reset */
    WORD32          i4_pic_count;

    /* Flag to signal last coeff in a 8x8 block is one
    after mismatch contol */
    WORD32          i4_last_value_one;

    WORD32          i4_start_mb_y;
    WORD32          i4_end_mb_y;

    /* Buffer to store the input stream */
    UWORD8 *pu1_input_buffer;

    /**
     * Job queue buffer base
     */
    void            *pv_jobq_buf;

    /**
     * Job Queue mem tab size
     */
    WORD32          i4_jobq_buf_size;

    /**
     * Job Queue context
     */
    void            *pv_jobq;

    /* Pointer to input bitstream */
    UWORD8          *pu1_inp_bits_buf;

    /* Number of bytes in the input bitstream */
    UWORD32         u4_num_inp_bytes;

    ivd_out_bufdesc_t *ps_out_buf;

    /* Bytes consumed */
    WORD32          i4_bytes_consumed;

    IVD_ARCH_T      e_processor_arch;

    IVD_SOC_T       e_processor_soc;

    WORD32          i4_frame_decoded;

    /** Flag to enable deinterlace */
    UWORD32          u4_deinterlace;

    /** Deinterlacer context */
    void            *pv_deinterlacer_ctxt;

    /** Picture buffer held by deinterlacer */
    pic_buf_t       *ps_deint_pic;

    /** Buffer used after deinterlacer for format conversion */
    UWORD8          *pu1_deint_fmt_buf;

    /** Flag to indicate if Seq Display Extn is present */
    UWORD8          u1_seq_disp_extn_present;
}dec_state_t;




typedef void (*func_decmb_params)(dec_state_t *);
typedef void  (*mc_funcs)(dec_state_t *);
typedef struct _dec_mb_params_t
{
    func_decmb_params    pf_func_mb_params;
    e_mb_type_t            s_mb_type;
    mc_funcs             pf_mc;
}dec_mb_params_t;



#define MAX_THREADS     4


#define MAX_MB_ROWS     (MAX_HEIGHT / 16) // number of rows for 1080p

typedef struct _dec_state_multi_core
{
    // contains the decoder state of decoder for each of the max (MAX_THREADS-1) threads
    // ps_dec_state[0] and au4_thread_launched[0] are used for main thread
    dec_state_t *ps_dec_state[MAX_THREADS];
    UWORD32     au4_thread_launched[MAX_THREADS];
    // number of rows: first thread will populate the row offsets and update
    // row_offset_cnt. Other threads should pick up offset from this thread
    // and start decoding
    UWORD32     au4_row_offset[MAX_MB_ROWS];
    volatile    UWORD32 u4_row_offset_cnt;
#ifdef KEEP_THREADS_ACTIVE
    /**
     * Flag to signal processing thread to exit
     */
    WORD32 i4_break_threads;
#endif
}dec_state_multi_core_t;



#endif /* #ifndef __IMPEG2D_STRUCTS_H__ */
