1 /*
2 * Copyright (c) 2022, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file mhw_vdbox_vvcp_cmdpar.h
24 //! \brief MHW VDBOX VVCP command parameters
25 //! \details
26 //!
27
28 #ifndef __MHW_VDBOX_VVCP_CMDPAR_H__
29 #define __MHW_VDBOX_VVCP_CMDPAR_H__
30
31 #include "codec_def_decode_vvc.h"
32 #include "mhw_vdbox.h"
33 #include "mhw_vdbox_cmdpar.h"
34
35 namespace mhw
36 {
37 namespace vdbox
38 {
39 namespace vvcp
40 {
41
42 // this enum should align with hwcmd defination
43 enum CODEC_STANDARD_SELECT
44 {
45 CODEC_STANDARD_SELECT_VVC = 3, //!< No additional details
46 };
47
48 enum CommandsNumberOfAddresses
49 {
50 MI_BATCH_BUFFER_START_CMD_NUMBER_OF_ADDRESSES = 1, // 2 DW for 1 address field
51 MI_STORE_DATA_IMM_CMD_NUMBER_OF_ADDRESSES = 1, // 2 DW for 1 address field
52 MI_FLUSH_DW_CMD_NUMBER_OF_ADDRESSES = 1, // 2 DW for 1 address field
53 MI_CONDITIONAL_BATCH_BUFFER_END_CMD_NUMBER_OF_ADDRESSES = 1, // 2 DW for 1 address field
54 MI_STORE_REGISTER_MEM_CMD_NUMBER_OF_ADDRESSES = 1, // 2 DW for 1 address field
55 MI_COPY_MEM_MEM_CMD_NUMBER_OF_ADDRESSES = 4, // 4 DW for 2 address fields
56 MI_SEMAPHORE_WAIT_CMD_NUMBER_OF_ADDRESSES = 1, // 2 DW for 1 address field
57 MI_ATOMIC_CMD_NUMBER_OF_ADDRESSES = 1, // 2 DW for 1 address field
58
59 MFX_WAIT_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
60
61 VVCP_PIPE_MODE_SELECT_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
62 VVCP_SURFACE_STATE_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
63 VVCP_PIPE_BUF_ADDR_STATE_CMD_NUMBER_OF_ADDRESSES = 61, // 61 address fields
64 VVCP_IND_OBJ_BASE_ADDR_STATE_CMD_NUMBER_OF_ADDRESSES = 2, // 2 address fields
65 VVCP_PIC_STATE_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
66 VVCP_REF_IDX_STATE_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
67 VVCP_DPB_STATE_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
68 VVCP_TILE_CODING_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
69 VVCP_BSD_OBJECT_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
70 VVCP_MEM_DATA_ACCESS_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
71 VVCP_SLICE_STATE_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
72 VVCP_VD_CONTROL_STATE_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
73 VVCP_WEIGHTOFFSET_STATE_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for address fields
74
75 VD_PIPELINE_FLUSH_CMD_NUMBER_OF_ADDRESSES = 0, // 0 DW for 0 address fields
76 };
77
78 enum VvcpBufferType
79 {
80 //Rowstore
81 vcedLineBuffer = 0,
82 vcmvLineBuffer,
83 vcprLineBuffer,
84 vclfYLineBuffer,
85 vclfULineBuffer,
86 vclfVLineBuffer,
87 vcSaoYLineBuffer,
88 vcSaoULineBuffer,
89 vcSaoVLineBuffer,
90 vcAlfLineBuffer,
91
92 //Tile (boundary) storage
93 vclfYTileRowBuffer,
94 vclfYTileColumnBuffer,
95 vclfUTileRowBuffer,
96 vclfUTileColumnBuffer,
97 vclfVTileRowBuffer,
98 vclfVTileColumnBuffer,
99
100 vcSaoYTileRowBuffer,
101 vcSaoYTileColumnBuffer,
102 vcSaoUTileRowBuffer,
103 vcSaoUTileColumnBuffer,
104 vcSaoVTileRowBuffer,
105 vcSaoVTileColumnBuffer,
106
107 vcAlfTileRowBuffer,
108 vcAlfYTileColumnBuffer,
109 vcAlfUTileColumnBuffer,
110 vcAlfVTileColumnBuffer,
111
112 vcMvTemporalBuffer,
113
114 vvcpInternalBufMax = 27
115 };
116
117 struct VvcpBufferSizePar
118 {
119 uint32_t m_picWidth;
120 uint32_t m_picHeight;
121 uint16_t m_maxTileWidthInCtus;
122 uint8_t m_bitDepthIdc;
123 uint8_t m_spsChromaFormatIdc;
124 uint32_t m_spsLog2CtuSizeMinus5;
125 uint32_t m_bufferSize;
126 };
127
128 // VVCP internal buffer size table [buffer_index][CTU][bitDepth]
129 struct VvcBufSizeClsPerCtu
130 {
131 uint8_t m_clPerCtu[3][2];
132 uint8_t m_extraCl;
133 };
134
135 static const VvcBufSizeClsPerCtu CodecVvcBufferSize[2][vvcpInternalBufMax-1] =
136 {
137 //400
138 {
139 { 1, 1, 1, 1, 2, 2, 0 }, // VCED Line Buffer (EDLB)
140 { 2, 2, 4, 4, 8, 8, 0 }, // VCMV Line Buffer (MVLB)
141 { 1, 1, 1, 2, 2, 4, 0 }, // VCPR Line Buffer (PRLB)
142 { 6, 6, 10, 11, 18, 20, 0 }, // VCLF Y Line Buffer (LFYLB)
143 { 0, 0, 0, 0, 0, 0, 0 }, // VCLF U Line Buffer (LFULB)
144 { 0, 0, 0, 0, 0, 0, 0 }, // VCLF V Line Buffer (LFVLB)
145 { 2, 2, 3, 3, 6, 6, 0 }, // VCSAO Y Line Buffer (SAYLB)
146 { 0, 0, 0, 0, 0, 0, 0 }, // VCSAO Y Line Buffer (SAULB)
147 { 0, 0, 0, 0, 0, 0, 0 }, // VCSAO Y Line Buffer (SAVLB)
148 { 1, 1, 1, 1, 1, 1, 0 }, // VCALF Line Buffer (ALFLB)
149
150 { 6, 6, 10, 11, 18, 20, 0 }, // VCLF Y Tile Row Buffer (LFYTR)
151 { 9, 10, 17, 19, 34, 38, 0 }, // VCLF Y Tile Column Buffer (LFYTC)
152 { 0, 0, 0, 0, 0, 0, 0 }, // VCLF U Tile Row Buffer (LFUTR)
153 { 0, 0, 0, 0, 0, 0, 0 }, // VCLF U Tile Column Buffer (LFUTC)
154 { 0, 0, 0, 0, 0, 0, 0 }, // VCLF V Tile Row Buffer (LFVTR)
155 { 0, 0, 0, 0, 0, 0, 0 }, // VCLF V Tile Column Buffer (LFVTC)
156 { 2, 2, 3, 3, 6, 6, 0 }, // VCSAO Y Tile Row Buffer (SAYTR)
157 { 2, 2, 3, 3, 6, 6, 0 }, // VCSAO Y Tile Column Buffer (SAYTC)
158 { 0, 0, 0, 0, 0, 0, 0 }, // VCSAO U Tile Row Buffer (SAUTR)
159 { 0, 0, 0, 0, 0, 0, 0 }, // VCSAO U Tile Column Buffer (SAUTC)
160 { 0, 0, 0, 0, 0, 0, 0 }, // VCSAO V Tile Row Buffer (SAVTR)
161 { 0, 0, 0, 0, 0, 0, 0 }, // VCSAO V Tile Column Buffer (SAVTC)
162 { 1, 1, 1, 1, 1, 1, 0 }, // VCALF Tile Row Buffer (ALFTR)
163 { 6, 7, 11, 13, 21, 26, 1 }, // VCALF Y Tile Column Buffer (ALYTC)
164 { 0, 0, 0, 0, 0, 0, 0 }, // VCALF U Tile Column Buffer (ALUTC)
165 { 0, 0, 0, 0, 0, 0, 0 }, // VCALF V Tile Column Buffer (ALVTC)
166 },
167
168 //420
169 {
170 { 1, 1, 1, 1, 2, 2, 0 }, // VCED Line Buffer (EDLB)
171 { 2, 2, 4, 4, 8, 8, 0 }, // VCMV Line Buffer (MVLB)
172 { 2, 2, 2, 4, 4, 8, 0 }, // VCPR Line Buffer (PRLB)
173 { 6, 6, 10, 11, 18, 20, 0 }, // VCLF Y Line Buffer (LFYLB)
174 { 2, 2, 3, 3, 5, 5, 0 }, // VCLF U Line Buffer (LFULB)
175 { 2, 2, 3, 3, 5, 5, 0 }, // VCLF V Line Buffer (LFVLB)
176 { 2, 2, 3, 3, 6, 6, 1 }, // VCSAO Y Line Buffer (SAYLB)
177 { 1, 1, 2, 2, 3, 3, 1 }, // VCSAO U Line Buffer (SAULB)
178 { 1, 1, 2, 2, 3, 3, 1 }, // VCSAO V Line Buffer (SAVLB)
179 { 1, 1, 1, 1, 1, 1, 0 }, // VCALF Line Buffer (ALFLB)
180
181 { 6, 6, 10, 11, 18, 20, 0 }, // VCLF Y Tile Row Buffer (LFYTR)
182 { 9, 10, 17, 19, 34, 38, 0 }, // VCLF Y Tile Column Buffer (LFYTC)
183 { 2, 2, 3, 3, 5, 5, 0 }, // VCLF U Tile Row Buffer (LFUTR)
184 { 2, 3, 4, 5, 8, 9, 0 }, // VCLF U Tile Column Buffer (LFUTC)
185 { 2, 2, 3, 3, 5, 5, 0 }, // VCLF V Tile Row Buffer (LFVTR)
186 { 2, 3, 4, 5, 8, 9, 0 }, // VCLF V Tile Column Buffer (LFVTC)
187 { 2, 2, 3, 3, 6, 6, 1 }, // VCSAO Y Tile Row Buffer (SAYTR)
188 { 2, 2, 3, 3, 6, 6, 1 }, // VCSAO Y Tile Column Buffer (SAYTC)
189 { 1, 1, 2, 2, 3, 3, 1 }, // VCSAO U Tile Row Buffer (SAUTR)
190 { 1, 1, 2, 2, 3, 3, 1 }, // VCSAO U Tile Column Buffer (SAUTC)
191 { 1, 1, 2, 2, 3, 3, 1 }, // VCSAO V Tile Row Buffer (SAVTR)
192 { 1, 1, 2, 2, 3, 3, 1 }, // VCSAO V Tile Column Buffer (SAVTC)
193 { 1, 1, 1, 1, 1, 1, 0 }, // VCALF Tile Row Buffer (ALFTR)
194 { 6, 7, 11, 13, 21, 26, 1 }, // VCALF Y Tile Column Buffer (ALYTC)
195 { 2, 2, 3, 4, 6, 7, 1 }, // VCALF U Tile Column Buffer (ALUTC)
196 { 2, 2, 3, 4, 6, 7, 1 }, // VCALF V Tile Column Buffer (ALVTC)
197 }
198 };
199
200
201 //! \brief SURFACE_FORMAT
202 //! \details
203 //! Specifies the format of the surface.
204 //!
205 enum SURFACE_FORMAT
206 {
207 SURFACE_FORMAT_PLANAR4208 = 4, //!< No additional details
208 SURFACE_FORMAT_P010 = 13, //!< This format can be used for 8, 9, 10 bit 420 format
209 };
210
_MHW_PAR_T(VVCP_VD_CONTROL_STATE)211 struct _MHW_PAR_T(VVCP_VD_CONTROL_STATE)
212 {
213 bool pipelineInitialization = false;
214 bool memoryImplicitFlush = false;
215 bool pipeScalableModePipeLock = false;
216 bool pipeScalableModePipeUnlock = false;
217 };
218
_MHW_PAR_T(VVCP_PIPE_MODE_SELECT)219 struct _MHW_PAR_T(VVCP_PIPE_MODE_SELECT)
220 {
221 uint8_t codecSelect = 0;
222 bool picStatusErrorReportEnable = false;
223 uint8_t codecStandardSelect = 0;
224 uint32_t picStatusErrorReportId = 0;
225 };
226
_MHW_PAR_T(VVCP_SURFACE_STATE)227 struct _MHW_PAR_T(VVCP_SURFACE_STATE)
228 {
229 uint8_t surfaceId = 0;
230 uint32_t surfacePitchMinus1 = 0;
231 uint8_t surfaceFormat = 0;
232 uint32_t yOffsetForUCbInPixel = 0;
233 uint32_t compressionFormat = 0;
234 };
235
_MHW_PAR_T(VVCP_PIPE_BUF_ADDR_STATE)236 struct _MHW_PAR_T(VVCP_PIPE_BUF_ADDR_STATE)
237 {
238 MOS_SURFACE *decodedPic = nullptr; //!< Decoded Output Frame Buffer
239 MOS_RESOURCE *references[15] = {}; //!< Reference Frame Buffer
240 MOS_RESOURCE *colMvTemporalBuffer[15] = {}; //!< Collocated MV temporal buffer
241 MOS_RESOURCE *curMvTemporalBuffer = nullptr; //!< Current MV temporal buffer
242 MOS_RESOURCE *apsScalingListDataBuffer = nullptr;
243 MOS_RESOURCE *apsAlfBuffer = nullptr;
244 MOS_RESOURCE *spsChromaQpTableBuffer = nullptr;
245
246 MOS_RESOURCE *vcedLineBuffer = nullptr;
247 MOS_RESOURCE *vcmvLineBuffer = nullptr;
248 MOS_RESOURCE *vcprLineBuffer = nullptr;
249
250 MOS_RESOURCE *vclfYLineBuffer = nullptr;
251 MOS_RESOURCE *vclfYTileRowBuffer = nullptr;
252 MOS_RESOURCE *vclfYTileColumnBuffer = nullptr;
253 MOS_RESOURCE *vclfULineBuffer = nullptr;
254 MOS_RESOURCE *vclfUTileRowBuffer = nullptr;
255 MOS_RESOURCE *vclfUTileColumnBuffer = nullptr;
256 MOS_RESOURCE *vclfVLineBuffer = nullptr;
257 MOS_RESOURCE *vclfVTileRowBuffer = nullptr;
258 MOS_RESOURCE *vclfVTileColumnBuffer = nullptr;
259
260 MOS_RESOURCE *vcSaoYLineBuffer = nullptr;
261 MOS_RESOURCE *vcSaoYTileRowBuffer = nullptr;
262 MOS_RESOURCE *vcSaoYTileColumnBuffer = nullptr;
263 MOS_RESOURCE *vcSaoULineBuffer = nullptr;
264 MOS_RESOURCE *vcSaoUTileRowBuffer = nullptr;
265 MOS_RESOURCE *vcSaoUTileColumnBuffer = nullptr;
266 MOS_RESOURCE *vcSaoVLineBuffer = nullptr;
267 MOS_RESOURCE *vcSaoVTileRowBuffer = nullptr;
268 MOS_RESOURCE *vcSaoVTileColumnBuffer = nullptr;
269
270 MOS_RESOURCE *vcAlfLineBuffer = nullptr;
271 MOS_RESOURCE *vcAlfTileRowBuffer = nullptr;
272 MOS_RESOURCE *vcAlfYTileColumnBuffer = nullptr;
273 MOS_RESOURCE *vcAlfUTileColumnBuffer = nullptr;
274 MOS_RESOURCE *vcAlfVTileColumnBuffer = nullptr;
275 };
276
_MHW_PAR_T(VVCP_IND_OBJ_BASE_ADDR_STATE)277 struct _MHW_PAR_T(VVCP_IND_OBJ_BASE_ADDR_STATE)
278 {
279 uint32_t dwDataSize = 0;
280 uint32_t dwDataOffset = 0;
281 PMOS_RESOURCE presDataBuffer = nullptr;
282 };
283
_MHW_PAR_T(VVCP_PIC_STATE)284 struct _MHW_PAR_T(VVCP_PIC_STATE)
285 {
286 bool spsSubpicInfoPresentFlag = false;
287 bool spsIndependentSubpicsFlag = false;
288 bool spsSubpicSameSizeFlag = false;
289 bool spsEntropyCodingSyncEnabledFlag = false;
290 bool spsQtbttDualTreeIntraFlag = false;
291 bool spsMaxLumaTransformSize64Flag = false;
292 bool spsTransformSkipEnabledFlag = false;
293 bool spsBdpcmEnabledFlag = false;
294 bool spsMtsEnabledFlag = false;
295 bool spsExplicitMtsIntraEnabledFlag = false;
296 bool spsExplicitMtsInterEnabledFlag = false;
297 bool spsLfnstEnabledFlag = false;
298 bool spsJointCbcrEnabledFlag = false;
299 bool spsSameQpTableForChromaFlag = false;
300 bool dLmcsDisabledFlag = false;
301 bool dDblkDisabledFlag = false;
302 bool dSaoLumaDisabledFlag = false;
303 bool dSaoChromaDisabledFlag = false;
304 bool dAlfDisabledFlag = false;
305 bool dAlfCbDisabledFlag = false;
306 bool dAlfCrDisabledFlag = false;
307 bool dAlfCcCbDisabledFlag = false;
308 bool dAlfCcCrDisabledFlag = false;
309 bool dSingleSliceFrameFlag = false;
310
311 bool spsSbtmvpEnabledFlag = false;
312 bool spsAmvrEnabledFlag = false;
313 bool spsSmvdEnabledFlag = false;
314 bool spsMmvdEnabledFlag = false;
315 bool spsSbtEnabledFlag = false;
316 bool spsAffineEnabledFlag = false;
317 bool sps6ParamAffineEnabledFlag = false;
318 bool spsAffineAmvrEnabledFlag = false;
319 bool spsBcwEnabledFlag = false;
320 bool spsCiipEnabledFlag = false;
321 bool spsGpmEnabledFlag = false;
322 bool spsIspEnabledFlag = false;
323 bool spsMrlEnabledFlag = false;
324 bool spsMipEnabledFlag = false;
325 bool spsCclmEnabledFlag = false;
326 bool spsChromaHorizontalCollocatedFlag = false;
327 bool spsChromaVerticalCollocatedFlag = false;
328 bool spsTemporalMvpEnabledFlag = false;
329 bool spsPaletteEnabledFlag = false;
330 bool spsActEnabledFlag = false;
331 bool spsIbcEnabledFlag = false;
332 bool spsLadfEnabledFlag = false;
333 bool spsScalingMatrixForLfnstDisabledFlag = false;
334 bool spsScalingMatrixForAlternativeColorSpaceDisabledFlag = false;
335 bool spsScalingMatrixDesignatedColorSpaceFlag = false;
336
337 bool ppsLoopFilterAcrossTilesEnabledFlag = false;
338 bool ppsRectSliceFlag = false;
339 bool ppsSingleSlicePerSubpicFlag = false;
340 bool ppsLoopFilterAcrossSlicesEnabledFlag = false;
341 bool ppsWeightedPredFlag = false;
342 bool ppsWeightedBipredFlag = false;
343 bool ppsRefWraparoundEnabledFlag = false;
344 bool ppsCuQpDeltaEnabledFlag = false;
345 bool virtualboundariespresentflag = false;
346 bool phNonRefPicFlag = false;
347 bool phChromaResidualScaleFlag = false;
348 bool phTemporalMvpEnabledFlag = false;
349 bool phMmvdFullpelOnlyFlag = false;
350 bool phMvdL1ZeroFlag = false;
351 bool phBdofDisabledFlag = false;
352 bool phDmvrDisabledFlag = false;
353 bool phProfDisabledFlag = false;
354 bool phJointCbcrSignFlag = false;
355
356 uint8_t spsChromaFormatIdc = 0;
357 uint8_t spsLog2CtuSizeMinus5 = 0;
358 uint8_t spsBitdepthMinus8 = 0;
359 uint8_t spsLog2MinLumaCodingBlockSizeMinus2 = 0;
360 uint16_t spsNumSubpicsMinus1 = 0;
361
362 uint8_t spsLog2TransformSkipMaxSizeMinus2 = 0;
363 uint8_t spsSixMinusMaxNumMergeCand = 0;
364 uint8_t spsFiveMinusMaxNumSubblockMergeCand = 0;
365 uint8_t dMaxNumGpmMergeCand = 0;
366 uint8_t spsLog2ParallelMergeLevelMinus2 = 0;
367 uint8_t spsMinQpPrimeTs = 0;
368 uint8_t spsSixMinusMaxNumIbcMergeCand = 0;
369
370 int8_t spsLadfQpOffset0 = 0;
371 int8_t spsLadfQpOffset1 = 0;
372 int8_t spsLadfQpOffset2 = 0;
373 int8_t spsLadfQpOffset3 = 0;
374
375 uint16_t spsLadfDeltaThresholdMinus10 = 0;
376 uint16_t spsLadfDeltaThresholdMinus11 = 0;
377 int8_t spsLadfLowestIntervalQpOffset = 0;
378
379 uint16_t spsLadfDeltaThresholdMinus12 = 0;
380 uint16_t spsLadfDeltaThresholdMinus13 = 0;
381 uint8_t spsNumLadfIntervalsMinus2 = 0;
382
383 uint16_t ppsPicWidthInLumaSamples = 0;
384 uint16_t ppsPicHeightInLumaSamples = 0;
385
386 int32_t ppsScalingWinLeftOffset = 0;
387 int32_t ppsScalingWinRightOffset = 0;
388 int32_t ppsScalingWinTopOffset = 0;
389 int32_t ppsScalingWinBottomOffset = 0;
390
391 uint16_t dNumtilerowsminus1 = 0;
392 uint16_t dNumtilecolumnsminus1 = 0;
393
394 int8_t ppsCbQpOffset = 0;
395 int8_t ppsCrQpOffset = 0;
396 int8_t ppsJointCbcrQpOffsetValue = 0;
397 uint8_t ppsChromaQpOffsetListLenMinus1 = 0;
398
399 int8_t ppsCbQpOffsetList0 = 0;
400 int8_t ppsCbQpOffsetList1 = 0;
401 int8_t ppsCbQpOffsetList2 = 0;
402 int8_t ppsCbQpOffsetList3 = 0;
403
404 int8_t ppsCbQpOffsetList4 = 0;
405 int8_t ppsCbQpOffsetList5 = 0;
406 uint16_t ppsPicWidthMinusWraparoundOffset = 0;
407
408 int8_t ppsCrQpOffsetList0 = 0;
409 int8_t ppsCrQpOffsetList1 = 0;
410 int8_t ppsCrQpOffsetList2 = 0;
411 int8_t ppsCrQpOffsetList3 = 0;
412
413 int8_t ppsCrQpOffsetList4 = 0;
414 int8_t ppsCrQpOffsetList5 = 0;
415
416 int8_t ppsJointCbcrQpOffsetList0 = 0;
417 int8_t ppsJointCbcrQpOffsetList1 = 0;
418 int8_t ppsJointCbcrQpOffsetList2 = 0;
419 int8_t ppsJointCbcrQpOffsetList3 = 0;
420
421 int8_t ppsJointCbcrQpOffsetList4 = 0;
422 int8_t ppsJointCbcrQpOffsetList5 = 0;
423
424 uint8_t numvervirtualboundaries = 0;
425 uint8_t numhorvirtualboundaries = 0;
426 uint8_t phLog2DiffMinQtMinCbIntraSliceLuma = 0;
427 uint8_t phMaxMttHierarchyDepthIntraSliceLuma = 0;
428 uint8_t phLog2DiffMaxBtMinQtIntraSliceLuma = 0;
429 uint8_t phLog2DiffMaxTtMinQtIntraSliceLuma = 0;
430 uint8_t phLog2DiffMinQtMinCbIntraSliceChroma = 0;
431 uint8_t phMaxMttHierarchyDepthIntraSliceChroma = 0;
432
433 uint16_t dVirtualboundaryposxminus10 = 0;
434 uint16_t dVirtualboundaryposyminus10 = 0;
435 uint16_t dVirtualboundaryposxminus11 = 0;
436 uint16_t dVirtualboundaryposyminus11 = 0;
437 uint16_t dVirtualboundaryposxminus12 = 0;
438 uint16_t dVirtualboundaryposyminus12 = 0;
439
440 uint8_t phLog2DiffMaxBtMinQtIntraSliceChroma = 0;
441 uint8_t phLog2DiffMaxTtMinQtIntraSliceChroma = 0;
442 uint8_t phCuQpDeltaSubdivIntraSlice = 0;
443 uint8_t phCuChromaQpOffsetSubdivIntraSlice = 0;
444 uint8_t phLog2DiffMinQtMinCbInterSlice = 0;
445 uint8_t phMaxMttHierarchyDepthInterSlice = 0;
446
447 uint8_t phLog2DiffMaxBtMinQtInterSlice = 0;
448 uint8_t phLog2DiffMaxTtMinQtInterSlice = 0;
449 uint8_t phCuQpDeltaSubdivInterSlice = 0;
450 uint8_t phCuChromaQpOffsetSubdivInterSlice = 0;
451
452 uint8_t dActiveapsid = 0;
453 CodecVvcAlfData alfApsArray[8] = {};
454 };
455
_MHW_PAR_T(VVCP_DPB_STATE)456 struct _MHW_PAR_T(VVCP_DPB_STATE)
457 {
458 VvcRefFrameAttributes refFrameAttr[15] = {};
459 uint16_t refPicScaleWidth[15] = {};
460 uint16_t refPicScaleHeight[15] = {};
461 };
462
_MHW_PAR_T(VVCP_SLICE_STATE)463 struct _MHW_PAR_T(VVCP_SLICE_STATE)
464 {
465 bool shAlfEnabledFlag = false;
466 bool shAlfCbEnabledFlag = false;
467 bool shAlfCrEnabledFlag = false;
468 bool shAlfCcCbEnabledFlag = false;
469 bool shAlfCcCrEnabledFlag = false;
470 bool shLmcsUsedFlag = false;
471 bool shExplicitScalingListUsedFlag = false;
472 bool shCabacInitFlag = false;
473 bool shCollocatedFromL0Flag = false;
474 bool shCuChromaQpOffsetEnabledFlag = false;
475 bool shSaoLumaUsedFlag = false;
476 bool shSaoChromaUsedFlag = false;
477 bool shDeblockingFilterDisabledFlag = false;
478 bool shDepQuantUsedFlag = false;
479 bool shSignDataHidingUsedFlag = false;
480 bool shTsResidualCodingDisabledFlag = false;
481 bool nobackwardpredflag = false;
482 bool pVvcpDebugEnable = false;
483 bool dMultipleSlicesInTileFlag = false;
484 bool dIsbottommostsliceoftileFlag = false;
485 bool dIstopmostsliceoftileFlag = false;
486 bool dSubpicTreatedAsPicFlag = false;
487 bool dLoopFilterAcrossSubpicEnabledFlag = false;
488 bool dIsRightMostSliceOfSubpicFlag = false;
489 bool dIsLeftMostSliceOfSubpicFlag = false;
490 bool dIsBottomMostSliceOfSubpicFlag = false;
491 bool dIsTopMostSliceOfSubpicFlag = false;
492 bool dLastsliceofpicFlag = false;
493
494 uint32_t numctusincurrslice = 0;
495
496 uint16_t shNumTilesInSliceMinus1 = 0;
497 uint8_t shSliceType = 0;
498 uint8_t shNumAlfApsIdsLuma = 0;
499 uint8_t alfChromaNumAltFiltersMinus1 = 0;
500 uint8_t alfCcCbFiltersSignalledMinus1 = 0;
501 uint8_t alfCcCrFiltersSignalledMinus1 = 0;
502
503 uint8_t shAlfApsIdLuma0 = 0;
504 uint8_t shAlfApsIdLuma1 = 0;
505 uint8_t shAlfApsIdLuma2 = 0;
506 uint8_t shAlfApsIdLuma3 = 0;
507 uint8_t shAlfApsIdLuma4 = 0;
508 uint8_t shAlfApsIdLuma5 = 0;
509 uint8_t shAlfApsIdLuma6 = 0;
510
511 uint8_t shAlfApsIdChroma = 0;
512 uint8_t shAlfCcCbApsId = 0;
513 uint8_t shAlfCcCrApsId = 0;
514 uint8_t numrefidxactive0 = 0;
515 uint8_t numrefidxactive1 = 0;
516 uint8_t shCollocatedRefIdx = 0;
517
518 uint8_t sliceqpy = 0;
519 uint8_t shCbQpOffset = 0;
520 uint8_t shCrQpOffset = 0;
521 uint8_t shJointCbcrQpOffset = 0;
522
523 uint8_t shLumaBetaOffsetDiv2 = 0;
524 uint8_t shLumaTcOffsetDiv2 = 0;
525 uint8_t shCbBetaOffsetDiv2 = 0;
526 uint8_t shCbTcOffsetDiv2 = 0;
527 uint8_t shCrBetaOffsetDiv2 = 0;
528 uint8_t shCrTcOffsetDiv2 = 0;
529
530 uint16_t dSubpicCtuTopLeftX = 0;
531 uint16_t dSubpicCtuTopLeftY = 0;
532 uint16_t dSubpicWidthMinus1 = 0;
533 uint16_t dSubpicHeightMinus1 = 0;
534
535 uint16_t dSliceheightinctus = 0;
536
537 uint16_t dToplefttilex = 0;
538 uint16_t dToplefttiley = 0;
539 uint32_t dSlicestartctbx = 0;
540 uint32_t dSlicestartctby = 0;
541
542 // LMCS
543 bool spsLmcsEnabledFlag = false;
544 uint8_t phLmcsApsId = 0;
545 CodecVvcLmcsData *vvcLmcsData = nullptr;
546 ApsLmcsReshapeInfo *vvcLmcsShapeInfo = nullptr;
547 };
548
_MHW_PAR_T(VVCP_BSD_OBJECT)549 struct _MHW_PAR_T(VVCP_BSD_OBJECT)
550 {
551 uint32_t bsdDataLength = 0;
552 uint32_t bsdDataStartOffset = 0;
553 };
554
_MHW_PAR_T(VVCP_REF_IDX_STATE)555 struct _MHW_PAR_T(VVCP_REF_IDX_STATE)
556 {
557 uint8_t listIdx = 0;
558 uint8_t numRefForList = 0;
559
560 int8_t refIdxSymLx[2] = {};
561 CODEC_PICTURE refPicList[2][vvcMaxNumRefFrame] = {};
562 bool stRefPicFlag[2][vvcMaxNumRefFrame] = {};
563 bool rprConstraintsActiveFlag[2][vvcMaxNumRefFrame] = {};
564 bool unavailableRefPic[2][vvcMaxNumRefFrame] = {};
565 int16_t diffPicOrderCnt[2][vvcMaxNumRefFrame] = {};
566 };
567
_MHW_PAR_T(VVCP_WEIGHTOFFSET_STATE)568 struct _MHW_PAR_T(VVCP_WEIGHTOFFSET_STATE)
569 {
570 VvcWeightedPredInfo *wpInfo = nullptr;
571 int32_t listIdx = 0;
572 };
573
_MHW_PAR_T(VVCP_TILE_CODING)574 struct _MHW_PAR_T(VVCP_TILE_CODING)
575 {
576 uint16_t tilecolbdval = 0;
577 uint16_t tilerowbdval = 0;
578 uint16_t colwidthval = 0;
579 uint16_t rowheightval = 0;
580 uint16_t currenttilecolumnposition = 0;
581 uint16_t currenttilerowposition = 0;
582 struct
583 {
584 uint32_t m_isrightmosttileofsliceFlag : 1;
585 uint32_t m_isleftmosttileofsliceFlag : 1;
586 uint32_t m_isbottommosttileofsliceFlag : 1;
587 uint32_t m_istopmosttileofsliceFlag : 1;
588 uint32_t m_isrightmosttileofframeFlag : 1;
589 uint32_t m_isleftmosttileofframeFlag : 1;
590 uint32_t m_isbottommosttileofframeFlag : 1;
591 uint32_t m_istopmosttileofframeFlag : 1;
592 uint32_t m_reserved : 24;
593 } flags;
594 };
595
596 } // namespace vvcp
597 } // namespace vdbox
598 } // namespace mhw
599
600 #endif // __MHW_VDBOX_VVCP_CMDPAR_H__
601