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