xref: /aosp_15_r20/external/intel-media-driver/media_driver/agnostic/common/cm/cm_vebox_data.cpp (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2017, 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      cm_vebox_data.cpp
24 //! \brief     Contains Class CmVeboxData definitions
25 //!
26 
27 #include "cm_vebox_data.h"
28 
29 #include "cm_mem.h"
30 
31 namespace CMRT_UMD
32 {
33 //*-----------------------------------------------------------------------------
34 //| Purpose:    Create Vebox Data
35 //| Returns:    Result of the operation.
36 //*-----------------------------------------------------------------------------
Create(uint8_t * stateData,uint8_t * surfaceData,CmVeboxData * & veboxData)37 int32_t CmVeboxData::Create( uint8_t *stateData, uint8_t *surfaceData, CmVeboxData*& veboxData )
38 {
39     int32_t result = CM_SUCCESS;
40     veboxData = new (std::nothrow) CmVeboxData( stateData, surfaceData );
41     if( veboxData )
42     {
43         veboxData->Acquire();
44         result = veboxData->Initialize();
45         if( result != CM_SUCCESS )
46         {
47             CmVeboxData::Destroy( veboxData );
48         }
49     }
50     else
51     {
52         CM_ASSERTMESSAGE("Error: Failed to create CmVeboxData due to out of system memory.");
53         result = CM_OUT_OF_HOST_MEMORY;
54     }
55     return result;
56 
57 }
58 
59 //*-----------------------------------------------------------------------------
60 //| Purpose:    Destroy CM Vebox Data
61 //| Returns:    Result of the operation.
62 //*-----------------------------------------------------------------------------
Destroy(CmVeboxData * & veboxData)63 int32_t CmVeboxData::Destroy( CmVeboxData* &veboxData )
64 {
65     if (veboxData)
66     {
67         veboxData->SafeRelease();
68         veboxData = nullptr;
69     }
70 
71     return CM_SUCCESS;
72 }
73 
74 //*-----------------------------------------------------------------------------
75 //| Purpose:    CM Vebox Data constructor
76 //| Returns:    Result of the operation.
77 //*-----------------------------------------------------------------------------
CmVeboxData(uint8_t * stateData,uint8_t * surfaceData)78 CmVeboxData::CmVeboxData( uint8_t *stateData, uint8_t *surfaceData ):
79     m_stateDataSize( 0 ),
80     m_stateData( stateData ),
81     m_surfaceDataSize( 0 ),
82     m_surfaceData( surfaceData ),
83     m_refCount(0)
84 {
85 }
86 
87 //*-----------------------------------------------------------------------------
88 //| Purpose:    CM Vebox Data Destructor
89 //| Returns:    Result of the operation.
90 //*-----------------------------------------------------------------------------
~CmVeboxData(void)91 CmVeboxData::~CmVeboxData( void )
92 {
93     MosSafeDeleteArray( m_stateData );
94     MosSafeDeleteArray( m_surfaceData );
95 }
96 
97 //*-----------------------------------------------------------------------------
98 //| Purpose:    Do nothing in initialization
99 //| Returns:    CM_SUCCESS
100 //*-----------------------------------------------------------------------------
Initialize(void)101 int32_t CmVeboxData::Initialize( void )
102 {
103     return CM_SUCCESS;
104 }
105 
106 //*-----------------------------------------------------------------------------
107 //| Purpose:    Get Vebox Data pointer
108 //| Returns:    Result of the operation.
109 //*-----------------------------------------------------------------------------
GetData(uint8_t * & stateData,uint8_t * & surfaceData)110 int32_t CmVeboxData::GetData( uint8_t*& stateData, uint8_t*& surfaceData )
111 {
112     stateData   = m_stateData;
113     surfaceData = m_surfaceData;
114 
115     return CM_SUCCESS;
116 }
117 
118 //*-----------------------------------------------------------------------------
119 //| Purpose:    SET Vebox Data size
120 //| Returns:    Result of the operation.
121 //*-----------------------------------------------------------------------------
SetVeboxDataSize(uint32_t stateDataSize,uint32_t surfaceDataSize)122 int32_t CmVeboxData::SetVeboxDataSize(uint32_t stateDataSize, uint32_t surfaceDataSize)
123 {
124     m_stateDataSize   = stateDataSize;
125     m_surfaceDataSize = surfaceDataSize;
126 
127     return CM_SUCCESS;
128 }
129 
130 //*-----------------------------------------------------------------------------
131 //| Purpose:    Get Vebox Data size
132 //| Returns:    Result of the operation.
133 //*-----------------------------------------------------------------------------
GetVeboxDataSize(uint32_t & stateDataSize,uint32_t & surfaceDataSize)134 int32_t CmVeboxData::GetVeboxDataSize(uint32_t& stateDataSize, uint32_t& surfaceDataSize)
135 {
136     stateDataSize   = m_stateDataSize;
137     surfaceDataSize = m_surfaceDataSize;
138 
139     return CM_SUCCESS;
140 }
141 
142 //*-----------------------------------------------------------------------------
143 //| Purpose:    Increase Reference count
144 //| Returns:    Result of the operation.
145 //*-----------------------------------------------------------------------------
Acquire(void)146 int32_t CmVeboxData::Acquire( void )
147 {
148     ++m_refCount;
149     return m_refCount;
150 }
151 
152 //*-----------------------------------------------------------------------------
153 //| Purpose:    De of Cm Event
154 //| Returns:    Result of the operation.
155 //*-----------------------------------------------------------------------------
SafeRelease()156 int32_t CmVeboxData::SafeRelease( )
157 {
158     --m_refCount;
159     if( m_refCount == 0 )
160     {
161         delete this;
162         return 0;
163     }
164     else
165     {
166         return m_refCount;
167     }
168 }
169 }  // namespace
170