1aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/******************************************************************************
2aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
3aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Copyright (C) 2015 The Android Open Source Project
4aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
5aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Licensed under the Apache License, Version 2.0 (the "License");
6aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * you may not use this file except in compliance with the License.
7aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * You may obtain a copy of the License at:
8aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
9aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * http://www.apache.org/licenses/LICENSE-2.0
10aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
11aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Unless required by applicable law or agreed to in writing, software
12aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * distributed under the License is distributed on an "AS IS" BASIS,
13aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * See the License for the specific language governing permissions and
15aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * limitations under the License.
16aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *
17aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani *****************************************************************************
18aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani*/
20aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#ifndef __IMPEG2D_STRUCTS_H__
21aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define __IMPEG2D_STRUCTS_H__
22aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
23903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar/* Decoder needs at least 4 reference buffers in order to support format conversion in a thread and
24903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakarto support B pictures. Because of format conversion in a thread, codec delay is now 2 frames instead of 1.
25903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish MahendrakarTo reduce this delay, format conversion has to wait for MB status before converting for B pictures.
26903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish MahendrakarTo avoid this check the delay is increased to 2 and hence number of reference frames minimum is 4.
27903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish MahendrakarBecause of temporal dependency in deinterlacer one additional buffer is also needed */
288520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define NUM_INT_FRAME_BUFFERS                     5
29903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar
30903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar
31903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar#define MAX_WIDTH               4096
32903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar#define MAX_HEIGHT              2160
33903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar
34903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar#define MIN_WIDTH               16
35903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar#define MIN_HEIGHT              16
36903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar
37903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar
38903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar#define MAX_FRM_SIZE            (MAX_WIDTH * MAX_HEIGHT * 2)  /* Supports only 420P and 422ILE */
39903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar
40903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar#define DEC_ORDER               0
41903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar
42903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar#define MAX_BITSTREAM_BUFFER_SIZE       2000 * 1024
43903fd2be3063609dd3cd7ad0691de46c1b52b7d1Harish Mahendrakar
448520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/* Flag to signal that buffer is held by deinterlacing */
458520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#define MPEG2_BUF_MGR_DEINT (BUF_MGR_DISP << 1)
468520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
47aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef enum
48aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
49aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CMD_PROCESS,
50aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    CMD_FMTCONV,
51aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}e_jobq_cmd_t;
52aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
53aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/**
54aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani * Structure to represent a processing job entry
55aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani */
56aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef struct
57aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
58aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /**
59aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     * Command
60aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     * Currently: PROCESS, FMTCONV are the only two jobs
61aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     */
62aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_cmd;
63aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
64aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /**
65aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     * MB y of the starting MB
66aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     */
67aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD16 i2_start_mb_y;
68aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
69aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /**
70aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     * MB y of the last MB
71aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     */
72aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
73aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD16 i2_end_mb_y;
74aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
75aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /**
76aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     * Bitstream offset for the current job
77aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     */
78aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32 i4_bistream_ofst;
79aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
80aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}job_t;
81aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
82aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef struct
83aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
84aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Params of the reference buffer used as input to MC */
85aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_src_wd;
86aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_src_offset;
87aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
88aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Params of the buffer where MC output will be written */
89aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_dst_wd_res_buf;
90aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_dst_wd_cur_frm;
91aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_dst_offset_res_buf;
92aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_dst_offset_cur_frm;
93aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
94aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Operation Parameters */
95aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_rows;
96aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_cols;
97aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32 u4_mode;
98aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}comp_mc_params_t;
99aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
100aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef struct
101aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
102aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    yuv_buf_t        s_ref;
103aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    comp_mc_params_t s_luma;
104aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    comp_mc_params_t s_chroma;
105aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}mb_mc_params_t;
106aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
107aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanistruct _dec_mb_params_t;
108aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
109aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef UWORD8 pf_inv_quant_t (WORD16 *blk,
110aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                UWORD8 *weighting_matrix,
111aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                UWORD8 quant_scale,
112aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                WORD32 intra_flag,
113aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                WORD32 i4_num_coeffs,
114aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                WORD16 *pi2_coeffs,
115aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                UWORD8 *pu1_pos,
116aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                const UWORD8   *scan,
117aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                UWORD16 *u2_def_dc_pred,
118aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                                UWORD16 u2_intra_dc_precision);
119aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
120aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef IMPEG2D_ERROR_CODES_T  pf_vld_inv_quant_t  (void  *dec,
121aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                             WORD16       *out_addr,
122aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                             const UWORD8 *scan,
123aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                             UWORD16      intra_flag,
124aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                             UWORD16      colr_comp,
125aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                             UWORD16      d_picture);
126aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
127aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef void  pf_mc_t(void *, UWORD8 *, UWORD32 , UWORD8 *, UWORD32 ,
128aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani                 UWORD32 , UWORD32  );
129aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
130aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef struct dec_state_struct_t
131aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
132aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD16          ai2_vld_buf[NUM_PELS_IN_BLOCK];
133aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD16          ai2_idct_stg1[NUM_PELS_IN_BLOCK];
134aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
135aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
136aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD8          au1_intra_quant_matrix[NUM_PELS_IN_BLOCK];
137aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD8          au1_inter_quant_matrix[NUM_PELS_IN_BLOCK];
138aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
139aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IMPEG2D_ERROR_CODES_T (*pf_decode_slice)(struct dec_state_struct_t *);
140aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
141aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_vld_inv_quant_t *pf_vld_inv_quant;
142aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
143aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_idct_recon_t *pf_idct_recon[4];
144aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
145aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_mc_t         *pf_mc[4];
146aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_interpred_t  *pf_fullx_halfy_8x8;
147aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_interpred_t  *pf_halfx_fully_8x8;
148aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_interpred_t  *pf_halfx_halfy_8x8;
149aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_interpred_t  *pf_fullx_fully_8x8;
150aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
151aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
152aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_interpolate_t *pf_interpolate;
153aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_copy_mb_t     *pf_copy_mb;
154aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
155aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_memset0_one_16bit_buf_t *pf_memset_16bit_8x8_linear_block;
156aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_memset_8bit_t    *pf_memset_8bit_8x8_block;
157aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_copy_yuv420p_buf_t *pf_copy_yuv420p_buf;
158aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_fmt_conv_yuv420p_to_yuv422ile_t *pf_fmt_conv_yuv420p_to_yuv422ile;
159aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_fmt_conv_yuv420p_to_yuv420sp_t  *pf_fmt_conv_yuv420p_to_yuv420sp_uv;
160aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pf_fmt_conv_yuv420p_to_yuv420sp_t  *pf_fmt_conv_yuv420p_to_yuv420sp_vu;
161aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
162aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    stream_t         s_bit_stream;
163aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* @ */
164aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
165aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_is_mpeg2; /* 0 if stream is MPEG1 1 otherwise */
166aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_frame_width;  /* Width of the frame */
167aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_frame_height; /* Height of the frame */
168aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_picture_width;
169aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_horizontal_size;
170aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_vertical_size;
171aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_create_max_width;
172aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_create_max_height;
173aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_reinit_max_width;
174aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_reinit_max_height;
175aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_header_done;
176aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_decode_header;
177aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
178aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_mb_x;
179aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_mb_y;
180aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_num_horiz_mb;
181aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_num_vert_mb;
182aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_num_flds_decoded;
183aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void            *pv_pic_buf_mg;
184aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
185aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32         u4_frm_buf_stride; /* for display Buffer */
186aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
187aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_field_dct;
188aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_read_dct_type;
189aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
190aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_read_motion_type;
191aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_motion_type;
192aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
193aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    const UWORD16   *pu2_mb_type;
194aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_fld_pic;
195aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_frm_pic;
196aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
197aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    yuv_buf_t       s_cur_frm_buf;
198aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
199aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_fld_parity;
200aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_def_dc_pred[MAX_COLR_COMPS];
201aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
202aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Variables related to Motion Vector predictors */
203aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
204aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD16          ai2_pred_mv[2][2][2];
205aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_pred_direction_t   e_mb_pred;
206aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         au2_fcode_data[2];
207aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
208aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Variables related to reference pictures */
209aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    yuv_buf_t       as_recent_fld[2][2];
210aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
211aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD8          u1_quant_scale;
212aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_num_mbs_left;
213aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_first_mb;
214aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_num_skipped_mbs;
215aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
216aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD8          *pu1_inv_scan_matrix;
217aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
218aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_progressive_sequence;
219aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_pic_type_t         e_pic_type;
220aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
221aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_full_pel_forw_vector;
222aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_forw_f_code;
223aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_full_pel_back_vector;
224aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_back_f_code;
225aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
226aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD16          ai2_mv[2][2][2]; /* Motion vectors */
227aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
228aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Bitstream code present in Picture coding extension */
229aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         au2_f_code[2][2];
230aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_intra_dc_precision;
231aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_picture_structure;
232aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_top_field_first;
233aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_frame_pred_frame_dct;
234aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_concealment_motion_vectors;
235aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_q_scale_type;
236aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_intra_vlc_format;
237aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_alternate_scan;
238aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_repeat_first_field;
239aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_progressive_frame;
240aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
241aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
242aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Bitstream code related to frame rate of the bitstream */
243aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_frame_rate_code;
244aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_frame_rate_extension_n;
245aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_frame_rate_extension_d;
246aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_framePeriod;   /* Frame period in milli seconds */
247aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
248aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Members related to display dimensions of bitstream */
249aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* The size values may not be returned right now. But they are read */
250aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* and can be returned if there is a requirement.                   */
251aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_display_horizontal_size;
252aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_display_vertical_size;
253aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_aspect_ratio_info;
254aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
255aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Members related to motion compensation */
256aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    yuv_buf_t       s_mc_fw_buf;
257aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    yuv_buf_t       s_mc_bk_buf;
258aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    yuv_buf_t       s_mc_buf;
259aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    mb_mc_params_t  as_mb_mc_params[2][2];
260aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    yuv_buf_t       as_ref_buf[2][2];
261aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_mb_type_t       s_mb_type;
262aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
263aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    yuv_buf_t       s_dest_buf;
264aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
265aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Variable to handle intra MB */
266aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_prev_intra_mb;
267aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_coded_mb;
268aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
269aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Bidirect function pointers */
270aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    const struct _dec_mb_params_t *ps_func_bi_direct;
271aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
272aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Forw or Back function pointers */
273aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    const struct _dec_mb_params_t *ps_func_forw_or_back;
274aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
275aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
276aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* CBP of the current MB        */
277aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD16         u2_cbp;
278aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void            *pv_video_scratch;
279aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
280aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
281aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* For global error handling */
282aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void            *pv_stack_cntxt;
283aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
284aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani/* @ */
285aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32          i4_chromaFormat;
286aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32         u4_xdmBufID;
287aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32         u4_num_mem_records;
288aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* For holding memRecords */
289aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void            *pv_memTab;
290aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
291aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD8          u1_flushfrm;
292aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD8          u1_flushcnt;
293aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    iv_yuv_buf_t    as_frame_buf[MAX_FRAME_BUFFER];
294aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    iv_yuv_buf_t    ps_yuv_buf;
295aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
296aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_get_display_frame_op_t  s_disp_op;
297aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
298aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
299aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32         u4_non_zero_cols;
300aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32         u4_non_zero_rows;
301aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
302aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32         u4_num_frames_decoded;
303aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
304aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Adding error code variable to signal benign errors. */
305aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32         u4_error_code;
306aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
307aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32          i4_num_cores;
308aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
309aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD8          u1_first_frame_done;
310aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
311aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void            *pv_codec_thread_handle;
312aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void            *ps_dec_state_multi_core;
313aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32         u4_inp_ts;
314aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pic_buf_t       *ps_cur_pic;
315aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pic_buf_t       *ps_disp_pic;
316aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    pic_buf_t       *aps_ref_pics[2];
317aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
318aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32          i4_disp_buf_id;
319aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32          i4_cur_buf_id;
320aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    iv_yuv_buf_t    *ps_disp_frm_buf;
321aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
322aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32         u4_share_disp_buf;
323aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void            *pv_pic_buf_base;
324aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
325aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    disp_mgr_t      s_disp_mgr;
326aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD8          *pu1_chroma_ref_buf[BUF_MGR_MAX_CNT];
327aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    ivd_out_bufdesc_t as_disp_buffers[BUF_MGR_MAX_CNT];
328aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
329aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Flag to signal last coeff in a 8x8 block is one
330aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    after mismatch contol */
331aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32          i4_last_value_one;
332aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
333aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32          i4_start_mb_y;
334aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32          i4_end_mb_y;
335aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
336aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /**
337aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     * Job queue buffer base
338aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     */
339aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void            *pv_jobq_buf;
340aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
341aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /**
342aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     * Job Queue mem tab size
343aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     */
344aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32          i4_jobq_buf_size;
345aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
346aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /**
347aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     * Job Queue context
348aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani     */
349aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    void            *pv_jobq;
350aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
351aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Pointer to input bitstream */
352aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD8          *pu1_inp_bits_buf;
353aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
354aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Number of bytes in the input bitstream */
355aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32         u4_num_inp_bytes;
356aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
357aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    /* Bytes consumed */
358aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32          i4_bytes_consumed;
359aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
360aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IVD_ARCH_T      e_processor_arch;
361aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
362aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    IVD_SOC_T       e_processor_soc;
363aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
364aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    WORD32          i4_frame_decoded;
365aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
3668520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    /** Flag to enable deinterlace */
3678520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    UWORD32          u4_deinterlace;
3688520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
3698520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    /** Deinterlacer context */
3708520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    void            *pv_deinterlacer_ctxt;
3718520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
3728520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    /** Picture buffer held by deinterlacer */
3738520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    pic_buf_t       *ps_deint_pic;
3748520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
3758520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    /** Buffer used after deinterlacer for format conversion */
3768520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar    UWORD8          *pu1_deint_fmt_buf;
3778520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar
378aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}dec_state_t;
379aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
380aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
381aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
382aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
383aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef void (*func_decmb_params)(dec_state_t *);
384aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef void  (*mc_funcs)(dec_state_t *);
385aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef struct _dec_mb_params_t
386aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
387aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    func_decmb_params    pf_func_mb_params;
388aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    e_mb_type_t            s_mb_type;
389aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    mc_funcs             pf_mc;
390aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}dec_mb_params_t;
391aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
392aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
393aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
394aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define MAX_THREADS     4
395aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
396aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
397aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#define MAX_MB_ROWS     (MAX_HEIGHT / 16) // number of rows for 1080p
398aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
399aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhanitypedef struct _dec_state_multi_core
400aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani{
401aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    // contains the decoder state of decoder for each thread
402aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    dec_state_t *ps_dec_state[MAX_THREADS];
403aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32     au4_thread_launched[MAX_THREADS];
404aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    // number of rows: first thread will populate the row offsets and update
405aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    // row_offset_cnt. Other threads should pick up offset from this thread
406aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    // and start decoding
407aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    UWORD32     au4_row_offset[MAX_MB_ROWS];
408aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani    volatile    UWORD32 u4_row_offset_cnt;
409aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani}dec_state_multi_core_t;
410aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
411aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
412aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani
413aed24eee7ddfc93f1436b0c1679431bd286879b4Venkatarama Avadhani#endif /* #ifndef __IMPEG2D_STRUCTS_H__ */
414