• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 /**
19     @file pv_omxcomponent.h
20     OpenMax decoder_component base header file.
21 
22 */
23 
24 #ifndef PV_OMXCOMPONENT_H_INCLUDED
25 #define PV_OMXCOMPONENT_H_INCLUDED
26 
27 #ifndef OMX_Component_h
28 #include "OMX_Component.h"
29 #endif
30 
31 
32 #ifndef OSCL_SCHEDULER_H_INCLUDED
33 #include "oscl_scheduler.h"
34 #endif
35 
36 #ifndef PVLOGGER_H_INCLUDED
37 #include "pvlogger.h"
38 #endif
39 
40 #ifndef PV_OMX_QUEUE_H_INCLUDED
41 #include "pv_omx_queue.h"
42 #endif
43 
44 #ifndef PV_OMXCORE_H_INCLUDED
45 #include "pv_omxcore.h"
46 #endif
47 
48 
49 #define OMX_PORT_INPUTPORT_INDEX OMX_DirInput
50 #define OMX_PORT_OUTPUTPORT_INDEX OMX_DirOutput
51 #define OMX_PORT_ALLPORT_INDEX -1
52 
53 #define OMX_PORT_NUMBER_FORMATS_SUPPORTED 4
54 
55 
56 /* Application's private data */
57 typedef struct ComponentPrivateType
58 {
59     OMX_HANDLETYPE CompHandle;
60 
61 } ComponentPrivateType;
62 
63 /**
64  * This is the Component template from which all
65  * other Component instances are factored by the core.
66  */
67 /**
68  * The structure for port Type.
69  */
70 typedef struct ComponentPortType
71 {
72     /** @param pBuffer An array of pointers to buffer headers. */
73     OMX_BUFFERHEADERTYPE** pBuffer;
74     /** @param BufferState The State of the Buffer whether assigned or allocated */
75     OMX_U32* BufferState;
76     /** @param NumAssignedBuffers Number of buffer assigned on each port */
77     OMX_U32 NumAssignedBuffers;
78     /** @param pBufferQueue queue for buffer to be processed by the port */
79     QueueType* pBufferQueue;
80     OMX_STATETYPE TransientState;
81     /** @param BufferUnderProcess  Boolean variables indicate whether the port is processing any buffer */
82     OMX_BOOL BufferUnderProcess;
83     OMX_PARAM_PORTDEFINITIONTYPE PortParam;
84     /** @param NumBufferFlushed Number of buffer Flushed */
85     OMX_U32 NumBufferFlushed;
86     /** @param IsPortFlushed Boolean variables indicate port is being flushed at the moment */
87     OMX_BOOL IsPortFlushed;
88 
89     //AUDIO SPECIFIC PARAMETERS
90     OMX_AUDIO_PARAM_PORTFORMATTYPE  AudioParam;
91     OMX_AUDIO_PARAM_PCMMODETYPE     AudioPcmMode;
92     OMX_AUDIO_PARAM_WMATYPE         AudioWmaParam;
93     OMX_AUDIO_PARAM_MP3TYPE         AudioMp3Param;
94     OMX_AUDIO_CONFIG_EQUALIZERTYPE  AudioEqualizerType;
95     OMX_AUDIO_PARAM_AACPROFILETYPE  AudioAacParam;
96     OMX_AUDIO_PARAM_AMRTYPE         AudioAmrParam;
97 
98     //VIDEO SPECIFIC PARAMETERS
99     OMX_VIDEO_PARAM_PORTFORMATTYPE   VideoParam[OMX_PORT_NUMBER_FORMATS_SUPPORTED];
100     OMX_VIDEO_PARAM_PROFILELEVELTYPE ProfileLevel;
101     OMX_VIDEO_PARAM_MPEG4TYPE        VideoMpeg4;
102     OMX_VIDEO_PARAM_H263TYPE         VideoH263;
103     OMX_VIDEO_PARAM_AVCTYPE          VideoAvc;
104     OMX_VIDEO_PARAM_WMVTYPE          VideoWmv;
105 
106     //VIDEO ENCODER SPECIFIC PARAMETERS
107     OMX_CONFIG_ROTATIONTYPE             VideoOrientationType;
108     OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE VideoErrorCorrection;
109     OMX_VIDEO_PARAM_BITRATETYPE         VideoRateType;      //Only for rate control type in mpeg4
110     OMX_VIDEO_PARAM_QUANTIZATIONTYPE    VideoQuantType;
111     OMX_VIDEO_PARAM_VBSMCTYPE           VideoBlockMotionSize;
112     OMX_VIDEO_PARAM_MOTIONVECTORTYPE    VideoMotionVector;
113     OMX_VIDEO_PARAM_INTRAREFRESHTYPE    VideoIntraRefresh;
114     OMX_VIDEO_PARAM_AVCSLICEFMO         AvcSliceFMO;
115 
116     OMX_CONFIG_FRAMERATETYPE            VideoConfigFrameRateType;
117     OMX_VIDEO_CONFIG_BITRATETYPE        VideoConfigBitRateType;
118 
119     //This will be used to dynamically request the Iframe using SetConfig API
120     OMX_CONFIG_INTRAREFRESHVOPTYPE      VideoIFrame;
121 
122     OMX_U32  ActualNumPortFormatsSupported;
123 
124 } ComponentPortType;
125 
126 
127 
128 class OSCL_IMPORT_REF OmxComponentBase : public OsclActiveObject
129 {
130     public:
131 
132         OmxComponentBase();
~OmxComponentBase()133         virtual ~OmxComponentBase() {}
134 
135         /** Component entry points declarations without proxy interface*/
136         static OMX_ERRORTYPE BaseComponentGetComponentVersion(
137             OMX_IN  OMX_HANDLETYPE hComponent,
138             OMX_OUT OMX_STRING pComponentName,
139             OMX_OUT OMX_VERSIONTYPE* pComponentVersion,
140             OMX_OUT OMX_VERSIONTYPE* pSpecVersion,
141             OMX_OUT OMX_UUIDTYPE* pComponentUUID);
142 
143         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentGetConfig(
144             OMX_IN  OMX_HANDLETYPE hComponent,
145             OMX_IN  OMX_INDEXTYPE nIndex,
146             OMX_INOUT OMX_PTR pComponentConfigStructure);
147 
148         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentSetConfig(
149             OMX_IN  OMX_HANDLETYPE hComponent,
150             OMX_IN  OMX_INDEXTYPE nIndex,
151             OMX_IN  OMX_PTR pComponentConfigStructure);
152 
153         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentGetExtensionIndex(
154             OMX_IN  OMX_HANDLETYPE hComponent,
155             OMX_IN  OMX_STRING cParameterName,
156             OMX_OUT OMX_INDEXTYPE* pIndexType);
157 
158         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentGetState(
159             OMX_IN  OMX_HANDLETYPE hComponent,
160             OMX_OUT OMX_STATETYPE* pState);
161 
162         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentGetParameter(
163             OMX_IN  OMX_HANDLETYPE hComponent,
164             OMX_IN  OMX_INDEXTYPE nParamIndex,
165             OMX_INOUT OMX_PTR ComponentParameterStructure);
166 
167         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentSetParameter(
168             OMX_IN  OMX_HANDLETYPE hComponent,
169             OMX_IN  OMX_INDEXTYPE nParamIndex,
170             OMX_IN  OMX_PTR ComponentParameterStructure);
171 
172         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentUseBuffer(
173             OMX_IN OMX_HANDLETYPE hComponent,
174             OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
175             OMX_IN OMX_U32 nPortIndex,
176             OMX_IN OMX_PTR pAppPrivate,
177             OMX_IN OMX_U32 nSizeBytes,
178             OMX_IN OMX_U8* pBuffer);
179 
180         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentAllocateBuffer(
181             OMX_IN OMX_HANDLETYPE hComponent,
182             OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
183             OMX_IN OMX_U32 nPortIndex,
184             OMX_IN OMX_PTR pAppPrivate,
185             OMX_IN OMX_U32 nSizeBytes);
186 
187         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentFreeBuffer(
188             OMX_IN  OMX_HANDLETYPE hComponent,
189             OMX_IN  OMX_U32 nPortIndex,
190             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
191 
192         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentSendCommand(
193             OMX_IN  OMX_HANDLETYPE hComponent,
194             OMX_IN  OMX_COMMANDTYPE Cmd,
195             OMX_IN  OMX_U32 nParam,
196             OMX_IN  OMX_PTR pCmdData);
197 
198         static OMX_ERRORTYPE BaseComponentComponentDeInit(
199             OMX_IN  OMX_HANDLETYPE hComponent);
200 
201         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentEmptyThisBuffer(
202             OMX_IN  OMX_HANDLETYPE hComponent,
203             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
204 
205         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentFillThisBuffer(
206             OMX_IN  OMX_HANDLETYPE hComponent,
207             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
208 
209         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentSetCallbacks(
210             OMX_IN  OMX_HANDLETYPE hComponent,
211             OMX_IN  OMX_CALLBACKTYPE* pCallbacks,
212             OMX_IN  OMX_PTR pAppData);
213 
214         /** Component entry points declarations with proxy interface*/
215 #if PROXY_INTERFACE
216         static OMX_ERRORTYPE BaseComponentProxyGetComponentVersion(
217             OMX_IN  OMX_HANDLETYPE hComponent,
218             OMX_OUT OMX_STRING pComponentName,
219             OMX_OUT OMX_VERSIONTYPE* pComponentVersion,
220             OMX_OUT OMX_VERSIONTYPE* pSpecVersion,
221             OMX_OUT OMX_UUIDTYPE* pComponentUUID);
222 
223         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxyGetParameter(
224             OMX_IN  OMX_HANDLETYPE hComponent,
225             OMX_IN  OMX_INDEXTYPE nParamIndex,
226             OMX_INOUT OMX_PTR ComponentParameterStructure);
227 
228         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxySetParameter(
229             OMX_IN  OMX_HANDLETYPE hComponent,
230             OMX_IN  OMX_INDEXTYPE nParamIndex,
231             OMX_IN  OMX_PTR ComponentParameterStructure);
232 
233         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxyGetConfig(
234             OMX_IN  OMX_HANDLETYPE hComponent,
235             OMX_IN  OMX_INDEXTYPE nIndex,
236             OMX_INOUT OMX_PTR pComponentConfigStructure);
237 
238         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxySetConfig(
239             OMX_IN  OMX_HANDLETYPE hComponent,
240             OMX_IN  OMX_INDEXTYPE nIndex,
241             OMX_IN  OMX_PTR pComponentConfigStructure);
242 
243         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxyGetExtensionIndex(
244             OMX_IN  OMX_HANDLETYPE hComponent,
245             OMX_IN  OMX_STRING cParameterName,
246             OMX_OUT OMX_INDEXTYPE* pIndexType);
247 
248         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxyGetState(
249             OMX_IN  OMX_HANDLETYPE hComponent,
250             OMX_OUT OMX_STATETYPE* pState);
251 
252         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxyUseBuffer(
253             OMX_IN OMX_HANDLETYPE hComponent,
254             OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
255             OMX_IN OMX_U32 nPortIndex,
256             OMX_IN OMX_PTR pAppPrivate,
257             OMX_IN OMX_U32 nSizeBytes,
258             OMX_IN OMX_U8* pBuffer);
259 
260         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxyAllocateBuffer(
261             OMX_IN OMX_HANDLETYPE hComponent,
262             OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
263             OMX_IN OMX_U32 nPortIndex,
264             OMX_IN OMX_PTR pAppPrivate,
265             OMX_IN OMX_U32 nSizeBytes);
266 
267         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxyFreeBuffer(
268             OMX_IN  OMX_HANDLETYPE hComponent,
269             OMX_IN  OMX_U32 nPortIndex,
270             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
271 
272         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxySendCommand(
273             OMX_IN  OMX_HANDLETYPE hComponent,
274             OMX_IN  OMX_COMMANDTYPE Cmd,
275             OMX_IN  OMX_U32 nParam,
276             OMX_IN  OMX_PTR pCmdData);
277 
278         static OMX_ERRORTYPE BaseComponentProxyComponentDeInit(
279             OMX_IN  OMX_HANDLETYPE hComponent);
280 
281         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxyEmptyThisBuffer(
282             OMX_IN  OMX_HANDLETYPE hComponent,
283             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
284 
285         static OSCL_IMPORT_REF OMX_ERRORTYPE BaseComponentProxyFillThisBuffer(
286             OMX_IN  OMX_HANDLETYPE hComponent,
287             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
288 
289         static OMX_ERRORTYPE BaseComponentProxySetCallbacks(
290             OMX_IN  OMX_HANDLETYPE hComponent,
291             OMX_IN  OMX_CALLBACKTYPE* pCallbacks,
292             OMX_IN  OMX_PTR pAppData);
293 
294 #endif // PROXY_INTERFACE
295 
296         /*NON STATIC COUNTERPARTS OF STATIC MEMBER API'S */
297 
298         //Pure virtual functions, definition to be written in derived class
299         virtual OMX_ERRORTYPE GetParameter(
300             OMX_IN  OMX_HANDLETYPE hComponent,
301             OMX_IN  OMX_INDEXTYPE nParamIndex,
302             OMX_INOUT OMX_PTR ComponentParameterStructure) = 0;
303 
304         virtual OMX_ERRORTYPE SetParameter(
305             OMX_IN  OMX_HANDLETYPE hComponent,
306             OMX_IN  OMX_INDEXTYPE nParamIndex,
307             OMX_IN  OMX_PTR ComponentParameterStructure) = 0;
308 
309         virtual OSCL_IMPORT_REF OMX_ERRORTYPE GetConfig(
310             OMX_IN  OMX_HANDLETYPE hComponent,
311             OMX_IN  OMX_INDEXTYPE nIndex,
312             OMX_INOUT OMX_PTR pComponentConfigStructure);
313 
314         //Making Setconfig as virtual function to be implemented in respective component class
315         virtual OSCL_IMPORT_REF OMX_ERRORTYPE SetConfig(
316             OMX_IN  OMX_HANDLETYPE hComponent,
317             OMX_IN  OMX_INDEXTYPE nIndex,
318             OMX_IN  OMX_PTR pComponentConfigStructure);
319 
320         OMX_ERRORTYPE GetExtensionIndex(
321             OMX_IN  OMX_HANDLETYPE hComponent,
322             OMX_IN  OMX_STRING cParameterName,
323             OMX_OUT OMX_INDEXTYPE* pIndexType);
324 
325         void GetState(OMX_OUT OMX_STATETYPE* pState);
326 
327         OMX_ERRORTYPE UseBuffer(
328             OMX_IN OMX_HANDLETYPE hComponent,
329             OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
330             OMX_IN OMX_U32 nPortIndex,
331             OMX_IN OMX_PTR pAppPrivate,
332             OMX_IN OMX_U32 nSizeBytes,
333             OMX_IN OMX_U8* pBuffer);
334 
335         OMX_ERRORTYPE AllocateBuffer(
336             OMX_IN OMX_HANDLETYPE hComponent,
337             OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
338             OMX_IN OMX_U32 nPortIndex,
339             OMX_IN OMX_PTR pAppPrivate,
340             OMX_IN OMX_U32 nSizeBytes);
341 
342         OMX_ERRORTYPE FreeBuffer(
343             OMX_IN  OMX_HANDLETYPE hComponent,
344             OMX_IN  OMX_U32 nPortIndex,
345             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
346 
347         OMX_ERRORTYPE SendCommand(
348             OMX_IN  OMX_HANDLETYPE hComponent,
349             OMX_IN  OMX_COMMANDTYPE Cmd,
350             OMX_IN  OMX_S32 nParam,
351             OMX_IN  OMX_PTR pCmdData);
352 
353         OMX_ERRORTYPE EmptyThisBuffer(
354             OMX_IN  OMX_HANDLETYPE hComponent,
355             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
356 
357         OMX_ERRORTYPE FillThisBuffer(
358             OMX_IN  OMX_HANDLETYPE hComponent,
359             OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
360 
361         OMX_ERRORTYPE SetCallbacks(
362             OMX_IN  OMX_HANDLETYPE hComponent,
363             OMX_IN  OMX_CALLBACKTYPE* pCallbacks,
364             OMX_IN  OMX_PTR pAppData);
365 
366 
GetOmxHandle()367         OMX_PTR GetOmxHandle()
368         {
369             return &iOmxComponent;
370         };
371 
372         /*OTHER PROCESSING FUNCTIONS */
373 
374         //Pure virtual function called from base, must have a definition in derived components
375         //virtual void Decode() = 0;
376         virtual void ProcessData() = 0;
377 
378         virtual OSCL_IMPORT_REF void BufferMgmtFunction();
379         virtual OSCL_IMPORT_REF OMX_BOOL BufferMgmtWithoutMarker();
380         //Extra routines called from BufferMgmtWithoutMarker that may vary from component to component
381         virtual OSCL_IMPORT_REF void ComponentBufferMgmtWithoutMarker();
382         OSCL_IMPORT_REF void TempInputBufferMgmtWithoutMarker();
383 
384 
ProcessInBufferFlag()385         virtual void ProcessInBufferFlag() {};
386 
387         /* This function will exist only for audio components, thats why can't be made puire virtual
388            Also putting it into the audio base class will require a check everytime in the
389            BufferMgmtFunction() to create either an audio or video pointer to access this function
390         */
SyncWithInputTimestamp()391         virtual void SyncWithInputTimestamp() {};
ResetComponent()392         virtual void ResetComponent() {};
ReAllocatePartialAssemblyBuffers(OMX_BUFFERHEADERTYPE * aInputBufferHdr)393         virtual OMX_ERRORTYPE ReAllocatePartialAssemblyBuffers(OMX_BUFFERHEADERTYPE* aInputBufferHdr)
394         {
395             OSCL_UNUSED_ARG(aInputBufferHdr);
396             return OMX_ErrorNone;
397         }
398 
399         OMX_BOOL AssemblePartialFrames(OMX_BUFFERHEADERTYPE* aInputBuffer);
400         virtual OSCL_IMPORT_REF OMX_BOOL ParseFullAVCFramesIntoNALs(OMX_BUFFERHEADERTYPE* aInputBuffer);
401         OMX_ERRORTYPE MessageHandler(CoreMessage* Message);
402         OMX_ERRORTYPE DoStateSet(OMX_U32);
403 
404         OMX_ERRORTYPE DisablePort(OMX_S32 PortIndex);
405         void DisableSinglePort(OMX_U32 PortIndex);
406 
407         OMX_ERRORTYPE EnablePort(OMX_S32 PortIndex);
408         void EnableSinglePort(OMX_U32 PortIndex);
409 
410         OMX_ERRORTYPE FlushPort(OMX_S32 PortIndex);
411         void SetPortFlushFlag(OMX_S32, OMX_S32 index, OMX_BOOL value);
412         void SetNumBufferFlush(OMX_S32, OMX_S32 index, OMX_S32 value);
413 
414         OSCL_IMPORT_REF void ReturnInputBuffer(OMX_BUFFERHEADERTYPE* pInputBuffer, ComponentPortType* pPort);
415         OSCL_IMPORT_REF void ReturnOutputBuffer(OMX_BUFFERHEADERTYPE* pOutputBuffer, ComponentPortType* pPort);
416 
417         virtual OMX_ERRORTYPE ComponentInit() = 0;
418         virtual OMX_ERRORTYPE ComponentDeInit() = 0;
419 
420         OSCL_IMPORT_REF OMX_ERRORTYPE ConstructBaseComponent(OMX_PTR pAppData);
421         OSCL_IMPORT_REF OMX_ERRORTYPE DestroyBaseComponent();
422 
423         OMX_ERRORTYPE TunnelRequest(
424             OMX_IN  OMX_HANDLETYPE hComp,
425             OMX_IN  OMX_U32 nPort,
426             OMX_IN  OMX_HANDLETYPE hTunneledComp,
427             OMX_IN  OMX_U32 nTunneledPort,
428             OMX_INOUT  OMX_TUNNELSETUPTYPE* pTunnelSetup);
429 
430         OMX_ERRORTYPE ParameterSanityCheck(
431             OMX_IN  OMX_HANDLETYPE hComponent,
432             OMX_IN  OMX_U32 nPortIndex,
433             OMX_IN  OMX_PTR pStructure,
434             OMX_IN  size_t size);
435 
436         OSCL_IMPORT_REF void SetHeader(OMX_PTR aheader, OMX_U32 asize);
437         OSCL_IMPORT_REF OMX_ERRORTYPE CheckHeader(OMX_PTR aheader, OMX_U32 asize);
438 
439         void ResetAfterFlush(OMX_S32 PortIndex);
440 
441         //Flag to call BufferMgmtFunction in the RunL() when the component state is executing
442         OMX_BOOL                iBufferExecuteFlag;
443         ComponentPrivateType*   ipAppPriv;
444 
445 
446     protected:
447 
448         PVLogger* iLogger;
449 
450         OSCL_IMPORT_REF void Run();
451 
452         OMX_CALLBACKTYPE*   ipCallbacks;
453         OMX_PTR             iCallbackData;
454         OMX_STATETYPE       iState;
455 
456         CoreDescriptorType* ipCoreDescriptor;
457         OMX_U32             iNumInputBuffer;
458 
459         OMX_U8*             ipFrameDecodeBuffer;
460         OMX_BOOL            iPartialFrameAssembly;
461         OMX_BOOL            iIsInputBufferEnded;
462         OMX_BOOL            iEndofStream;
463         OMX_U8*             ipTempInputBuffer;
464         OMX_U32             iTempInputBufferLength;
465         OMX_COMPONENTTYPE*  ipTargetComponent;
466         OMX_PTR             iTargetMarkData;
467         OMX_COMPONENTTYPE*  ipTempTargetComponent;
468         OMX_PTR             iTempTargetMarkData;
469         OMX_BOOL            iMarkPropagate;
470         OMX_BOOL            iNewInBufferRequired;
471         OMX_BOOL            iNewOutBufRequired;
472         OMX_U32             iTempConsumedLength;
473         OMX_U32             iOutBufferCount;
474         OMX_BOOL            iCodecReady;
475         OMX_U8*             ipInputCurrBuffer;
476         OMX_U32             iInputCurrBufferSize;
477         OMX_U32             iInputCurrLength;
478         OMX_S32             iFrameCount;
479         OMX_BOOL            iStateTransitionFlag;
480 
481         OMX_BOOL                iEndOfFrameFlag;
482         OMX_BUFFERHEADERTYPE*   ipInputBuffer;
483         OMX_BUFFERHEADERTYPE*   ipOutputBuffer;
484         OMX_U32                 iOutputFrameLength;
485         OMX_COMPONENTTYPE       iOmxComponent;  // structure
486         OMX_U32                 iNumPorts;
487         OMX_U32                 iCompressedFormatPortNum;
488         OMX_PTR                 ipComponentProxy;
489 
490         PV_OMXComponentCapabilityFlagsType iPVCapabilityFlags;
491 
492         //The ports of the component
493         ComponentPortType** ipPorts;
494         //Indicate whether component has been already initialized */
495         OMX_BOOL iIsInit;
496         //OpenMAX standard parameter that contains a short description of the available ports
497         OMX_PORT_PARAM_TYPE iPortTypesParam;
498         OMX_U32 iGroupPriority;
499         //ID of a group of components that share the same logical chain
500         OMX_U32 iGroupID;
501         //Roles of the component
502         OMX_U8 iComponentRole[OMX_MAX_STRINGNAME_SIZE];
503         //Flag to indicate whether role has been set by client or not
504         OMX_BOOL iComponentRoleFlag;
505         //This field holds the private data associated with a mark request, if any
506         OMX_MARKTYPE* ipMark;
507 
508         OMX_BOOL                iEosProcessing;
509         OMX_BOOL                iFirstFragment;
510         OMX_TICKS               iFrameTimestamp;
511         OMX_BOOL                iRepositionFlag;
512         OMX_U32                 iSamplesPerFrame;
513         OMX_BOOL                iSilenceInsertionInProgress;
514         OMX_U32                 iSilenceFramesNeeded;
515         OMX_BOOL                iIsFirstOutputFrame;
516         OMX_S32                 iInputBufferRemainingBytes;
517         OMX_BOOL                iResizePending;
518         OMX_U8*                 ipTempOutBufferForPortReconfig;
519         OMX_U32                 iSizeOutBufferForPortReconfig;
520         OMX_BOOL                iSendOutBufferAfterPortReconfigFlag;
521         OMX_TICKS               iTimestampOutBufferForPortReconfig;
522         OMX_TICKS               iOutputMicroSecPerFrame;
523 
524 
525         OMX_BOOL                iIsAudioComponent;
526 
527 
528 };
529 
530 
531 class OSCL_IMPORT_REF OmxComponentAudio : public OmxComponentBase
532 {
533     public:
534         OSCL_IMPORT_REF OmxComponentAudio();
~OmxComponentAudio()535         virtual ~OmxComponentAudio() {}
536 
537         OSCL_IMPORT_REF OMX_ERRORTYPE GetParameter(
538             OMX_IN  OMX_HANDLETYPE hComponent,
539             OMX_IN  OMX_INDEXTYPE nParamIndex,
540             OMX_INOUT OMX_PTR ComponentParameterStructure);
541 
542         OSCL_IMPORT_REF OMX_ERRORTYPE SetParameter(
543             OMX_IN  OMX_HANDLETYPE hComponent,
544             OMX_IN  OMX_INDEXTYPE nParamIndex,
545             OMX_IN  OMX_PTR ComponentParameterStructure);
546 
UpdateAACPlusFlag(OMX_BOOL aAacPlusFlag)547         virtual void UpdateAACPlusFlag(OMX_BOOL aAacPlusFlag)
548         {
549             OSCL_UNUSED_ARG(aAacPlusFlag);
550         }
551 };
552 
553 
554 
555 class OSCL_IMPORT_REF OmxComponentVideo : public OmxComponentBase
556 {
557     public:
558         OSCL_IMPORT_REF OmxComponentVideo();
~OmxComponentVideo()559         virtual ~OmxComponentVideo() {}
560 
561         OSCL_IMPORT_REF OMX_ERRORTYPE GetParameter(
562             OMX_IN  OMX_HANDLETYPE hComponent,
563             OMX_IN  OMX_INDEXTYPE nParamIndex,
564             OMX_INOUT OMX_PTR ComponentParameterStructure);
565 
566         OSCL_IMPORT_REF OMX_ERRORTYPE SetParameter(
567             OMX_IN  OMX_HANDLETYPE hComponent,
568             OMX_IN  OMX_INDEXTYPE nParamIndex,
569             OMX_IN  OMX_PTR ComponentParameterStructure);
570 
571 
572 };
573 
574 
575 #endif      //#ifndef PV_OMXCOMPONENT_H_INCLUDED
576