xref: /aosp_15_r20/external/libopenapv/src/oapv_def.h (revision abb65b4b03b69e1d508d4d9a44dcf199df16e7c3)
1*abb65b4bSAndroid Build Coastguard Worker /*
2*abb65b4bSAndroid Build Coastguard Worker  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3*abb65b4bSAndroid Build Coastguard Worker  * All Rights Reserved.
4*abb65b4bSAndroid Build Coastguard Worker  *
5*abb65b4bSAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
6*abb65b4bSAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions are met:
7*abb65b4bSAndroid Build Coastguard Worker  *
8*abb65b4bSAndroid Build Coastguard Worker  * - Redistributions of source code must retain the above copyright notice,
9*abb65b4bSAndroid Build Coastguard Worker  *   this list of conditions and the following disclaimer.
10*abb65b4bSAndroid Build Coastguard Worker  *
11*abb65b4bSAndroid Build Coastguard Worker  * - Redistributions in binary form must reproduce the above copyright notice,
12*abb65b4bSAndroid Build Coastguard Worker  *   this list of conditions and the following disclaimer in the documentation
13*abb65b4bSAndroid Build Coastguard Worker  *   and/or other materials provided with the distribution.
14*abb65b4bSAndroid Build Coastguard Worker  *
15*abb65b4bSAndroid Build Coastguard Worker  * - Neither the name of the copyright owner, nor the names of its contributors
16*abb65b4bSAndroid Build Coastguard Worker  *   may be used to endorse or promote products derived from this software
17*abb65b4bSAndroid Build Coastguard Worker  *   without specific prior written permission.
18*abb65b4bSAndroid Build Coastguard Worker  *
19*abb65b4bSAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20*abb65b4bSAndroid Build Coastguard Worker  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21*abb65b4bSAndroid Build Coastguard Worker  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22*abb65b4bSAndroid Build Coastguard Worker  * ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23*abb65b4bSAndroid Build Coastguard Worker  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24*abb65b4bSAndroid Build Coastguard Worker  * CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25*abb65b4bSAndroid Build Coastguard Worker  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*abb65b4bSAndroid Build Coastguard Worker  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27*abb65b4bSAndroid Build Coastguard Worker  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28*abb65b4bSAndroid Build Coastguard Worker  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29*abb65b4bSAndroid Build Coastguard Worker  * POSSIBILITY OF SUCH DAMAGE.
30*abb65b4bSAndroid Build Coastguard Worker  */
31*abb65b4bSAndroid Build Coastguard Worker 
32*abb65b4bSAndroid Build Coastguard Worker #ifndef _OAPV_DEF_H_4738294732894739280473892473829_
33*abb65b4bSAndroid Build Coastguard Worker #define _OAPV_DEF_H_4738294732894739280473892473829_
34*abb65b4bSAndroid Build Coastguard Worker 
35*abb65b4bSAndroid Build Coastguard Worker #ifndef ENABLE_ENCODER
36*abb65b4bSAndroid Build Coastguard Worker #define ENABLE_ENCODER 1 // for enabling encoder functionality
37*abb65b4bSAndroid Build Coastguard Worker #endif
38*abb65b4bSAndroid Build Coastguard Worker 
39*abb65b4bSAndroid Build Coastguard Worker #ifndef ENABLE_DECODER
40*abb65b4bSAndroid Build Coastguard Worker #define ENABLE_DECODER 1 // for enabling decoder functionality
41*abb65b4bSAndroid Build Coastguard Worker #endif
42*abb65b4bSAndroid Build Coastguard Worker 
43*abb65b4bSAndroid Build Coastguard Worker #include "oapv.h"
44*abb65b4bSAndroid Build Coastguard Worker #include "oapv_port.h"
45*abb65b4bSAndroid Build Coastguard Worker #include "oapv_tpool.h"
46*abb65b4bSAndroid Build Coastguard Worker 
47*abb65b4bSAndroid Build Coastguard Worker /* oapv encoder magic code */
48*abb65b4bSAndroid Build Coastguard Worker #define OAPVE_MAGIC_CODE          0x41503145 /* AP1E */
49*abb65b4bSAndroid Build Coastguard Worker 
50*abb65b4bSAndroid Build Coastguard Worker /* oapv decoder magic code */
51*abb65b4bSAndroid Build Coastguard Worker #define OAPVD_MAGIC_CODE          0x41503144 /* AP1D */
52*abb65b4bSAndroid Build Coastguard Worker 
53*abb65b4bSAndroid Build Coastguard Worker /* Max. and min. Quantization parameter */
54*abb65b4bSAndroid Build Coastguard Worker #define MAX_QUANT                 63
55*abb65b4bSAndroid Build Coastguard Worker #define MIN_QUANT                 0
56*abb65b4bSAndroid Build Coastguard Worker 
57*abb65b4bSAndroid Build Coastguard Worker #define MAX_COST                  (1.7e+308) /* maximum cost value */
58*abb65b4bSAndroid Build Coastguard Worker 
59*abb65b4bSAndroid Build Coastguard Worker #define Y_C                       0 /* Y luma */
60*abb65b4bSAndroid Build Coastguard Worker #define U_C                       1 /* Cb Chroma */
61*abb65b4bSAndroid Build Coastguard Worker #define V_C                       2 /* Cr Chroma */
62*abb65b4bSAndroid Build Coastguard Worker #define X_C                       3 /* X channel */
63*abb65b4bSAndroid Build Coastguard Worker #define N_C                       4 /* maximum number of color component */
64*abb65b4bSAndroid Build Coastguard Worker 
65*abb65b4bSAndroid Build Coastguard Worker #define OAPV_VLC_TREE_LEVEL       2
66*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MIN_DC_LEVEL_CTX     0
67*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MAX_DC_LEVEL_CTX     5
68*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MIN_AC_LEVEL_CTX     0
69*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MAX_AC_LEVEL_CTX     4
70*abb65b4bSAndroid Build Coastguard Worker 
71*abb65b4bSAndroid Build Coastguard Worker /* need to check */
72*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MAX_TILE_ROWS        20
73*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MAX_TILE_COLS        20
74*abb65b4bSAndroid Build Coastguard Worker #define OAPV_MAX_TILES            (OAPV_MAX_TILE_ROWS * OAPV_MAX_TILE_COLS)
75*abb65b4bSAndroid Build Coastguard Worker 
76*abb65b4bSAndroid Build Coastguard Worker /* Maximum transform dynamic range (excluding sign bit) */
77*abb65b4bSAndroid Build Coastguard Worker #define MAX_TX_DYNAMIC_RANGE      15
78*abb65b4bSAndroid Build Coastguard Worker #define MAX_TX_VAL                ((1 << MAX_TX_DYNAMIC_RANGE) - 1)
79*abb65b4bSAndroid Build Coastguard Worker #define MIN_TX_VAL                (-(1 << MAX_TX_DYNAMIC_RANGE))
80*abb65b4bSAndroid Build Coastguard Worker 
81*abb65b4bSAndroid Build Coastguard Worker #define QUANT_SHIFT               14
82*abb65b4bSAndroid Build Coastguard Worker #define QUANT_DQUANT_SHIFT        20
83*abb65b4bSAndroid Build Coastguard Worker 
84*abb65b4bSAndroid Build Coastguard Worker /* encoder status */
85*abb65b4bSAndroid Build Coastguard Worker #define ENC_TILE_STAT_NOT_ENCODED 0
86*abb65b4bSAndroid Build Coastguard Worker #define ENC_TILE_STAT_ON_ENCODING 1
87*abb65b4bSAndroid Build Coastguard Worker #define ENC_TILE_STAT_ENCODED     2
88*abb65b4bSAndroid Build Coastguard Worker 
89*abb65b4bSAndroid Build Coastguard Worker /*****************************************************************************
90*abb65b4bSAndroid Build Coastguard Worker  * PBU data structure
91*abb65b4bSAndroid Build Coastguard Worker  *****************************************************************************/
92*abb65b4bSAndroid Build Coastguard Worker typedef struct oapv_pbuh oapv_pbuh_t;
93*abb65b4bSAndroid Build Coastguard Worker struct oapv_pbuh { // 4-byte
94*abb65b4bSAndroid Build Coastguard Worker     int pbu_type;  /* u( 8) */
95*abb65b4bSAndroid Build Coastguard Worker     int group_id;  /* u(16) */
96*abb65b4bSAndroid Build Coastguard Worker     // int reserved_zero_8bits                    /* u( 8) */
97*abb65b4bSAndroid Build Coastguard Worker };
98*abb65b4bSAndroid Build Coastguard Worker 
99*abb65b4bSAndroid Build Coastguard Worker /*****************************************************************************
100*abb65b4bSAndroid Build Coastguard Worker  * Frame info
101*abb65b4bSAndroid Build Coastguard Worker  *****************************************************************************/
102*abb65b4bSAndroid Build Coastguard Worker typedef struct oapv_fi oapv_fi_t;
103*abb65b4bSAndroid Build Coastguard Worker struct oapv_fi {     // 112byte
104*abb65b4bSAndroid Build Coastguard Worker     int profile_idc; /* u( 8) */
105*abb65b4bSAndroid Build Coastguard Worker     int level_idc;   /* u( 8) */
106*abb65b4bSAndroid Build Coastguard Worker     int band_idc;    /* u( 3) */
107*abb65b4bSAndroid Build Coastguard Worker     // int            reserved_zero_5bits;                     /* u( 5) */
108*abb65b4bSAndroid Build Coastguard Worker     u32 frame_width;           /* u(32) */
109*abb65b4bSAndroid Build Coastguard Worker     u32 frame_height;          /* u(32) */
110*abb65b4bSAndroid Build Coastguard Worker     int chroma_format_idc;     /* u( 4) */
111*abb65b4bSAndroid Build Coastguard Worker     int bit_depth;             /* u( 4) */
112*abb65b4bSAndroid Build Coastguard Worker     int capture_time_distance; /* u( 8) */
113*abb65b4bSAndroid Build Coastguard Worker     // int            reserved_zero_8bits;                     /* u( 8) */
114*abb65b4bSAndroid Build Coastguard Worker };
115*abb65b4bSAndroid Build Coastguard Worker 
116*abb65b4bSAndroid Build Coastguard Worker /*****************************************************************************
117*abb65b4bSAndroid Build Coastguard Worker  * Frame header
118*abb65b4bSAndroid Build Coastguard Worker  *****************************************************************************/
119*abb65b4bSAndroid Build Coastguard Worker typedef struct oapv_fh oapv_fh_t;
120*abb65b4bSAndroid Build Coastguard Worker struct oapv_fh {
121*abb65b4bSAndroid Build Coastguard Worker     oapv_fi_t fi;
122*abb65b4bSAndroid Build Coastguard Worker     // int reserved_zero_8bits_3;                 /* u( 8) */
123*abb65b4bSAndroid Build Coastguard Worker     int       color_description_present_flag; /* u( 1) */
124*abb65b4bSAndroid Build Coastguard Worker     int       color_primaries;                /* u( 8) */
125*abb65b4bSAndroid Build Coastguard Worker     int       transfer_characteristics;       /* u( 8) */
126*abb65b4bSAndroid Build Coastguard Worker     int       matrix_coefficients;            /* u( 8) */
127*abb65b4bSAndroid Build Coastguard Worker     int       use_q_matrix;                   /* u( 1) */
128*abb65b4bSAndroid Build Coastguard Worker     /* (start) quantization_matix  */
129*abb65b4bSAndroid Build Coastguard Worker     int       q_matrix[N_C][OAPV_BLK_H][OAPV_BLK_W]; /* u( 8) minus 1*/
130*abb65b4bSAndroid Build Coastguard Worker     /* ( end ) quantization_matix  */
131*abb65b4bSAndroid Build Coastguard Worker     /* (start) tile_info */
132*abb65b4bSAndroid Build Coastguard Worker     int       tile_width_in_mbs;            /* u(28) minus 1*/
133*abb65b4bSAndroid Build Coastguard Worker     int       tile_height_in_mbs;           /* u(28) minus 1*/
134*abb65b4bSAndroid Build Coastguard Worker     int       tile_size_present_in_fh_flag; /* u( 1) */
135*abb65b4bSAndroid Build Coastguard Worker     u32       tile_size[OAPV_MAX_TILES];    /* u(32) */
136*abb65b4bSAndroid Build Coastguard Worker     /* ( end ) tile_info  */
137*abb65b4bSAndroid Build Coastguard Worker     // int reserved_zero_8bits_4;                   /* u( 8) */
138*abb65b4bSAndroid Build Coastguard Worker };
139*abb65b4bSAndroid Build Coastguard Worker 
140*abb65b4bSAndroid Build Coastguard Worker /*****************************************************************************
141*abb65b4bSAndroid Build Coastguard Worker  * Tile header
142*abb65b4bSAndroid Build Coastguard Worker  *****************************************************************************/
143*abb65b4bSAndroid Build Coastguard Worker #define OAPV_TILE_SIZE_LEN 4 /* u(32), 4byte */
144*abb65b4bSAndroid Build Coastguard Worker typedef struct oapv_th oapv_th_t;
145*abb65b4bSAndroid Build Coastguard Worker struct oapv_th {
146*abb65b4bSAndroid Build Coastguard Worker     int tile_header_size;    /* u(16) */
147*abb65b4bSAndroid Build Coastguard Worker     int tile_index;          /* u(16) */
148*abb65b4bSAndroid Build Coastguard Worker     u32 tile_data_size[N_C]; /* u(32) */
149*abb65b4bSAndroid Build Coastguard Worker     int tile_qp[N_C];        /* u( 8) */
150*abb65b4bSAndroid Build Coastguard Worker     int reserved_zero_8bits; /* u( 8) */
151*abb65b4bSAndroid Build Coastguard Worker };
152*abb65b4bSAndroid Build Coastguard Worker 
153*abb65b4bSAndroid Build Coastguard Worker /*****************************************************************************
154*abb65b4bSAndroid Build Coastguard Worker  * Access unit info
155*abb65b4bSAndroid Build Coastguard Worker  *****************************************************************************/
156*abb65b4bSAndroid Build Coastguard Worker typedef struct oapv_aui oapv_aui_t;
157*abb65b4bSAndroid Build Coastguard Worker struct oapv_aui {
158*abb65b4bSAndroid Build Coastguard Worker     int       num_frames;                    // u(16)
159*abb65b4bSAndroid Build Coastguard Worker     int       pbu_type[OAPV_MAX_NUM_FRAMES]; // u(8)
160*abb65b4bSAndroid Build Coastguard Worker     int       group_id[OAPV_MAX_NUM_FRAMES]; // u(16)
161*abb65b4bSAndroid Build Coastguard Worker     // int reserved_zero_8bits[OAPV_MAX_NUM_FRAMES]; // u(8)
162*abb65b4bSAndroid Build Coastguard Worker     oapv_fi_t frame_info[OAPV_MAX_NUM_FRAMES];
163*abb65b4bSAndroid Build Coastguard Worker     // int reserved_zero_8bits // u(8)
164*abb65b4bSAndroid Build Coastguard Worker };
165*abb65b4bSAndroid Build Coastguard Worker 
166*abb65b4bSAndroid Build Coastguard Worker ///////////////////////////////////////////////////////////////////////////////
167*abb65b4bSAndroid Build Coastguard Worker // start of encoder code
168*abb65b4bSAndroid Build Coastguard Worker #if ENABLE_ENCODER
169*abb65b4bSAndroid Build Coastguard Worker ///////////////////////////////////////////////////////////////////////////////
170*abb65b4bSAndroid Build Coastguard Worker /*****************************************************************************
171*abb65b4bSAndroid Build Coastguard Worker  * pre-declaration
172*abb65b4bSAndroid Build Coastguard Worker  *****************************************************************************/
173*abb65b4bSAndroid Build Coastguard Worker typedef struct oapve_ctx  oapve_ctx_t;
174*abb65b4bSAndroid Build Coastguard Worker typedef struct oapve_core oapve_core_t;
175*abb65b4bSAndroid Build Coastguard Worker 
176*abb65b4bSAndroid Build Coastguard Worker /*****************************************************************************
177*abb65b4bSAndroid Build Coastguard Worker  * pre-defined function structure
178*abb65b4bSAndroid Build Coastguard Worker  *****************************************************************************/
179*abb65b4bSAndroid Build Coastguard Worker typedef void (*oapv_fn_itx_part_t)(s16 *coef, s16 *t, int shift, int line);
180*abb65b4bSAndroid Build Coastguard Worker typedef void (*oapv_fn_itx_t)(s16 *coef, int shift1, int shift2, int line);
181*abb65b4bSAndroid Build Coastguard Worker typedef void (*oapv_fn_tx_t)(s16 *coef, s16 *t, int shift, int line);
182*abb65b4bSAndroid Build Coastguard Worker typedef void (*oapv_fn_itx_adj_t)(int *src, int *dst, int itrans_diff_idx, int diff_step, int shift);
183*abb65b4bSAndroid Build Coastguard Worker typedef int (*oapv_fn_quant_t)(s16 *coef, u8 qp, int q_matrix[OAPV_BLK_D], int log2_w, int log2_h, int bit_depth, int deadzone_offset);
184*abb65b4bSAndroid Build Coastguard Worker typedef void (*oapv_fn_dquant_t)(s16 *coef, s16 q_matrix[OAPV_BLK_D], int log2_w, int log2_h, s8 shift);
185*abb65b4bSAndroid Build Coastguard Worker typedef int (*oapv_fn_sad_t)(int w, int h, void *src1, void *src2, int s_src1, int s_src2, int bit_depth);
186*abb65b4bSAndroid Build Coastguard Worker typedef s64 (*oapv_fn_ssd_t)(int w, int h, void *src1, void *src2, int s_src1, int s_src2, int bit_depth);
187*abb65b4bSAndroid Build Coastguard Worker typedef void (*oapv_fn_diff_t)(int w, int h, void *src1, void *src2, int s_src1, int s_src2, int s_diff, s16 *diff, int bit_depth);
188*abb65b4bSAndroid Build Coastguard Worker 
189*abb65b4bSAndroid Build Coastguard Worker typedef double (*oapv_fn_block_cost_t)(oapve_ctx_t *ctx, oapve_core_t *core, int log2_w, int log2_h, int c);
190*abb65b4bSAndroid Build Coastguard Worker typedef void (*oapv_fn_imgb_to_block_rc)(oapv_imgb_t *imgb, int c, int x_l, int y_l, int w_l, int h_l, s16 *block);
191*abb65b4bSAndroid Build Coastguard Worker typedef void (*oapv_fn_imgb_to_block)(void *src, int blk_w, int blk_h, int s_src, int offset_src, int s_dst, void *dst);
192*abb65b4bSAndroid Build Coastguard Worker typedef void (*oapv_fn_block_to_imgb)(void *src, int blk_w, int blk_h, int s_src, int offset_dst, int s_dst, void *dst);
193*abb65b4bSAndroid Build Coastguard Worker typedef void (*oapv_fn_img_pad)(oapve_ctx_t *ctx, oapv_imgb_t *imgb);
194*abb65b4bSAndroid Build Coastguard Worker typedef int (*oapv_fn_had8x8)(pel *org, int s_org);
195*abb65b4bSAndroid Build Coastguard Worker 
196*abb65b4bSAndroid Build Coastguard Worker /*****************************************************************************
197*abb65b4bSAndroid Build Coastguard Worker  * rate-control related
198*abb65b4bSAndroid Build Coastguard Worker  *****************************************************************************/
199*abb65b4bSAndroid Build Coastguard Worker typedef struct oapve_rc_param {
200*abb65b4bSAndroid Build Coastguard Worker     double alpha;
201*abb65b4bSAndroid Build Coastguard Worker     double beta;
202*abb65b4bSAndroid Build Coastguard Worker 
203*abb65b4bSAndroid Build Coastguard Worker     int    qp;
204*abb65b4bSAndroid Build Coastguard Worker     double lambda;
205*abb65b4bSAndroid Build Coastguard Worker     double cost;
206*abb65b4bSAndroid Build Coastguard Worker } oapve_rc_param_t;
207*abb65b4bSAndroid Build Coastguard Worker 
208*abb65b4bSAndroid Build Coastguard Worker typedef struct oapve_rc_tile {
209*abb65b4bSAndroid Build Coastguard Worker     int              qp;
210*abb65b4bSAndroid Build Coastguard Worker     int              target_bits;
211*abb65b4bSAndroid Build Coastguard Worker     double           lambda;
212*abb65b4bSAndroid Build Coastguard Worker     int              number_pixel;
213*abb65b4bSAndroid Build Coastguard Worker     double           cost;
214*abb65b4bSAndroid Build Coastguard Worker     int              target_bits_left;
215*abb65b4bSAndroid Build Coastguard Worker 
216*abb65b4bSAndroid Build Coastguard Worker     u64              total_dist;
217*abb65b4bSAndroid Build Coastguard Worker     oapve_rc_param_t rc_param;
218*abb65b4bSAndroid Build Coastguard Worker } oapve_rc_tile_t;
219*abb65b4bSAndroid Build Coastguard Worker 
220*abb65b4bSAndroid Build Coastguard Worker /*****************************************************************************
221*abb65b4bSAndroid Build Coastguard Worker  * CORE information used for encoding process.
222*abb65b4bSAndroid Build Coastguard Worker  *
223*abb65b4bSAndroid Build Coastguard Worker  * The variables in this structure are very often used in encoding process.
224*abb65b4bSAndroid Build Coastguard Worker  *****************************************************************************/
225*abb65b4bSAndroid Build Coastguard Worker struct oapve_core {
226*abb65b4bSAndroid Build Coastguard Worker     ALIGNED_16(s16 coef[OAPV_BLK_D]);
227*abb65b4bSAndroid Build Coastguard Worker     ALIGNED_16(s16 coef_rec[OAPV_BLK_D]);
228*abb65b4bSAndroid Build Coastguard Worker     oapve_ctx_t *ctx;
229*abb65b4bSAndroid Build Coastguard Worker     int          prev_dc_ctx[N_C];
230*abb65b4bSAndroid Build Coastguard Worker     int          prev_1st_ac_ctx[N_C];
231*abb65b4bSAndroid Build Coastguard Worker     int          tile_idx;
232*abb65b4bSAndroid Build Coastguard Worker     int          prev_dc[N_C];
233*abb65b4bSAndroid Build Coastguard Worker 
234*abb65b4bSAndroid Build Coastguard Worker     int          qp[N_C]; // QPs for Y, Cb(U), Cr(V)
235*abb65b4bSAndroid Build Coastguard Worker     int          dq_shift[N_C];
236*abb65b4bSAndroid Build Coastguard Worker 
237*abb65b4bSAndroid Build Coastguard Worker     int          q_mat_enc[N_C][OAPV_BLK_D];
238*abb65b4bSAndroid Build Coastguard Worker     s16          q_mat_dec[N_C][OAPV_BLK_D];
239*abb65b4bSAndroid Build Coastguard Worker     int          thread_idx;
240*abb65b4bSAndroid Build Coastguard Worker     /* platform specific data, if needed */
241*abb65b4bSAndroid Build Coastguard Worker     void        *pf;
242*abb65b4bSAndroid Build Coastguard Worker };
243*abb65b4bSAndroid Build Coastguard Worker 
244*abb65b4bSAndroid Build Coastguard Worker #include "oapv_bs.h"
245*abb65b4bSAndroid Build Coastguard Worker 
246*abb65b4bSAndroid Build Coastguard Worker typedef struct oapve_tile oapve_tile_t;
247*abb65b4bSAndroid Build Coastguard Worker struct oapve_tile {
248*abb65b4bSAndroid Build Coastguard Worker     oapv_th_t       th;
249*abb65b4bSAndroid Build Coastguard Worker 
250*abb65b4bSAndroid Build Coastguard Worker     int             x; /* x (column) position in a frame in unit of pixel */
251*abb65b4bSAndroid Build Coastguard Worker     int             y; /* y (row) position in a frame in unit of pixel */
252*abb65b4bSAndroid Build Coastguard Worker     int             w; /* tile width in unit of pixel */
253*abb65b4bSAndroid Build Coastguard Worker     int             h; /* tile height in unit of pixel */
254*abb65b4bSAndroid Build Coastguard Worker     u32             tile_size;
255*abb65b4bSAndroid Build Coastguard Worker     oapve_rc_tile_t rc;
256*abb65b4bSAndroid Build Coastguard Worker     u8             *bs_buf;
257*abb65b4bSAndroid Build Coastguard Worker     s32             bs_size;
258*abb65b4bSAndroid Build Coastguard Worker     u32             bs_buf_max;
259*abb65b4bSAndroid Build Coastguard Worker     volatile s32    stat;
260*abb65b4bSAndroid Build Coastguard Worker };
261*abb65b4bSAndroid Build Coastguard Worker 
262*abb65b4bSAndroid Build Coastguard Worker /******************************************************************************
263*abb65b4bSAndroid Build Coastguard Worker  * CONTEXT used for encoding process.
264*abb65b4bSAndroid Build Coastguard Worker  *
265*abb65b4bSAndroid Build Coastguard Worker  * All have to be stored are in this structure.
266*abb65b4bSAndroid Build Coastguard Worker  *****************************************************************************/
267*abb65b4bSAndroid Build Coastguard Worker struct oapve_ctx {
268*abb65b4bSAndroid Build Coastguard Worker     u32                       magic; // magic code
269*abb65b4bSAndroid Build Coastguard Worker     oapve_t                   id;    // identifier
270*abb65b4bSAndroid Build Coastguard Worker     oapve_cdesc_t             cdesc;
271*abb65b4bSAndroid Build Coastguard Worker     oapv_imgb_t              *imgb;
272*abb65b4bSAndroid Build Coastguard Worker     oapv_imgb_t              *rec;
273*abb65b4bSAndroid Build Coastguard Worker 
274*abb65b4bSAndroid Build Coastguard Worker     oapve_param_t            *param;
275*abb65b4bSAndroid Build Coastguard Worker     oapv_fh_t                 fh;
276*abb65b4bSAndroid Build Coastguard Worker     oapve_tile_t              tile[OAPV_MAX_TILES];
277*abb65b4bSAndroid Build Coastguard Worker     int                       num_tiles;
278*abb65b4bSAndroid Build Coastguard Worker     int                       num_tile_cols;
279*abb65b4bSAndroid Build Coastguard Worker     int                       num_tile_rows;
280*abb65b4bSAndroid Build Coastguard Worker     int                       qp[N_C];
281*abb65b4bSAndroid Build Coastguard Worker     int                       w;
282*abb65b4bSAndroid Build Coastguard Worker     int                       h;
283*abb65b4bSAndroid Build Coastguard Worker     int                       cfi;
284*abb65b4bSAndroid Build Coastguard Worker     int                       num_comp;
285*abb65b4bSAndroid Build Coastguard Worker     int                       bit_depth;
286*abb65b4bSAndroid Build Coastguard Worker     int                       comp_sft[N_C][2];
287*abb65b4bSAndroid Build Coastguard Worker     int                       log2_block;
288*abb65b4bSAndroid Build Coastguard Worker     oapv_tpool_t             *tpool;
289*abb65b4bSAndroid Build Coastguard Worker     oapv_thread_t             thread_id[OAPV_MAX_THREADS];
290*abb65b4bSAndroid Build Coastguard Worker     oapv_sync_obj_t           sync_obj;
291*abb65b4bSAndroid Build Coastguard Worker     oapve_core_t             *core[OAPV_MAX_THREADS];
292*abb65b4bSAndroid Build Coastguard Worker 
293*abb65b4bSAndroid Build Coastguard Worker     oapv_bs_t                 bs;
294*abb65b4bSAndroid Build Coastguard Worker     const oapv_fn_itx_part_t *fn_itx_part;
295*abb65b4bSAndroid Build Coastguard Worker     const oapv_fn_itx_t      *fn_itx;
296*abb65b4bSAndroid Build Coastguard Worker     const oapv_fn_itx_adj_t  *fn_itx_adj;
297*abb65b4bSAndroid Build Coastguard Worker     const oapv_fn_tx_t       *fn_txb;
298*abb65b4bSAndroid Build Coastguard Worker     const oapv_fn_quant_t    *fn_quant;
299*abb65b4bSAndroid Build Coastguard Worker     const oapv_fn_dquant_t   *fn_dquant;
300*abb65b4bSAndroid Build Coastguard Worker     const oapv_fn_sad_t      *fn_sad;
301*abb65b4bSAndroid Build Coastguard Worker     const oapv_fn_ssd_t      *fn_ssd;
302*abb65b4bSAndroid Build Coastguard Worker     const oapv_fn_diff_t     *fn_diff;
303*abb65b4bSAndroid Build Coastguard Worker     oapv_fn_imgb_to_block_rc  fn_imgb_to_block_rc;
304*abb65b4bSAndroid Build Coastguard Worker     oapv_fn_imgb_to_block     fn_imgb_to_block[N_C];
305*abb65b4bSAndroid Build Coastguard Worker     oapv_fn_block_to_imgb     fn_block_to_imgb[N_C];
306*abb65b4bSAndroid Build Coastguard Worker     oapv_fn_img_pad           fn_img_pad;
307*abb65b4bSAndroid Build Coastguard Worker     oapv_fn_block_cost_t      fn_block;
308*abb65b4bSAndroid Build Coastguard Worker     oapv_fn_had8x8            fn_had8x8;
309*abb65b4bSAndroid Build Coastguard Worker     int                       use_frm_hash;
310*abb65b4bSAndroid Build Coastguard Worker     void                     *tx_tbl;
311*abb65b4bSAndroid Build Coastguard Worker 
312*abb65b4bSAndroid Build Coastguard Worker     oapve_rc_param_t          rc_param;
313*abb65b4bSAndroid Build Coastguard Worker 
314*abb65b4bSAndroid Build Coastguard Worker     /* platform specific data, if needed */
315*abb65b4bSAndroid Build Coastguard Worker     void                     *pf;
316*abb65b4bSAndroid Build Coastguard Worker };
317*abb65b4bSAndroid Build Coastguard Worker ///////////////////////////////////////////////////////////////////////////////
318*abb65b4bSAndroid Build Coastguard Worker // end of encoder code
319*abb65b4bSAndroid Build Coastguard Worker #endif // ENABLE_ENCODER
320*abb65b4bSAndroid Build Coastguard Worker ///////////////////////////////////////////////////////////////////////////////
321*abb65b4bSAndroid Build Coastguard Worker 
322*abb65b4bSAndroid Build Coastguard Worker ///////////////////////////////////////////////////////////////////////////////
323*abb65b4bSAndroid Build Coastguard Worker // start of decoder code
324*abb65b4bSAndroid Build Coastguard Worker #if ENABLE_DECODER
325*abb65b4bSAndroid Build Coastguard Worker ///////////////////////////////////////////////////////////////////////////////
326*abb65b4bSAndroid Build Coastguard Worker #define DEC_TILE_STAT_NOT_DECODED 0
327*abb65b4bSAndroid Build Coastguard Worker #define DEC_TILE_STAT_ON_DECODING 1
328*abb65b4bSAndroid Build Coastguard Worker #define DEC_TILE_STAT_DECODED     2
329*abb65b4bSAndroid Build Coastguard Worker #define DEC_TILE_STAT_SIZE_ERROR  -1
330*abb65b4bSAndroid Build Coastguard Worker 
331*abb65b4bSAndroid Build Coastguard Worker typedef struct oapvd_tile oapvd_tile_t;
332*abb65b4bSAndroid Build Coastguard Worker struct oapvd_tile {
333*abb65b4bSAndroid Build Coastguard Worker     oapv_th_t    th;
334*abb65b4bSAndroid Build Coastguard Worker 
335*abb65b4bSAndroid Build Coastguard Worker     int          x;         /* x (column) position in a frame in unit of pixel */
336*abb65b4bSAndroid Build Coastguard Worker     int          y;         /* y (row) position in a frame in unit of pixel */
337*abb65b4bSAndroid Build Coastguard Worker     int          w;         /* tile width in unit of pixel */
338*abb65b4bSAndroid Build Coastguard Worker     int          h;         /* tile height in unit of pixel */
339*abb65b4bSAndroid Build Coastguard Worker     u32          data_size; /* tile size including tile_size_minus1 syntax */
340*abb65b4bSAndroid Build Coastguard Worker 
341*abb65b4bSAndroid Build Coastguard Worker     u8          *bs_beg; /* start position of tile in input bistream */
342*abb65b4bSAndroid Build Coastguard Worker     u8          *bs_end; /* end position of tile() in input bistream */
343*abb65b4bSAndroid Build Coastguard Worker     volatile s32 stat;   // decoding status
344*abb65b4bSAndroid Build Coastguard Worker };
345*abb65b4bSAndroid Build Coastguard Worker 
346*abb65b4bSAndroid Build Coastguard Worker typedef struct oapvd_core oapvd_core_t;
347*abb65b4bSAndroid Build Coastguard Worker typedef struct oapvd_ctx  oapvd_ctx_t;
348*abb65b4bSAndroid Build Coastguard Worker 
349*abb65b4bSAndroid Build Coastguard Worker struct oapvd_core {
350*abb65b4bSAndroid Build Coastguard Worker     ALIGNED_16(s16 coef[OAPV_MB_D]);
351*abb65b4bSAndroid Build Coastguard Worker     oapvd_ctx_t *ctx;
352*abb65b4bSAndroid Build Coastguard Worker 
353*abb65b4bSAndroid Build Coastguard Worker     int          prev_dc_ctx[N_C];
354*abb65b4bSAndroid Build Coastguard Worker     int          prev_1st_ac_ctx[N_C];
355*abb65b4bSAndroid Build Coastguard Worker     int          prev_dc[N_C];
356*abb65b4bSAndroid Build Coastguard Worker     int          qp[N_C];
357*abb65b4bSAndroid Build Coastguard Worker     int          dq_shift[N_C];
358*abb65b4bSAndroid Build Coastguard Worker     s16          q_mat[N_C][OAPV_BLK_D];
359*abb65b4bSAndroid Build Coastguard Worker 
360*abb65b4bSAndroid Build Coastguard Worker     int          tile_idx;
361*abb65b4bSAndroid Build Coastguard Worker 
362*abb65b4bSAndroid Build Coastguard Worker     /* platform specific data, if needed */
363*abb65b4bSAndroid Build Coastguard Worker     void        *pf;
364*abb65b4bSAndroid Build Coastguard Worker };
365*abb65b4bSAndroid Build Coastguard Worker 
366*abb65b4bSAndroid Build Coastguard Worker struct oapvd_ctx {
367*abb65b4bSAndroid Build Coastguard Worker     u32                     magic; // magic code
368*abb65b4bSAndroid Build Coastguard Worker     oapvd_t                 id;    // identifier
369*abb65b4bSAndroid Build Coastguard Worker 
370*abb65b4bSAndroid Build Coastguard Worker     oapvd_cdesc_t           cdesc;
371*abb65b4bSAndroid Build Coastguard Worker     oapvd_core_t           *core[OAPV_MAX_THREADS];
372*abb65b4bSAndroid Build Coastguard Worker     oapv_imgb_t            *imgb;
373*abb65b4bSAndroid Build Coastguard Worker     const oapv_fn_itx_t    *fn_itx;
374*abb65b4bSAndroid Build Coastguard Worker     const oapv_fn_dquant_t *fn_dquant;
375*abb65b4bSAndroid Build Coastguard Worker     oapv_fn_block_to_imgb   fn_block_to_imgb[N_C];
376*abb65b4bSAndroid Build Coastguard Worker     oapv_bs_t               bs;
377*abb65b4bSAndroid Build Coastguard Worker 
378*abb65b4bSAndroid Build Coastguard Worker     oapv_fh_t               fh;
379*abb65b4bSAndroid Build Coastguard Worker     oapvd_tile_t            tile[OAPV_MAX_TILES];
380*abb65b4bSAndroid Build Coastguard Worker 
381*abb65b4bSAndroid Build Coastguard Worker     u8                     *tile_end;
382*abb65b4bSAndroid Build Coastguard Worker     int                     num_tiles;
383*abb65b4bSAndroid Build Coastguard Worker     int                     num_tile_cols;
384*abb65b4bSAndroid Build Coastguard Worker     int                     num_tile_rows;
385*abb65b4bSAndroid Build Coastguard Worker     int                     w;
386*abb65b4bSAndroid Build Coastguard Worker     int                     h;
387*abb65b4bSAndroid Build Coastguard Worker     oapv_tpool_t           *tpool;
388*abb65b4bSAndroid Build Coastguard Worker     oapv_thread_t           thread_id[OAPV_MAX_THREADS];
389*abb65b4bSAndroid Build Coastguard Worker     oapv_sync_obj_t         sync_obj;
390*abb65b4bSAndroid Build Coastguard Worker     int                     cfi;              // chroma format indicator
391*abb65b4bSAndroid Build Coastguard Worker     int                     bit_depth;        // bit depth of decoding picture
392*abb65b4bSAndroid Build Coastguard Worker     int                     num_comp;         // number of components
393*abb65b4bSAndroid Build Coastguard Worker     int                     comp_sft[N_C][2]; // width or height shift value of each compoents, 0: width, 1: height
394*abb65b4bSAndroid Build Coastguard Worker     int                     use_frm_hash;
395*abb65b4bSAndroid Build Coastguard Worker 
396*abb65b4bSAndroid Build Coastguard Worker     /* platform specific data, if needed */
397*abb65b4bSAndroid Build Coastguard Worker     void                   *pf;
398*abb65b4bSAndroid Build Coastguard Worker };
399*abb65b4bSAndroid Build Coastguard Worker ///////////////////////////////////////////////////////////////////////////////
400*abb65b4bSAndroid Build Coastguard Worker // end of decoder code
401*abb65b4bSAndroid Build Coastguard Worker #endif // ENABLE_DECODER
402*abb65b4bSAndroid Build Coastguard Worker ///////////////////////////////////////////////////////////////////////////////
403*abb65b4bSAndroid Build Coastguard Worker 
404*abb65b4bSAndroid Build Coastguard Worker #define OAPV_FRAME_INFO_BYTE (112)
405*abb65b4bSAndroid Build Coastguard Worker #define OAPV_PBU_HEADER_BYTE (32)
406*abb65b4bSAndroid Build Coastguard Worker 
407*abb65b4bSAndroid Build Coastguard Worker #include "oapv_metadata.h"
408*abb65b4bSAndroid Build Coastguard Worker #include "oapv_vlc.h"
409*abb65b4bSAndroid Build Coastguard Worker #include "oapv_tq.h"
410*abb65b4bSAndroid Build Coastguard Worker #include "oapv_util.h"
411*abb65b4bSAndroid Build Coastguard Worker #include "oapv_tbl.h"
412*abb65b4bSAndroid Build Coastguard Worker #include "oapv_rc.h"
413*abb65b4bSAndroid Build Coastguard Worker #include "oapv_sad.h"
414*abb65b4bSAndroid Build Coastguard Worker 
415*abb65b4bSAndroid Build Coastguard Worker #if X86_SSE
416*abb65b4bSAndroid Build Coastguard Worker #include "sse/oapv_sad_sse.h"
417*abb65b4bSAndroid Build Coastguard Worker #include "sse/oapv_tq_sse.h"
418*abb65b4bSAndroid Build Coastguard Worker #include "avx/oapv_sad_avx.h"
419*abb65b4bSAndroid Build Coastguard Worker #include "avx/oapv_tq_avx.h"
420*abb65b4bSAndroid Build Coastguard Worker #elif ARM_NEON
421*abb65b4bSAndroid Build Coastguard Worker #include "neon/oapv_sad_neon.h"
422*abb65b4bSAndroid Build Coastguard Worker #include "neon/oapv_tq_neon.h"
423*abb65b4bSAndroid Build Coastguard Worker #endif
424*abb65b4bSAndroid Build Coastguard Worker 
425*abb65b4bSAndroid Build Coastguard Worker #endif /* _OAPV_DEF_H_4738294732894739280473892473829_ */
426