xref: /aosp_15_r20/frameworks/av/media/codec2/sfplugin/C2OMXNode.cpp (revision ec779b8e0859a360c3d303172224686826e6e0e1)
1*ec779b8eSAndroid Build Coastguard Worker /*
2*ec779b8eSAndroid Build Coastguard Worker  * Copyright 2024, The Android Open Source Project
3*ec779b8eSAndroid Build Coastguard Worker  *
4*ec779b8eSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*ec779b8eSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*ec779b8eSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*ec779b8eSAndroid Build Coastguard Worker  *
8*ec779b8eSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*ec779b8eSAndroid Build Coastguard Worker  *
10*ec779b8eSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*ec779b8eSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*ec779b8eSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*ec779b8eSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*ec779b8eSAndroid Build Coastguard Worker  * limitations under the License.
15*ec779b8eSAndroid Build Coastguard Worker  */
16*ec779b8eSAndroid Build Coastguard Worker 
17*ec779b8eSAndroid Build Coastguard Worker #ifdef __LP64__
18*ec779b8eSAndroid Build Coastguard Worker #define OMX_ANDROID_COMPILE_AS_32BIT_ON_64BIT_PLATFORMS
19*ec779b8eSAndroid Build Coastguard Worker #endif
20*ec779b8eSAndroid Build Coastguard Worker 
21*ec779b8eSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
22*ec779b8eSAndroid Build Coastguard Worker #define LOG_TAG "C2OMXNODE"
23*ec779b8eSAndroid Build Coastguard Worker #include <log/log.h>
24*ec779b8eSAndroid Build Coastguard Worker 
25*ec779b8eSAndroid Build Coastguard Worker #include <OMX_Component.h>
26*ec779b8eSAndroid Build Coastguard Worker #include <OMX_Index.h>
27*ec779b8eSAndroid Build Coastguard Worker #include <OMX_IndexExt.h>
28*ec779b8eSAndroid Build Coastguard Worker 
29*ec779b8eSAndroid Build Coastguard Worker #include <media/stagefright/MediaErrors.h>
30*ec779b8eSAndroid Build Coastguard Worker 
31*ec779b8eSAndroid Build Coastguard Worker #include "C2OMXNode.h"
32*ec779b8eSAndroid Build Coastguard Worker #include "C2NodeImpl.h"
33*ec779b8eSAndroid Build Coastguard Worker 
34*ec779b8eSAndroid Build Coastguard Worker namespace android {
35*ec779b8eSAndroid Build Coastguard Worker 
36*ec779b8eSAndroid Build Coastguard Worker namespace {
37*ec779b8eSAndroid Build Coastguard Worker 
38*ec779b8eSAndroid Build Coastguard Worker constexpr OMX_U32 kPortIndexInput = 0;
39*ec779b8eSAndroid Build Coastguard Worker 
40*ec779b8eSAndroid Build Coastguard Worker } // anomymous namespace
41*ec779b8eSAndroid Build Coastguard Worker 
42*ec779b8eSAndroid Build Coastguard Worker using ::android::media::BUFFERFLAG_ENDOFFRAME;
43*ec779b8eSAndroid Build Coastguard Worker using ::android::media::BUFFERFLAG_EOS;
44*ec779b8eSAndroid Build Coastguard Worker 
45*ec779b8eSAndroid Build Coastguard Worker using ::aidl::android::media::IAidlNode;
46*ec779b8eSAndroid Build Coastguard Worker 
C2OMXNode(const std::shared_ptr<Codec2Client::Component> & comp)47*ec779b8eSAndroid Build Coastguard Worker C2OMXNode::C2OMXNode(const std::shared_ptr<Codec2Client::Component> &comp)
48*ec779b8eSAndroid Build Coastguard Worker     : mImpl(new C2NodeImpl(comp, false)) {}
49*ec779b8eSAndroid Build Coastguard Worker 
freeNode()50*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::freeNode() {
51*ec779b8eSAndroid Build Coastguard Worker     return mImpl->freeNode();
52*ec779b8eSAndroid Build Coastguard Worker }
53*ec779b8eSAndroid Build Coastguard Worker 
sendCommand(OMX_COMMANDTYPE cmd,OMX_S32 param)54*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::sendCommand(OMX_COMMANDTYPE cmd, OMX_S32 param) {
55*ec779b8eSAndroid Build Coastguard Worker     if (cmd == OMX_CommandStateSet && param == OMX_StateLoaded) {
56*ec779b8eSAndroid Build Coastguard Worker         // Reset first input frame so if C2OMXNode is recycled, the timestamp does not become
57*ec779b8eSAndroid Build Coastguard Worker         // negative. This is a workaround for HW codecs that do not handle timestamp rollover.
58*ec779b8eSAndroid Build Coastguard Worker         mImpl->onFirstInputFrame();
59*ec779b8eSAndroid Build Coastguard Worker     }
60*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
61*ec779b8eSAndroid Build Coastguard Worker }
62*ec779b8eSAndroid Build Coastguard Worker 
getParameter(OMX_INDEXTYPE index,void * params,size_t size)63*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::getParameter(OMX_INDEXTYPE index, void *params, size_t size) {
64*ec779b8eSAndroid Build Coastguard Worker     status_t err = ERROR_UNSUPPORTED;
65*ec779b8eSAndroid Build Coastguard Worker     switch ((uint32_t)index) {
66*ec779b8eSAndroid Build Coastguard Worker         case OMX_IndexParamConsumerUsageBits: {
67*ec779b8eSAndroid Build Coastguard Worker             OMX_U32 *usage = (OMX_U32 *)params;
68*ec779b8eSAndroid Build Coastguard Worker             uint64_t val;
69*ec779b8eSAndroid Build Coastguard Worker             mImpl->getConsumerUsageBits(&val);
70*ec779b8eSAndroid Build Coastguard Worker             *usage = static_cast<uint32_t>(val & 0xFFFFFFFF);
71*ec779b8eSAndroid Build Coastguard Worker             ALOGW("retrieving usage bits in 32 bits %llu -> %u",
72*ec779b8eSAndroid Build Coastguard Worker                   (unsigned long long)val, (unsigned int)*usage);
73*ec779b8eSAndroid Build Coastguard Worker             err = OK;
74*ec779b8eSAndroid Build Coastguard Worker             break;
75*ec779b8eSAndroid Build Coastguard Worker         }
76*ec779b8eSAndroid Build Coastguard Worker         case OMX_IndexParamConsumerUsageBits64: {
77*ec779b8eSAndroid Build Coastguard Worker             OMX_U64 *usage = (OMX_U64 *)params;
78*ec779b8eSAndroid Build Coastguard Worker             uint64_t val;
79*ec779b8eSAndroid Build Coastguard Worker             mImpl->getConsumerUsageBits(&val);
80*ec779b8eSAndroid Build Coastguard Worker             *usage = val;
81*ec779b8eSAndroid Build Coastguard Worker             err = OK;
82*ec779b8eSAndroid Build Coastguard Worker             break;
83*ec779b8eSAndroid Build Coastguard Worker         }
84*ec779b8eSAndroid Build Coastguard Worker         case OMX_IndexParamPortDefinition: {
85*ec779b8eSAndroid Build Coastguard Worker             if (size < sizeof(OMX_PARAM_PORTDEFINITIONTYPE)) {
86*ec779b8eSAndroid Build Coastguard Worker                 return BAD_VALUE;
87*ec779b8eSAndroid Build Coastguard Worker             }
88*ec779b8eSAndroid Build Coastguard Worker             OMX_PARAM_PORTDEFINITIONTYPE *pDef = (OMX_PARAM_PORTDEFINITIONTYPE *)params;
89*ec779b8eSAndroid Build Coastguard Worker             if (pDef->nPortIndex != kPortIndexInput) {
90*ec779b8eSAndroid Build Coastguard Worker                 break;
91*ec779b8eSAndroid Build Coastguard Worker             }
92*ec779b8eSAndroid Build Coastguard Worker             IAidlNode::InputBufferParams bufferParams;
93*ec779b8eSAndroid Build Coastguard Worker             mImpl->getInputBufferParams(&bufferParams);
94*ec779b8eSAndroid Build Coastguard Worker             pDef->nBufferCountActual = bufferParams.bufferCountActual;
95*ec779b8eSAndroid Build Coastguard Worker             pDef->eDomain = OMX_PortDomainVideo;
96*ec779b8eSAndroid Build Coastguard Worker             pDef->format.video.nFrameWidth = bufferParams.frameWidth;
97*ec779b8eSAndroid Build Coastguard Worker             pDef->format.video.nFrameHeight = bufferParams.frameHeight;
98*ec779b8eSAndroid Build Coastguard Worker             pDef->format.video.eColorFormat = OMX_COLOR_FormatAndroidOpaque;
99*ec779b8eSAndroid Build Coastguard Worker             err = OK;
100*ec779b8eSAndroid Build Coastguard Worker             break;
101*ec779b8eSAndroid Build Coastguard Worker         }
102*ec779b8eSAndroid Build Coastguard Worker         default:
103*ec779b8eSAndroid Build Coastguard Worker             break;
104*ec779b8eSAndroid Build Coastguard Worker     }
105*ec779b8eSAndroid Build Coastguard Worker     return err;
106*ec779b8eSAndroid Build Coastguard Worker }
107*ec779b8eSAndroid Build Coastguard Worker 
setParameter(OMX_INDEXTYPE index,const void * params,size_t size)108*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::setParameter(OMX_INDEXTYPE index, const void *params, size_t size) {
109*ec779b8eSAndroid Build Coastguard Worker     if (params == NULL) {
110*ec779b8eSAndroid Build Coastguard Worker         return BAD_VALUE;
111*ec779b8eSAndroid Build Coastguard Worker     }
112*ec779b8eSAndroid Build Coastguard Worker     switch ((uint32_t)index) {
113*ec779b8eSAndroid Build Coastguard Worker         case OMX_IndexParamMaxFrameDurationForBitrateControl: {
114*ec779b8eSAndroid Build Coastguard Worker             // handle max/fixed frame duration control
115*ec779b8eSAndroid Build Coastguard Worker             if (size != sizeof(OMX_PARAM_U32TYPE)) {
116*ec779b8eSAndroid Build Coastguard Worker                 return BAD_VALUE;
117*ec779b8eSAndroid Build Coastguard Worker             }
118*ec779b8eSAndroid Build Coastguard Worker             // The incoming number is an int32_t contained in OMX_U32.
119*ec779b8eSAndroid Build Coastguard Worker             int32_t gapUs = (int32_t)((OMX_PARAM_U32TYPE*)params)->nU32;
120*ec779b8eSAndroid Build Coastguard Worker             mImpl->setAdjustTimestampGapUs(gapUs);
121*ec779b8eSAndroid Build Coastguard Worker             return OK;
122*ec779b8eSAndroid Build Coastguard Worker         }
123*ec779b8eSAndroid Build Coastguard Worker         case OMX_IndexParamConsumerUsageBits: {
124*ec779b8eSAndroid Build Coastguard Worker             if (size != sizeof(OMX_U32)) {
125*ec779b8eSAndroid Build Coastguard Worker                 return BAD_VALUE;
126*ec779b8eSAndroid Build Coastguard Worker             }
127*ec779b8eSAndroid Build Coastguard Worker             uint32_t usage = *((OMX_U32 *)params);
128*ec779b8eSAndroid Build Coastguard Worker             mImpl->setConsumerUsageBits(static_cast<uint64_t>(usage));
129*ec779b8eSAndroid Build Coastguard Worker             return OK;
130*ec779b8eSAndroid Build Coastguard Worker         }
131*ec779b8eSAndroid Build Coastguard Worker         case OMX_IndexParamConsumerUsageBits64: {
132*ec779b8eSAndroid Build Coastguard Worker             if (size != sizeof(OMX_U64)) {
133*ec779b8eSAndroid Build Coastguard Worker                 return BAD_VALUE;
134*ec779b8eSAndroid Build Coastguard Worker             }
135*ec779b8eSAndroid Build Coastguard Worker             uint64_t usagell = *((OMX_U64 *)params);
136*ec779b8eSAndroid Build Coastguard Worker             mImpl->setConsumerUsageBits(usagell);
137*ec779b8eSAndroid Build Coastguard Worker             return OK;
138*ec779b8eSAndroid Build Coastguard Worker         }
139*ec779b8eSAndroid Build Coastguard Worker         default:
140*ec779b8eSAndroid Build Coastguard Worker             break;
141*ec779b8eSAndroid Build Coastguard Worker     }
142*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
143*ec779b8eSAndroid Build Coastguard Worker }
144*ec779b8eSAndroid Build Coastguard Worker 
getConfig(OMX_INDEXTYPE index,void * config,size_t size)145*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::getConfig(OMX_INDEXTYPE index, void *config, size_t size) {
146*ec779b8eSAndroid Build Coastguard Worker     (void)index;
147*ec779b8eSAndroid Build Coastguard Worker     (void)config;
148*ec779b8eSAndroid Build Coastguard Worker     (void)size;
149*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
150*ec779b8eSAndroid Build Coastguard Worker }
151*ec779b8eSAndroid Build Coastguard Worker 
setConfig(OMX_INDEXTYPE index,const void * config,size_t size)152*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::setConfig(OMX_INDEXTYPE index, const void *config, size_t size) {
153*ec779b8eSAndroid Build Coastguard Worker     (void)index;
154*ec779b8eSAndroid Build Coastguard Worker     (void)config;
155*ec779b8eSAndroid Build Coastguard Worker     (void)size;
156*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
157*ec779b8eSAndroid Build Coastguard Worker }
158*ec779b8eSAndroid Build Coastguard Worker 
setPortMode(OMX_U32 portIndex,IOMX::PortMode mode)159*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::setPortMode(OMX_U32 portIndex, IOMX::PortMode mode) {
160*ec779b8eSAndroid Build Coastguard Worker     (void)portIndex;
161*ec779b8eSAndroid Build Coastguard Worker     (void)mode;
162*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
163*ec779b8eSAndroid Build Coastguard Worker }
164*ec779b8eSAndroid Build Coastguard Worker 
prepareForAdaptivePlayback(OMX_U32 portIndex,OMX_BOOL enable,OMX_U32 maxFrameWidth,OMX_U32 maxFrameHeight)165*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::prepareForAdaptivePlayback(
166*ec779b8eSAndroid Build Coastguard Worker         OMX_U32 portIndex, OMX_BOOL enable,
167*ec779b8eSAndroid Build Coastguard Worker         OMX_U32 maxFrameWidth, OMX_U32 maxFrameHeight) {
168*ec779b8eSAndroid Build Coastguard Worker     (void)portIndex;
169*ec779b8eSAndroid Build Coastguard Worker     (void)enable;
170*ec779b8eSAndroid Build Coastguard Worker     (void)maxFrameWidth;
171*ec779b8eSAndroid Build Coastguard Worker     (void)maxFrameHeight;
172*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
173*ec779b8eSAndroid Build Coastguard Worker }
174*ec779b8eSAndroid Build Coastguard Worker 
configureVideoTunnelMode(OMX_U32 portIndex,OMX_BOOL tunneled,OMX_U32 audioHwSync,native_handle_t ** sidebandHandle)175*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::configureVideoTunnelMode(
176*ec779b8eSAndroid Build Coastguard Worker         OMX_U32 portIndex, OMX_BOOL tunneled,
177*ec779b8eSAndroid Build Coastguard Worker         OMX_U32 audioHwSync, native_handle_t **sidebandHandle) {
178*ec779b8eSAndroid Build Coastguard Worker     (void)portIndex;
179*ec779b8eSAndroid Build Coastguard Worker     (void)tunneled;
180*ec779b8eSAndroid Build Coastguard Worker     (void)audioHwSync;
181*ec779b8eSAndroid Build Coastguard Worker     *sidebandHandle = nullptr;
182*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
183*ec779b8eSAndroid Build Coastguard Worker }
184*ec779b8eSAndroid Build Coastguard Worker 
getGraphicBufferUsage(OMX_U32 portIndex,OMX_U32 * usage)185*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::getGraphicBufferUsage(OMX_U32 portIndex, OMX_U32* usage) {
186*ec779b8eSAndroid Build Coastguard Worker     (void)portIndex;
187*ec779b8eSAndroid Build Coastguard Worker     *usage = 0;
188*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
189*ec779b8eSAndroid Build Coastguard Worker }
190*ec779b8eSAndroid Build Coastguard Worker 
setInputSurface(const sp<IOMXBufferSource> & bufferSource)191*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::setInputSurface(const sp<IOMXBufferSource> &bufferSource) {
192*ec779b8eSAndroid Build Coastguard Worker     return mImpl->setInputSurface(bufferSource);
193*ec779b8eSAndroid Build Coastguard Worker }
194*ec779b8eSAndroid Build Coastguard Worker 
allocateSecureBuffer(OMX_U32 portIndex,size_t size,buffer_id * buffer,void ** bufferData,sp<NativeHandle> * nativeHandle)195*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::allocateSecureBuffer(
196*ec779b8eSAndroid Build Coastguard Worker         OMX_U32 portIndex, size_t size, buffer_id *buffer,
197*ec779b8eSAndroid Build Coastguard Worker         void **bufferData, sp<NativeHandle> *nativeHandle) {
198*ec779b8eSAndroid Build Coastguard Worker     (void)portIndex;
199*ec779b8eSAndroid Build Coastguard Worker     (void)size;
200*ec779b8eSAndroid Build Coastguard Worker     (void)nativeHandle;
201*ec779b8eSAndroid Build Coastguard Worker     *buffer = 0;
202*ec779b8eSAndroid Build Coastguard Worker     *bufferData = nullptr;
203*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
204*ec779b8eSAndroid Build Coastguard Worker }
205*ec779b8eSAndroid Build Coastguard Worker 
useBuffer(OMX_U32 portIndex,const OMXBuffer & omxBuf,buffer_id * buffer)206*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::useBuffer(
207*ec779b8eSAndroid Build Coastguard Worker         OMX_U32 portIndex, const OMXBuffer &omxBuf, buffer_id *buffer) {
208*ec779b8eSAndroid Build Coastguard Worker     (void)portIndex;
209*ec779b8eSAndroid Build Coastguard Worker     (void)omxBuf;
210*ec779b8eSAndroid Build Coastguard Worker     *buffer = 0;
211*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
212*ec779b8eSAndroid Build Coastguard Worker }
213*ec779b8eSAndroid Build Coastguard Worker 
freeBuffer(OMX_U32 portIndex,buffer_id buffer)214*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::freeBuffer(OMX_U32 portIndex, buffer_id buffer) {
215*ec779b8eSAndroid Build Coastguard Worker     (void)portIndex;
216*ec779b8eSAndroid Build Coastguard Worker     (void)buffer;
217*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
218*ec779b8eSAndroid Build Coastguard Worker }
219*ec779b8eSAndroid Build Coastguard Worker 
fillBuffer(buffer_id buffer,const OMXBuffer & omxBuf,int fenceFd)220*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::fillBuffer(
221*ec779b8eSAndroid Build Coastguard Worker         buffer_id buffer, const OMXBuffer &omxBuf, int fenceFd) {
222*ec779b8eSAndroid Build Coastguard Worker     (void)buffer;
223*ec779b8eSAndroid Build Coastguard Worker     (void)omxBuf;
224*ec779b8eSAndroid Build Coastguard Worker     (void)fenceFd;
225*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
226*ec779b8eSAndroid Build Coastguard Worker }
227*ec779b8eSAndroid Build Coastguard Worker 
228*ec779b8eSAndroid Build Coastguard Worker namespace {
toNodeFlags(OMX_U32 flags)229*ec779b8eSAndroid Build Coastguard Worker     uint32_t toNodeFlags(OMX_U32 flags) {
230*ec779b8eSAndroid Build Coastguard Worker         uint32_t retFlags = 0;
231*ec779b8eSAndroid Build Coastguard Worker         if (flags & OMX_BUFFERFLAG_ENDOFFRAME) {
232*ec779b8eSAndroid Build Coastguard Worker             retFlags |= BUFFERFLAG_ENDOFFRAME;
233*ec779b8eSAndroid Build Coastguard Worker         }
234*ec779b8eSAndroid Build Coastguard Worker         if (flags & OMX_BUFFERFLAG_EOS) {
235*ec779b8eSAndroid Build Coastguard Worker             retFlags |= BUFFERFLAG_EOS;
236*ec779b8eSAndroid Build Coastguard Worker         }
237*ec779b8eSAndroid Build Coastguard Worker         return retFlags;
238*ec779b8eSAndroid Build Coastguard Worker     }
toNodeTimestamp(OMX_TICKS ticks)239*ec779b8eSAndroid Build Coastguard Worker     int64_t toNodeTimestamp(OMX_TICKS ticks) {
240*ec779b8eSAndroid Build Coastguard Worker         int64_t timestamp = 0;
241*ec779b8eSAndroid Build Coastguard Worker #ifndef OMX_SKIP64BIT
242*ec779b8eSAndroid Build Coastguard Worker         timestamp = ticks;
243*ec779b8eSAndroid Build Coastguard Worker #else
244*ec779b8eSAndroid Build Coastguard Worker         timestamp = ((ticks.nHighPart << 32) | ticks.nLowPart);
245*ec779b8eSAndroid Build Coastguard Worker #endif
246*ec779b8eSAndroid Build Coastguard Worker         return timestamp;
247*ec779b8eSAndroid Build Coastguard Worker     }
248*ec779b8eSAndroid Build Coastguard Worker } // anonymous namespace
249*ec779b8eSAndroid Build Coastguard Worker 
emptyBuffer(buffer_id buffer,const OMXBuffer & omxBuf,OMX_U32 flags,OMX_TICKS timestamp,int fenceFd)250*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::emptyBuffer(
251*ec779b8eSAndroid Build Coastguard Worker         buffer_id buffer, const OMXBuffer &omxBuf,
252*ec779b8eSAndroid Build Coastguard Worker         OMX_U32 flags, OMX_TICKS timestamp, int fenceFd) {
253*ec779b8eSAndroid Build Coastguard Worker     if (omxBuf.mBufferType == OMXBuffer::kBufferTypeANWBuffer
254*ec779b8eSAndroid Build Coastguard Worker             && omxBuf.mGraphicBuffer != nullptr) {
255*ec779b8eSAndroid Build Coastguard Worker         return mImpl->submitBuffer(buffer, omxBuf.mGraphicBuffer, toNodeFlags(flags),
256*ec779b8eSAndroid Build Coastguard Worker                                   toNodeTimestamp(timestamp), fenceFd);
257*ec779b8eSAndroid Build Coastguard Worker     }
258*ec779b8eSAndroid Build Coastguard Worker     sp<GraphicBuffer> gBuf;
259*ec779b8eSAndroid Build Coastguard Worker     return mImpl->submitBuffer(buffer, gBuf, toNodeFlags(flags),
260*ec779b8eSAndroid Build Coastguard Worker                               toNodeTimestamp(timestamp), fenceFd);
261*ec779b8eSAndroid Build Coastguard Worker }
262*ec779b8eSAndroid Build Coastguard Worker 
getExtensionIndex(const char * parameterName,OMX_INDEXTYPE * index)263*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::getExtensionIndex(
264*ec779b8eSAndroid Build Coastguard Worker         const char *parameterName, OMX_INDEXTYPE *index) {
265*ec779b8eSAndroid Build Coastguard Worker     (void)parameterName;
266*ec779b8eSAndroid Build Coastguard Worker     *index = OMX_IndexMax;
267*ec779b8eSAndroid Build Coastguard Worker     return ERROR_UNSUPPORTED;
268*ec779b8eSAndroid Build Coastguard Worker }
269*ec779b8eSAndroid Build Coastguard Worker 
dispatchMessage(const omx_message & msg)270*ec779b8eSAndroid Build Coastguard Worker status_t C2OMXNode::dispatchMessage(const omx_message& msg) {
271*ec779b8eSAndroid Build Coastguard Worker     if (msg.type != omx_message::EVENT) {
272*ec779b8eSAndroid Build Coastguard Worker         return ERROR_UNSUPPORTED;
273*ec779b8eSAndroid Build Coastguard Worker     }
274*ec779b8eSAndroid Build Coastguard Worker     if (msg.u.event_data.event != OMX_EventDataSpaceChanged) {
275*ec779b8eSAndroid Build Coastguard Worker         return ERROR_UNSUPPORTED;
276*ec779b8eSAndroid Build Coastguard Worker     }
277*ec779b8eSAndroid Build Coastguard Worker     return mImpl->onDataspaceChanged(
278*ec779b8eSAndroid Build Coastguard Worker             msg.u.event_data.data1,
279*ec779b8eSAndroid Build Coastguard Worker             msg.u.event_data.data3);
280*ec779b8eSAndroid Build Coastguard Worker }
281*ec779b8eSAndroid Build Coastguard Worker 
getSource()282*ec779b8eSAndroid Build Coastguard Worker sp<IOMXBufferSource> C2OMXNode::getSource() {
283*ec779b8eSAndroid Build Coastguard Worker     return mImpl->getSource();
284*ec779b8eSAndroid Build Coastguard Worker }
285*ec779b8eSAndroid Build Coastguard Worker 
setFrameSize(uint32_t width,uint32_t height)286*ec779b8eSAndroid Build Coastguard Worker void C2OMXNode::setFrameSize(uint32_t width, uint32_t height) {
287*ec779b8eSAndroid Build Coastguard Worker     return mImpl->setFrameSize(width, height);
288*ec779b8eSAndroid Build Coastguard Worker }
289*ec779b8eSAndroid Build Coastguard Worker 
onInputBufferDone(c2_cntr64_t index)290*ec779b8eSAndroid Build Coastguard Worker void C2OMXNode::onInputBufferDone(c2_cntr64_t index) {
291*ec779b8eSAndroid Build Coastguard Worker     return mImpl->onInputBufferDone(index);
292*ec779b8eSAndroid Build Coastguard Worker }
293*ec779b8eSAndroid Build Coastguard Worker 
onInputBufferEmptied()294*ec779b8eSAndroid Build Coastguard Worker void C2OMXNode::onInputBufferEmptied() {
295*ec779b8eSAndroid Build Coastguard Worker     return mImpl->onInputBufferEmptied();
296*ec779b8eSAndroid Build Coastguard Worker }
297*ec779b8eSAndroid Build Coastguard Worker 
getDataspace()298*ec779b8eSAndroid Build Coastguard Worker android_dataspace C2OMXNode::getDataspace() {
299*ec779b8eSAndroid Build Coastguard Worker     return mImpl->getDataspace();
300*ec779b8eSAndroid Build Coastguard Worker }
301*ec779b8eSAndroid Build Coastguard Worker 
getPixelFormat()302*ec779b8eSAndroid Build Coastguard Worker uint32_t C2OMXNode::getPixelFormat() {
303*ec779b8eSAndroid Build Coastguard Worker     return mImpl->getPixelFormat();
304*ec779b8eSAndroid Build Coastguard Worker }
305*ec779b8eSAndroid Build Coastguard Worker 
setPriority(int priority)306*ec779b8eSAndroid Build Coastguard Worker void C2OMXNode::setPriority(int priority) {
307*ec779b8eSAndroid Build Coastguard Worker     return mImpl->setPriority(priority);
308*ec779b8eSAndroid Build Coastguard Worker }
309*ec779b8eSAndroid Build Coastguard Worker 
310*ec779b8eSAndroid Build Coastguard Worker }  // namespace android
311