1 /* 2 * Copyright (c) 2018-2024, 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_recycle_resource.h 24 //! \brief Defines the interface for recycle resource 25 //! \details The manager for the recycle resources 26 //! 27 28 #ifndef __ENCODE_RECYCLE_RESOURCE_H__ 29 #define __ENCODE_RECYCLE_RESOURCE_H__ 30 31 #include "media_class_trace.h" 32 #include "mos_defs.h" 33 #include "mos_os.h" 34 #include "mos_os_specific.h" 35 #include <stdint.h> 36 #include <map> 37 #include <utility> 38 #if _MEDIA_RESERVED 39 #include "encode_recycle_resource_ext.h" 40 #endif 41 42 namespace encode 43 { 44 enum RecycleResId 45 { 46 PakInfo = 0, 47 FrameStatStreamOutBuffer, 48 VdencBRCHistoryBuffer, 49 VdencBrcDebugBuffer, 50 LcuBaseAddressBuffer, 51 VdencBrcPakMmioBuffer, 52 VdencStatsBuffer, 53 StreamInBuffer, 54 HucRoiOutputBuffer, 55 HucRoiDeltaQpBuffer, 56 HucRoiMapBuffer, 57 BrcPakStatisticBuffer, 58 BrcPakStatisticBufferFull, 59 PakSliceSizeStreamOutBuffer, 60 CuRecordStreamOutBuffer, 61 CuCountBuffer, 62 PreEncRawSurface, 63 PreEncRef0, 64 PreEncRef1, 65 VdaqmBuffer0, 66 VdaqmBuffer1, 67 VdaqmBuffer2, 68 VdaqmBuffer3, 69 VdaqmBuffer4, 70 #if _MEDIA_RESERVED 71 #define RECYCLE_IDS_EXT 72 #include "encode_recycle_resource_ext.h" 73 #undef RECYCLE_IDS_EXT 74 #endif 75 }; 76 77 class EncodeAllocator; 78 class RecycleQueue; 79 80 class RecycleResource 81 { 82 public: 83 //! 84 //! \brief Constructor 85 //! \param [in] allocator 86 //! Pointer to EncodeAllocator 87 //! 88 RecycleResource(EncodeAllocator *allocator); 89 90 //! 91 //! \brief Destructor 92 //! 93 virtual ~RecycleResource(); 94 95 //! 96 //! \brief Register resource 97 //! \param [in] id 98 //! The ID of resource which defined in RecycleResId 99 //! \param [in] param 100 //! MOS_ALLOC_GFXRES_PARAMS 101 //! \param [in] maxLimit 102 //! The limitation of number of the resource 103 //! \return MOS_STATUS 104 //! MOS_STATUS_SUCCESS if success, else fail reason 105 //! 106 MOS_STATUS RegisterResource(RecycleResId id, MOS_ALLOC_GFXRES_PARAMS param, uint32_t maxLimit = m_maxRecycleNum); 107 108 //! 109 //! \brief Get Surface 110 //! \param [in] id 111 //! The ID of resource which defined in RecycleResId 112 //! \param [in] frameIndex 113 //! Frame index 114 //! \return MOS_SURFACE * 115 //! MOS_SURFACE * if success, else nullptr if the pool is empty 116 //! 117 MOS_SURFACE *GetSurface(RecycleResId id, uint32_t frameIndex); 118 119 //! 120 //! \brief Get Buffer 121 //! \param [in] id 122 //! The ID of resource which defined in RecycleResId 123 //! \param [in] frameIndex 124 //! Frame index 125 //! \return MOS_RESOURCE * 126 //! MOS_RESOURCE * if success, else nullptr if the pool is empty 127 //! 128 virtual MOS_RESOURCE* GetBuffer(RecycleResId id, uint32_t frameIndex); 129 130 protected: 131 //! 132 //! \brief Get resource queue 133 //! \param [in] id 134 //! The ID of resource which defined in RecycleResId 135 //! \return RecycleQueue * 136 //! RecycleQueue * if success, else nullptr 137 //! GetResQueue(RecycleResId id)138 RecycleQueue *GetResQueue(RecycleResId id) 139 { 140 auto it = m_resourceQueues.find(id); 141 142 if (it == m_resourceQueues.end()) 143 { 144 return nullptr; 145 } 146 147 return it->second; 148 } 149 150 static const uint8_t m_maxRecycleNum = 6; 151 EncodeAllocator *m_allocator = nullptr; //!< encoder allocator 152 153 std::map<RecycleResId, RecycleQueue *> m_resourceQueues{}; //!< resource queues 154 155 MEDIA_CLASS_DEFINE_END(encode__RecycleResource) 156 }; 157 } // namespace encode 158 #endif // !__ENCODE_RECYCLE_RESOURCE_H__ 159