Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/gallium/frontends/omx/bellagio/vid_dec_av1.h
4565 views
1
/**************************************************************************
2
*
3
* Copyright 2020 Advanced Micro Devices, Inc.
4
* All Rights Reserved.
5
*
6
* Permission is hereby granted, free of charge, to any person obtaining a
7
* copy of this software and associated documentation files (the
8
* "Software"), to deal in the Software without restriction, including
9
* without limitation the rights to use, copy, modify, merge, publish,
10
* distribute, sub license, and/or sell copies of the Software, and to
11
* permit persons to whom the Software is furnished to do so, subject to
12
* the following conditions:
13
*
14
* The above copyright notice and this permission notice (including the
15
* next paragraph) shall be included in all copies or substantial portions
16
* of the Software.
17
*
18
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21
* IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
22
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
*
26
**************************************************************************/
27
28
#ifndef VID_DEC_AV1_H
29
#define VID_DEC_AV1_H
30
31
#include "os/os_thread.h"
32
33
enum av1_obu_type {
34
AV1_OBU_SEQUENCE_HEADER = 1,
35
AV1_OBU_TEMPORAL_DELIMITER,
36
AV1_OBU_FRAME_HEADER,
37
AV1_OBU_TILE_GROUP,
38
AV1_OBU_METADATA,
39
AV1_OBU_FRAME,
40
AV1_OBU_REDUNDANT_FRAME_HEADER,
41
AV1_OBU_TILE_LIST,
42
AV1_OBU_PADDING = 15
43
};
44
45
enum av1_obu_frame_type {
46
AV1_KEY_FRAME = 0,
47
AV1_INTER_FRAME,
48
AV1_INTRA_ONLY_FRAME,
49
AV1_SWITCH_FRAME
50
};
51
52
enum av1_obu_color_primary {
53
AV1_CP_BT_709 = 1,
54
AV1_CP_UNSPECIFIED,
55
AV1_CP_BT_470_M = 4,
56
AV1_CP_BT_470_B_G,
57
AV1_CP_BT_601,
58
AV1_CP_SMPTE_240,
59
AV1_CP_GENERIC_FILM,
60
AV1_CP_BT_2020,
61
AV1_CP_XYZ,
62
AV1_CP_SMPTE_431,
63
AV1_CP_SMPTE_432,
64
AV1_CP_EBU_3213 = 22
65
};
66
67
enum av1_obu_transfer_characteristic {
68
AV1_TC_RESERVED_0 = 0,
69
AV1_TC_BT_709,
70
AV1_TC_UNSPECIFIED,
71
AV1_TC_RESERVED_3,
72
AV1_TC_BT_470_M,
73
AV1_TC_BT_470_B_G,
74
AV1_TC_BT_601,
75
AV1_TC_SMPTE_240,
76
AV1_TC_LINEAR,
77
AV1_TC_LOG_100,
78
AV1_TC_LOG_100_SQRT10,
79
AV1_TC_IEC_61966,
80
AV1_TC_BT_1361,
81
AV1_TC_SRGB,
82
AV1_TC_BT_2020_10_BIT,
83
AV1_TC_BT_2020_12_BIT,
84
AV1_TC_SMPTE_2084,
85
AV1_TC_SMPTE_428,
86
AV1_TC_HLG
87
};
88
89
enum av1_obu_matrix_coefficient {
90
AV1_MC_IDENTITY = 0,
91
AV1_MC_BT_709,
92
AV1_MC_UNSPECIFIED,
93
AV1_MC_RESERVED_3,
94
AV1_MC_FCC,
95
AV1_MC_BT_470_B_G,
96
AV1_MC_BT_601,
97
AV1_MC_SMPTE_240,
98
AV1_MC_SMPTE_YCGCO,
99
AV1_MC_BT_2020_NCL,
100
AV1_MC_BT_2020_CL,
101
AV1_MC_SMPTE_2085,
102
AV1_MC_CHROMAT_NCL,
103
AV1_MC_CHROMAT_CL,
104
AV1_MC_ICTCP
105
};
106
107
enum av1_obu_seg_lvl {
108
AV1_SEG_LVL_ALT_Q = 0,
109
AV1_SEG_LVL_ALT_LF_Y_V,
110
AV1_SEG_LVL_REF_FRAME = 5,
111
AV1_SEG_LVL_SKIP,
112
AV1_SEG_LVL_GLOBALMV,
113
AV1_SEG_LVL_MAX
114
};
115
116
enum av1_obu_lrtype {
117
AV1_RESTORE_NONE = 0,
118
AV1_RESTORE_WIENER,
119
AV1_RESTORE_SGRPROJ,
120
AV1_RESTORE_SWITCHABLE
121
};
122
123
enum av1_obu_txmode {
124
AV1_ONLY_4X4 = 0,
125
AV1_TX_MODE_LARGEST,
126
AV1_TX_MODE_SELECT
127
};
128
129
enum av1_obu_gmtype {
130
AV1_IDENTITY = 0,
131
AV1_TRANSLATION,
132
AV1_ROTZOOM,
133
AV1_AFFINE
134
};
135
136
enum av1_frame_refs {
137
AV1_NONE = -1,
138
AV1_INTRA_FRAME = 0,
139
AV1_LAST_FRAME,
140
AV1_LAST2_FRAME,
141
AV1_LAST3_FRAME,
142
AV1_GOLDEN_FRAME,
143
AV1_BWDREF_FRAME,
144
AV1_ALTREF2_FRAME,
145
AV1_ALTREF_FRAME
146
};
147
148
#define AV1_SELECT_SCREEN_CONTENT_TOOLS 2
149
#define AV1_SELECT_INTEGER_MV 2
150
151
#define AV1_PRIMARY_REF_NONE 7
152
#define AV1_REFS_PER_FRAME 7
153
#define AV1_NUM_REF_FRAMES 8
154
155
#define AV1_MAX_TILE_WIDTH 4096
156
#define AV1_MAX_TILE_AREA (4096 * 2304)
157
#define AV1_MAX_TILE_ROWS 64
158
#define AV1_MAX_TILE_COLS 64
159
#define AV1_MAX_NUM_TILES AV1_MAX_TILE_ROWS * AV1_MAX_TILE_COLS
160
161
#define AV1_MAX_SEGMENTS 8
162
#define AV1_MAX_CDEF_BITS_ARRAY 8
163
#define AV1_RESTORATION_TILESIZE 256
164
#define AV1_WARPEDMODEL_PREC_BITS 16
165
#define AV1_FG_MAX_NUM_Y_POINTS 14
166
#define AV1_FG_MAX_NUM_CBR_POINTS 10
167
#define AV1_FG_MAX_NUM_POS_LUMA 24
168
#define AV1_FG_MAX_NUM_POS_CHROMA 25
169
170
struct av1_obu_extension_header_obu
171
{
172
unsigned temporal_id;
173
unsigned spatial_id;
174
};
175
176
struct av1_sequence_header_obu {
177
uint8_t seq_profile;
178
bool reduced_still_picture_header;
179
180
struct {
181
bool equal_picture_interval;
182
} timing_info;
183
184
bool decoder_model_info_present_flag;
185
struct {
186
unsigned num_units_in_decoding_tick;
187
uint8_t buffer_removal_time_length_minus_1;
188
uint8_t frame_presentation_time_length_minus_1;
189
} decoder_model_info;
190
191
uint8_t operating_points_cnt_minus_1;
192
uint16_t operating_point_idc[32];
193
bool decoder_model_present_for_this_op[32];
194
195
uint8_t frame_width_bits_minus_1;
196
uint8_t frame_height_bits_minus_1;
197
unsigned max_frame_width_minus_1;
198
unsigned max_frame_height_minus_1;
199
bool frame_id_numbers_present_flag;
200
uint8_t delta_frame_id_length_minus_2;
201
uint8_t additional_frame_id_length_minus_1;
202
203
bool use_128x128_superblock;
204
bool enable_filter_intra;
205
bool enable_intra_edge_filter;
206
bool enable_interintra_compound;
207
bool enable_masked_compound;
208
bool enable_warped_motion;
209
bool enable_dual_filter;
210
bool enable_order_hint;
211
bool enable_jnt_comp;
212
bool enable_ref_frame_mvs;
213
uint8_t seq_force_screen_content_tools;
214
uint8_t seq_force_integer_mv;
215
216
uint8_t order_hint_bits_minus_1;
217
uint8_t OrderHintBits;
218
bool enable_superres;
219
bool enable_cdef;
220
bool enable_restoration;
221
struct {
222
uint8_t BitDepth;
223
bool mono_chrome;
224
uint8_t NumPlanes;
225
bool subsampling_x;
226
bool subsampling_y;
227
bool separate_uv_delta_q;
228
} color_config;
229
bool film_grain_params_present;
230
};
231
232
struct ref_frame {
233
uint8_t RefFrameType;
234
unsigned RefFrameId;
235
unsigned RefUpscaledWidth;
236
unsigned RefFrameWidth;
237
unsigned RefFrameHeight;
238
unsigned RefRenderWidth;
239
unsigned RefRenderHeight;
240
};
241
242
struct tile_info {
243
unsigned TileColsLog2;
244
unsigned TileRowsLog2;
245
int tile_col_start_sb[AV1_MAX_TILE_COLS + 1];
246
int tile_row_start_sb[AV1_MAX_TILE_ROWS + 1];
247
unsigned TileCols;
248
unsigned TileRows;
249
unsigned context_update_tile_id;
250
uint8_t TileSizeBytes;
251
};
252
253
struct quantization_params {
254
uint8_t base_q_idx;
255
int DeltaQYDc;
256
int DeltaQUDc;
257
int DeltaQUAc;
258
int DeltaQVDc;
259
int DeltaQVAc;
260
uint8_t qm_y;
261
uint8_t qm_u;
262
uint8_t qm_v;
263
};
264
265
struct segmentation_params {
266
bool segmentation_enabled;
267
bool segmentation_update_map;
268
bool segmentation_temporal_update;
269
bool FeatureEnabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
270
int FeatureData[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
271
int FeatureMask[AV1_MAX_SEGMENTS];
272
};
273
274
struct delta_q_params {
275
bool delta_q_present;
276
uint8_t delta_q_res;
277
};
278
279
struct delta_lf_params {
280
bool delta_lf_present;
281
uint8_t delta_lf_res;
282
bool delta_lf_multi;
283
};
284
285
struct loop_filter_params {
286
uint8_t loop_filter_level[4];
287
uint8_t loop_filter_sharpness;
288
bool loop_filter_delta_enabled;
289
bool loop_filter_delta_update;
290
int8_t loop_filter_ref_deltas[AV1_NUM_REF_FRAMES];
291
int8_t loop_filter_mode_deltas[2];
292
};
293
294
struct cdef_params {
295
uint8_t cdef_damping_minus_3;
296
uint8_t cdef_bits;
297
uint16_t cdef_y_strengths[AV1_MAX_CDEF_BITS_ARRAY];
298
uint16_t cdef_uv_strengths[AV1_MAX_CDEF_BITS_ARRAY];
299
};
300
301
struct loop_restoration_params {
302
uint8_t FrameRestorationType[3];
303
uint16_t LoopRestorationSize[3];
304
};
305
306
struct tx_mode_params {
307
uint8_t TxMode;
308
};
309
310
enum reference_mode {
311
SINGLE_REFERENCE = 0,
312
COMPOUND_REFERENCE = 1,
313
REFERENCE_MODE_SELECT = 2,
314
REFERENCE_MODES = 3,
315
};
316
317
struct skip_mode_params {
318
bool skip_mode_present;
319
};
320
321
struct global_motion_params {
322
uint8_t GmType[AV1_NUM_REF_FRAMES];
323
int gm_params[AV1_NUM_REF_FRAMES][6];
324
};
325
326
struct film_grain_params {
327
bool apply_grain;
328
uint16_t grain_seed;
329
uint8_t num_y_points;
330
uint8_t point_y_value[AV1_FG_MAX_NUM_Y_POINTS];
331
uint8_t point_y_scaling[AV1_FG_MAX_NUM_Y_POINTS];
332
bool chroma_scaling_from_luma;
333
uint8_t num_cb_points;
334
uint8_t num_cr_points;
335
uint8_t point_cb_value[AV1_FG_MAX_NUM_CBR_POINTS];
336
uint8_t point_cb_scaling[AV1_FG_MAX_NUM_CBR_POINTS];
337
uint8_t point_cr_value[AV1_FG_MAX_NUM_CBR_POINTS];
338
uint8_t point_cr_scaling[AV1_FG_MAX_NUM_CBR_POINTS];
339
uint8_t grain_scaling_minus_8;
340
uint8_t ar_coeff_lag;
341
int ar_coeffs_y[AV1_FG_MAX_NUM_POS_LUMA];
342
int ar_coeffs_cb[AV1_FG_MAX_NUM_POS_CHROMA];
343
int ar_coeffs_cr[AV1_FG_MAX_NUM_POS_CHROMA];
344
uint8_t ar_coeff_shift_minus_6;
345
int ar_coeff_shift;
346
uint8_t grain_scale_shift;
347
uint8_t cb_mult;
348
uint8_t cb_luma_mult;
349
uint16_t cb_offset;
350
uint8_t cr_mult;
351
uint8_t cr_luma_mult;
352
uint16_t cr_offset;
353
bool overlap_flag;
354
bool clip_to_restricted_range;
355
};
356
357
struct av1_uncompressed_header_obu
358
{
359
uint8_t frame_type;
360
bool FrameIsIntra;
361
bool show_frame;
362
bool showable_frame;
363
bool show_existing_frame;
364
uint8_t frame_to_show_map_idx;
365
366
unsigned RefOrderHint[AV1_NUM_REF_FRAMES];
367
bool error_resilient_mode;
368
bool disable_cdf_update;
369
bool allow_screen_content_tools;
370
bool force_integer_mv;
371
372
unsigned current_frame_id;
373
bool frame_size_override_flag;
374
unsigned OrderHint;
375
uint8_t primary_ref_frame;
376
377
uint8_t refresh_frame_flags;
378
unsigned FrameWidth;
379
unsigned FrameHeight;
380
bool use_superres;
381
unsigned SuperresDenom;
382
unsigned UpscaledWidth;
383
unsigned MiCols;
384
unsigned MiRows;
385
386
unsigned RenderWidth;
387
unsigned RenderHeight;
388
389
uint8_t last_frame_idx;
390
uint8_t gold_frame_idx;
391
uint8_t ref_frame_idx[AV1_REFS_PER_FRAME];
392
uint8_t usedFrame[AV1_NUM_REF_FRAMES];
393
unsigned curFrameHint;
394
unsigned shiftedOrderHints[AV1_NUM_REF_FRAMES];
395
396
bool allow_high_precision_mv;
397
bool use_ref_frame_mvs;
398
bool allow_intrabc;
399
uint8_t interpolation_filter;
400
bool is_motion_mode_switchable;
401
402
bool disable_frame_end_update_cdf;
403
struct tile_info ti;
404
struct quantization_params qp;
405
struct segmentation_params sp;
406
struct delta_q_params dqp;
407
struct delta_lf_params dlfp;
408
409
bool CodedLossless;
410
bool AllLossless;
411
struct loop_filter_params lfp;
412
struct cdef_params cdefp;
413
struct loop_restoration_params lrp;
414
struct tx_mode_params tm;
415
enum reference_mode reference_select;
416
struct skip_mode_params smp;
417
bool allow_warped_motion;
418
bool reduced_tx_set;
419
struct global_motion_params gmp;
420
struct film_grain_params fgp;
421
};
422
423
struct dec_av1_task {
424
struct list_head list;
425
426
struct pipe_video_buffer *buf;
427
bool no_show_frame;
428
unsigned buf_ref_count;
429
struct pipe_video_buffer **buf_ref;
430
bool is_sef_task;
431
};
432
433
struct input_buf_private {
434
struct list_head tasks;
435
struct list_head inps;
436
};
437
438
struct dec_av1 {
439
struct av1_obu_extension_header_obu ext;
440
struct av1_sequence_header_obu seq;
441
struct av1_uncompressed_header_obu uncompressed_header;
442
struct av1_uncompressed_header_obu refs[AV1_NUM_REF_FRAMES];
443
struct ref_frame RefFrames[AV1_NUM_REF_FRAMES];
444
445
uint8_t bs_obu_td_buf[8];
446
unsigned bs_obu_td_sz;
447
uint8_t bs_obu_seq_buf[128];
448
unsigned bs_obu_seq_sz;
449
struct pipe_video_buffer *frame_refs[AV1_NUM_REF_FRAMES];
450
struct list_head free_tasks;
451
struct list_head started_tasks;
452
struct list_head finished_tasks;
453
struct list_head decode_tasks;
454
unsigned que_num;
455
bool stacked_frame;
456
mtx_t mutex;
457
};
458
459
#endif
460
461