1 /*
2 * Copyright (c) 2020-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     encode_vp9_vdenc_packet.h
24 //! \brief    Defines the interface to adapt to VP9 VDENC packet
25 //!
26 
27 #ifndef __ENCODE_VP9_VDENC_PACKET_H__
28 #define __ENCODE_VP9_VDENC_PACKET_H__
29 
30 #include "media_cmd_packet.h"
31 #include "encode_vp9_vdenc_pipeline.h"
32 #include "encode_status_report.h"
33 #include "encodecp.h"
34 
35 namespace encode
36 {
37 
38 #define CODECHAL_ENCODE_VP9_BRC_MAX_NUM_OF_PASSES 4
39 
40 class Vp9VdencPkt : public CmdPacket, public MediaStatusReportObserver, public mhw::vdbox::hcp::Itf::ParSetting, public mhw::vdbox::vdenc::Itf::ParSetting
41 {
42 public:
43     //!
44     //! \brief  Vp9VdencPkt constructor
45     //!
Vp9VdencPkt(MediaPipeline * pipeline,MediaTask * task,CodechalHwInterfaceNext * hwInterface)46     Vp9VdencPkt(MediaPipeline *pipeline, MediaTask *task, CodechalHwInterfaceNext *hwInterface)
47         : CmdPacket(task),
48           m_pipeline(dynamic_cast<Vp9VdencPipeline *>(pipeline)),
49           m_hwInterface(dynamic_cast<CodechalHwInterfaceNext *>(hwInterface))
50     {
51         ENCODE_CHK_NULL_NO_STATUS_RETURN(m_hwInterface);
52         ENCODE_CHK_NULL_NO_STATUS_RETURN(m_pipeline);
53 
54         m_osInterface    = m_hwInterface->GetOsInterface();
55         m_statusReport   = m_pipeline->GetStatusReportInstance();
56         m_featureManager = m_pipeline->GetFeatureManager();
57         m_encodecp       = m_pipeline->GetEncodeCp();
58 
59         m_hcpInterfaceNew   = std::static_pointer_cast<mhw::vdbox::hcp::Itf>(m_hwInterface->GetHcpInterfaceNext());
60         ENCODE_CHK_NULL_NO_STATUS_RETURN(m_hcpInterfaceNew);
61 
62         m_vdencInterfaceNew = std::static_pointer_cast<mhw::vdbox::vdenc::Itf>(m_hwInterface->GetVdencInterfaceNext());
63         ENCODE_CHK_NULL_NO_STATUS_RETURN(m_vdencInterfaceNew);
64 
65         m_miItf             = std::static_pointer_cast<mhw::mi::Itf>(m_hwInterface->GetMiInterfaceNext());
66         ENCODE_CHK_NULL_NO_STATUS_RETURN(m_miItf);
67     }
68 
69     //!
70     //! \brief  Vp9VdencPkt destructor
71     //!
72     virtual ~Vp9VdencPkt();
73 
74     //!
75     //! \brief  Initialize the media packet, allocate required resources
76     //! \return MOS_STATUS
77     //!         MOS_STATUS_SUCCESS if success, else fail reason
78     //!
79     MOS_STATUS Init() override;
80 
81     //!
82     //! \brief  Prepare interal parameters, should be invoked for each frame
83     //! \param  [in] params
84     //!         Pointer to the input parameters
85     //! \return MOS_STATUS
86     //!         MOS_STATUS_SUCCESS if success, else fail reason
87     //!
88     MOS_STATUS Prepare() override;
89 
90     //!
91     //! \brief  Destroy the media packet and release the resources
92     //! \return MOS_STATUS
93     //!         MOS_STATUS_SUCCESS if success, else fail reason
94     //!
95     MOS_STATUS Destroy() override;
96 
97     //!
98     //! \brief  Add the command sequence into the commandBuffer and
99     //!         and return to the caller task
100     //! \param  [in] commandBuffer
101     //!         Pointer to the command buffer which is allocated by caller
102     //! \param  [in] packetPhase
103     //!         Indicate packet phase stage
104     //! \return MOS_STATUS
105     //!         MOS_STATUS_SUCCESS if success, else fail reason
106     //!
107     virtual MOS_STATUS Submit(MOS_COMMAND_BUFFER *commandBuffer, uint8_t packetPhase = otherPacket) override
108     {
109         return MOS_STATUS_SUCCESS;
110     }
111 
112     //!
113     //! \brief  One frame is completed
114     //! \param  [in] mfxStatus
115     //!         pointer to status buffer which for MFX
116     //! \param  [in] rcsStatus
117     //!         pointer to status buffer which for RCS
118     //! \param  [in, out] statusReport
119     //!         pointer of EncoderStatusReport
120     //! \return MOS_STATUS
121     //!         MOS_STATUS_SUCCESS if success, else fail reason
122     //!
123     virtual MOS_STATUS Completed(void *mfxStatus, void *rcsStatus, void *statusReport) override;
124 
125     //!
126     //! \brief  Calculate Command Size
127     //! \param  [in, out] commandBufferSize
128     //!         requested size
129     //! \param  [in, out] requestedPatchListSize
130     //!         requested size
131     //! \return MOS_STATUS
132     //!         MOS_STATUS_SUCCESS if success, else fail reason
133     //!
134     MOS_STATUS CalculateCommandSize(uint32_t &commandBufferSize, uint32_t &requestedPatchListSize) override;
135 
136     //!
137     //! \brief  Dump output resources or infomation after submit
138     //! \return MOS_STATUS
139     //!         MOS_STATUS_SUCCESS if success, else fail reason
140     //!
141     virtual MOS_STATUS DumpOutput() override;
142 
143     //!
144     //! \brief  Get Packet Name
145     //! \return std::string
146     //!
GetPacketName()147     virtual std::string GetPacketName() override
148     {
149         return "PAK_PASS" + std::to_string((uint32_t)m_pipeline->GetCurrentPass());
150     }
151 
152     void fill_pad_with_value(PMOS_SURFACE psSurface, uint32_t real_height, uint32_t aligned_height);
153 
154     //!
155     //! \brief  Add HCP_SURFACE_STATE
156     //! \param  [in] cmdBuffer
157     //!         Pointer to the command buffer which is allocated by caller
158     //! \return MOS_STATUS
159     //!         MOS_STATUS_SUCCESS if success, else fail reason
160     //!
161     MOS_STATUS AddAllCmds_HCP_SURFACE_STATE(PMOS_COMMAND_BUFFER cmdBuffer);
162 
163     //!
164     //! \brief MHW parameters declaration
165     //!
166     MHW_SETPAR_DECL_HDR(HCP_SURFACE_STATE);
167     MHW_SETPAR_DECL_HDR(HCP_PIPE_MODE_SELECT);
168     MHW_SETPAR_DECL_HDR(HCP_IND_OBJ_BASE_ADDR_STATE);
169     MHW_SETPAR_DECL_HDR(HCP_PIPE_BUF_ADDR_STATE);
170     MHW_SETPAR_DECL_HDR(VDENC_REF_SURFACE_STATE);
171     MHW_SETPAR_DECL_HDR(VDENC_PIPE_MODE_SELECT);
172     MHW_SETPAR_DECL_HDR(VDENC_HEVC_VP9_TILE_SLICE_STATE);
173     MHW_SETPAR_DECL_HDR(VDENC_PIPE_BUF_ADDR_STATE);
174     MHW_SETPAR_DECL_HDR(VDENC_CONTROL_STATE);
175     MHW_SETPAR_DECL_HDR(VD_PIPELINE_FLUSH);
176 
177     enum FlushCmd
178     {
179         waitVp9 = 0,
180         waitVdenc,
181         waitVp9Vdenc
182     };
183 
184 protected:
185     //!
186     //! \brief  Calculate picture state command size
187     //! \return MOS_STATUS
188     //!         MOS_STATUS_SUCCESS if success, else fail reason
189     //!
190     virtual MOS_STATUS CalculatePictureStateCommandSize();
191 
192     //!
193     //! \brief  Get vdenc state command size and patch size
194     //! \return MOS_STATUS
195     //!         MOS_STATUS_SUCCESS if success, else fail reason
196     //!
197     virtual MOS_STATUS GetVdencStateCommandsDataSize(uint32_t &vdencPictureStatesSize, uint32_t &vdencPicturePatchListSize);
198 
199     //!
200     //! \brief  Get  SliceStatesSize and SlicePatchListSize,
201     //! \return MOS_STATUS
202     //!         MOS_STATUS_SUCCESS if success, else fail reason
203     //!
204     virtual MOS_STATUS GetHxxPrimitiveCommandSize();
205 
206     //!
207     //! \brief  Calculate Command Buffer Size
208     //! \return uint32_t
209     //!         Command buffer size calculated
210     //!
211     virtual uint32_t CalculateCommandBufferSize();
212 
213     //!
214     //! \brief  Calculate Patch List Size
215     //! \return uint32_t
216     //!         Patchlist size calculated
217     //!
218     virtual uint32_t CalculatePatchListSize();
219 
220     //!
221     //! \brief  Allocate resources
222     //! \return MOS_STATUS
223     //!         MOS_STATUS_SUCCESS if success, else fail reason
224     //!
225     virtual MOS_STATUS AllocateResources();
226 
227     //!
228     //! \brief  Free resources
229     //! \return MOS_STATUS
230     //!         MOS_STATUS_SUCCESS if success, else fail reason
231     //!
232     MOS_STATUS        FreeResources();
233 
234     // Inline functions
235     //!
236     //! \brief  Validate Vdbox index
237     //! \param  [in] vdboxIndex
238     //!         Index of Vdbox
239     //! \return MOS_STATUS
240     //!         MOS_STATUS_SUCCESS if success, else fail reason
241     //!
242     MOS_STATUS ValidateVdboxIdx(const MHW_VDBOX_NODE_IND &vdboxIndex);
243 
244     //!
245     //! \brief  Set perf tag
246     //! \param  [in] type
247     //!         Perf tag call type
248     //! \param  [in] mode
249     //!         Encoding mode
250     //! \param  [in] picCodingType
251     //!         Picture coding type
252     //! \return MOS_STATUS
253     //!         MOS_STATUS_SUCCESS if success, else fail reason
254     //!
255     void SetPerfTag(uint16_t type, uint16_t mode, uint16_t picCodingType);
256 
257     //!
258     //! \brief    Add force wake-up command
259     //! \param    [in] cmdBuffer
260     //!           Pointer to command buffer
261     //! \return   MOS_STATUS
262     //!           MOS_STATUS_SUCCESS if success, else fail reason
263     //!
264     MOS_STATUS AddForceWakeup(MOS_COMMAND_BUFFER &cmdBuffer);
265 
266     //!
267     //! \brief    Sends prolog commands
268     //! \param    [in] cmdBuffer
269     //!           Pointer to command buffer
270     //! \return   MOS_STATUS
271     //!           MOS_STATUS_SUCCESS if success, else fail reason
272     //!
273     MOS_STATUS SendPrologCmds(MOS_COMMAND_BUFFER &cmdBuffer);
274 
275     //! \brief    Set Rowstore Cache offset
276     //! \return   MOS_STATUS
277     //!           MOS_STATUS_SUCCESS if success, else fail reason
278     //!
279     MOS_STATUS SetRowstoreCachingOffsets();
280 
281     //!
282     //! \brief  Add command to set hcp pipe mode select values
283     //! \param  [in, out] cmdBuffer
284     //!         Command buffer
285     //! \return MOS_STATUS
286     //!         MOS_STATUS_SUCCESS if success, else fail reason
287     //!
288     virtual MOS_STATUS AddHcpPipeModeSelectCmd(
289         MOS_COMMAND_BUFFER &cmdBuffer) = 0;
290 
291     //!
292     //! \brief    Set HCP surfaces' parameters
293     //! \param    [in, out] surfacesParams
294     //!           Pointer to surfaces' parameters structures
295     //! \return   MOS_STATUS
296     //!           MOS_STATUS_SUCCESS if success, else fail reason
297     //!
298     virtual MOS_STATUS SetHcpSurfacesParams(
299         MHW_VDBOX_SURFACE_PARAMS *surfacesParams);
300 
301     virtual MOS_STATUS SetHcpSurfaceMMCState();
302 
303     //!
304     //! \brief    Add command to set Hcp Pipe Buffer Address values
305     //! \param    [in, out] cmdBuffer
306     //!           Command buffer
307     //! \return   MOS_STATUS
308     //!           MOS_STATUS_SUCCESS if success, else fail reason
309     //!
310     virtual MOS_STATUS AddHcpPipeBufAddrCmd(
311         MOS_COMMAND_BUFFER &cmdBuffer);
312 
313     //!
314     //! \brief  Add command to set Hcp Indirect Object Base Address values
315     //! \param  [in, out] cmdBuffer
316     //!         Command buffer
317     //! \return MOS_STATUS
318     //!         MOS_STATUS_SUCCESS if success, else fail reason
319     //!
320     virtual MOS_STATUS AddHcpIndObjBaseAddrCmd(
321         MOS_COMMAND_BUFFER &cmdBuffer);
322 
323     //!
324     //! \brief  Add command to set vdenc pipe mode select values
325     //! \param  [in, out] cmdBuffer
326     //!         Command buffer
327     //! \return MOS_STATUS
328     //!         MOS_STATUS_SUCCESS if success, else fail reason
329     //!
330     virtual MOS_STATUS AddVdencPipeModeSelectCmd(
331         MOS_COMMAND_BUFFER &cmdBuffer);
332 
333     //!
334     //! \brief  Set vdenc DS surfaces parameters
335     //! \param  [in] dsSurfaceParams
336     //!         DS surfaces parameters
337     //! \return MOS_STATUS
338     //!         MOS_STATUS_SUCCESS if success, else fail reason
339     //!
340     MOS_STATUS SetVdencDsSurfaceParams(
341         MHW_VDBOX_SURFACE_PARAMS *dsSurfaceParams);
342 
343     //!
344     //! \brief  Add command to set vdenc surfaces state
345     //! \param  [in, out] cmdBuffer
346     //!         Command buffer
347     //! \return MOS_STATUS
348     //!         MOS_STATUS_SUCCESS if success, else fail reason
349     //!
350     MOS_STATUS AddVdencSurfacesStateCmd(
351         MOS_COMMAND_BUFFER &cmdBuffer);
352 
353     //!
354     //! \brief  Set vdenc pipe mode select parameter
355     //! \param  [in] pipeModeSelectParams
356     //!         Pointer to parameters
357     //! \return MOS_STATUS
358     //!         MOS_STATUS_SUCCESS if success, else fail reason
359     //!
360     virtual MOS_STATUS SetVdencPipeModeSelectParams(
361         MHW_VDBOX_PIPE_MODE_SELECT_PARAMS &vdboxPipeModeSelectParams);
362 
363     //!
364     //! \brief  Add command to set Vdenc Pipe Buffer Address values
365     //! \param  [in, out] cmdBuffer
366     //!         Command buffer
367     //! \return MOS_STATUS
368     //!         MOS_STATUS_SUCCESS if success, else fail reason
369     //!
370     virtual MOS_STATUS AddVdencPipeBufAddrCmd(
371         MOS_COMMAND_BUFFER &cmdBuffer);
372 
373     //!
374     //! \brief  Set vdenc pipe buffer address parameter
375     //! \param  [in] pipeBufAddrParams
376     //!         Pipeline buffer address parameters
377     //! \return MOS_STATUS
378     //!         MOS_STATUS_SUCCESS if success, else fail reason
379     //!
380     virtual MOS_STATUS SetVdencPipeBufAddrParams(
381         MHW_VDBOX_PIPE_BUF_ADDR_PARAMS &pipeBufAddrParams);
382 
383     //!
384     //! \brief  Set Hcp Pipe Buffer Address parameter (MMC)
385     //! \param  [in, out] pipeBufAddrParams
386     //!         Pointer to pipe buffer address parameters
387     //! \return MOS_STATUS
388     //!         MOS_STATUS_SUCCESS if success, else fail reason
389     //!
390     MOS_STATUS SetPipeBufAddrMmcState(
391         PMHW_VDBOX_PIPE_BUF_ADDR_PARAMS pipeBufAddrParams);
392 
393     //!
394     //! \brief  Add command to set vdenc second level batch buffer command
395     //! \param  [in, out] cmdBuffer
396     //!         Command buffer
397     //! \return MOS_STATUS
398     //!         MOS_STATUS_SUCCESS if success, else fail reason
399     //!
400     virtual MOS_STATUS AddVdencSecondLevelBatchBufferCmd(
401         MOS_COMMAND_BUFFER &cmdBuffer);
402 
403     //!
404     //! \brief    Set surface's state (MMC)
405     //! \param    [in, out] surfacesParams
406     //!           Pointer to surfaces' parameters structures
407     //! \return   MOS_STATUS
408     //!           MOS_STATUS_SUCCESS if success, else fail reason
409     //!
410     MOS_STATUS SetSurfaceMmcState(
411         PMHW_VDBOX_SURFACE_PARAMS surfaceStateParams);
412 
413     //!
414     //! \brief    Add VDENC_WALKER_STATE commands to command buffer
415     //! \param    [in, out] cmdBuffer
416     //!           Pointer to the command buffer
417     //! \return   MOS_STATUS
418     //!           MOS_STATUS_SUCCESS if success, else fail reason
419     //!
420     virtual MOS_STATUS AddVdencWalkerStateCmd(
421         MOS_COMMAND_BUFFER &cmdBuffer) = 0;
422 
423     //!
424     //! \brief  Start Status Report
425     //! \param  [in] srType
426     //!         status report type for send cmds
427     //! \param  [in, out] cmdBuffer
428     //!         cmdbuffer to send cmds
429     //! \return MOS_STATUS
430     //!         MOS_STATUS_SUCCESS if success, else fail reason
431     //!
432     virtual MOS_STATUS StartStatusReport(
433         uint32_t            srType,
434         MOS_COMMAND_BUFFER *cmdBuffer) override;
435 
436     //!
437     //! \brief  End Status Report
438     //! \param  [in] srType
439     //!         status report type for send cmds
440     //! \param  [in, out] cmdBuffer
441     //!         cmdbuffer to send cmds
442     //! \return MOS_STATUS
443     //!         MOS_STATUS_SUCCESS if success, else fail reason
444     //!
445     virtual MOS_STATUS EndStatusReport(
446         uint32_t            srType,
447         MOS_COMMAND_BUFFER *cmdBuffer) override;
448 
449     //!
450     //! \brief  Ensure all commands memory written out
451     //! \param  [in] cmdBuffer
452     //!         Command buffer which is allocated by caller
453     //! \return MOS_STATUS
454     //!         MOS_STATUS_SUCCESS if success, else fail reason
455     //!
456     MOS_STATUS EnsureAllCommandsExecuted(
457         MOS_COMMAND_BUFFER &cmdBuffer);
458 
459     //!
460     //! \brief  Add command to read the HCP status
461     //! \param  [in] vdboxIndex
462     //!         Index of vdbox
463     //! \param  [in] statusReport
464     //!         Encode status report
465     //! \param  [in, out] cmdBuffer
466     //!         Command buffer
467     //! \return MOS_STATUS
468     //!         MOS_STATUS_SUCCESS if success, else fail reason
469     //!
470     MOS_STATUS ReadHcpStatus(MHW_VDBOX_NODE_IND vdboxIndex, MediaStatusReport *statusReport, MOS_COMMAND_BUFFER &cmdBuffer);
471 
472     //!
473     //! \brief  Update parameters
474     //! \return MOS_STATUS
475     //!         MOS_STATUS_SUCCESS if success, else fail reason
476     //!
477     virtual MOS_STATUS UpdateParameters();
478 
479     //!
480     //! \brief  Dump input resources or infomation before submit
481     //! \return MOS_STATUS
482     //!         MOS_STATUS_SUCCESS if success, else fail reason
483     //!
484     virtual MOS_STATUS DumpInput();
485 
486     //!
487     //! \brief  Get value of MultiEngineMode
488     //! \return MHW_VDBOX_HCP_MULTI_ENGINE_MODE
489     //!         Multi Engine Mode
490     //!
491     MHW_VDBOX_HCP_MULTI_ENGINE_MODE getMultiEngineMode() const;
492 
493     //!
494     //! \brief  Get value of PipeWorkMode
495     //! \return MHW_VDBOX_HCP_PIPE_WORK_MODE
496     //!         Pipe Work Mode
497     //!
498     MHW_VDBOX_HCP_PIPE_WORK_MODE getPipeWorkMode() const;
499 
500 #if USE_CODECHAL_DEBUG_TOOL
501     //! \brief  Dump the output resources in status report callback function
502     //! \param  [in] encodeStatusMfx
503     //!         Pointer to encoder status for vdbox
504     //! \param  [in] statusReportData
505     //!         Pointer to encoder status report data
506     //! \return MOS_STATUS
507     //!         MOS_STATUS_SUCCESS if success, else fail reason
508     //!
509     MOS_STATUS DumpResources(
510         EncodeStatusMfx *       encodeStatusMfx,
511         EncodeStatusReportData *statusReportData);
512 #endif
513 
514     //!
515     //! \brief  Add HCP_SURFACE_STATE
516     //! \param  [in] cmdBuffer
517     //!         Pointer to the command buffer which is allocated by caller
518     //! \return MOS_STATUS
519     //!         MOS_STATUS_SUCCESS if success, else fail reason
520     //!
521     MOS_STATUS Add_HCP_SURFACE_STATE(PMOS_COMMAND_BUFFER &cmdBuffer);
522 
523     enum CODEC_SELECT
524     {
525         CODEC_SELECT_DECODE = 0,
526         CODEC_SELECT_ENCODE = 1,
527     };
528 
529     enum CODEC_STANDARD_SELECT
530     {
531         CODEC_STANDARD_SELECT_HEVC = 0,
532         CODEC_STANDARD_SELECT_VP9  = 1,
533         CODEC_STANDARD_SELECT_AV1  = 2,
534     };
535 
536     Vp9VdencPipeline *m_pipeline = nullptr;
537 
538     // Interfaces
539     EncodeAllocator *         m_allocator         = nullptr;  //!< Interface of encode allocator
540     CodechalHwInterfaceNext * m_hwInterface       = nullptr;  //!< Interface of Codec HAL HW
541     MediaFeatureManager *     m_featureManager    = nullptr;  //!< Interface of feature manager
542     Vp9BasicFeature *         m_basicFeature      = nullptr;  //!< Encode parameters used in each frame
543     EncodeMemComp *           m_mmcState          = nullptr;  //!< Interface of codec media memory comp
544     EncodeCp *                m_encodecp          = nullptr;  //!< Interface of encode CP
545 
546     std::shared_ptr<mhw::vdbox::hcp::Itf> m_hcpInterfaceNew     = nullptr;  //!< Interface of MHW
547     std::shared_ptr<mhw::vdbox::vdenc::Itf> m_vdencInterfaceNew = nullptr;  //!< Interface of MHW
548 
549     static constexpr uint32_t m_maxNumPipes = 4;
550 
551     // Parameters passed from application
552     const CODEC_VP9_ENCODE_SEQUENCE_PARAMS *m_vp9SeqParams     = nullptr;  //!< Pointer to sequence parameters
553     const CODEC_VP9_ENCODE_PIC_PARAMS *     m_vp9PicParams     = nullptr;  //!< Pointer to picture parameters
554     const CODEC_VP9_ENCODE_SEGMENT_PARAMS * m_vp9SegmentParams = nullptr;  //!< Pointer to segment parameters
555 
556     MHW_VDBOX_NODE_IND m_vdboxIndex = MHW_VDBOX_NODE_1;  //!< Index of VDBOX
557 
558     bool m_usePatchList = false;  //!< Use Patch List or not
559 
560     mutable uint8_t m_curHcpSurfStateId = 0;
561 
562     uint32_t m_defaultPictureStatesSize    = 0;  //!< Picture state command size
563     uint32_t m_defaultPicturePatchListSize = 0;  //!< Picture state patch list size
564 
565     uint32_t m_defaultSliceStatesSize    = 0;  //!< Slice state command size
566     uint32_t m_defaultSlicePatchListSize = 0;  //!< Slice state patch list size
567 
568     // CMD buffer sizes
569     uint32_t m_pictureStatesSize = 0;  //!< Picture states size
570     uint32_t m_sliceStatesSize   = 0;  //!< Slice states size
571 
572     // Patch list sizes
573     uint32_t m_picturePatchListSize = 0;  //!< Picture patch list size
574     uint32_t m_slicePatchListSize   = 0;  //!< Slice patch list size
575 
576     MHW_VDBOX_SURFACE_PARAMS m_surfacesParams[CODECHAL_HCP_ALTREF_SURFACE_ID + 1] = {0};
577 
578     // VDENC and PAK data buffers
579     bool          m_vdencPakObjCmdStreamOutEnabled   = false;    //!< Pak Obj stream out enable flag
580     PMOS_RESOURCE m_resVdencPakObjCmdStreamOutBuffer = nullptr;  //!< Resource of Vdenc Pak object command stream out buffer
581     MOS_RESOURCE  m_resPakcuLevelStreamoutData       = {0};      //!< PAK CU level Ssreamout data buffer
582 
583     MOS_SURFACE m_output16X16InterModes = {0};
584     // ME
585     MOS_SURFACE m_4xMeMvDataBuffer     = {0};  //!< 4x ME MV data buffer
586     MOS_SURFACE m_4xMeDistortionBuffer = {0};  //!< 4x ME distortion buffer
587     MOS_SURFACE m_16xMeMvDataBuffer    = {0};  //!< 16x ME MV data buffer
588 
589     MOS_RESOURCE m_resVdencIntraRowStoreScratchBuffer     = {0};  //!< VDENC Intra row store scratch buffer
590     MOS_RESOURCE m_resHvcTileRowStoreBuffer               = {0};  //!< HVC tile row store buffer
591     MOS_RESOURCE m_vdencCumulativeCuCountStreamoutSurface = {0};  //!< Cumulative CU count stream out surface
592     MOS_RESOURCE m_vdencTileRowStoreBuffer                = {0};  //!< Tile row store buffer
593     // Segments
594     MOS_RESOURCE m_resVdencSegmentMapStreamOut  = {0};  //!< VDENC Segment map stream out buffer
595     MOS_RESOURCE m_resSseSrcPixelRowStoreBuffer = {0};  //!< SSE source pixel row store buffer
596 
597     mutable uint8_t m_curVdencSurfStateId = 0;
598 
599     FlushCmd m_flushCmd = waitVp9;
600 
601 MEDIA_CLASS_DEFINE_END(encode__Vp9VdencPkt)
602 };
603 }  // namespace encode
604 
605 #endif  // !__ENCODE_VP9_VDENC_PACKET_H__
606