1
2/*
3 * Copyright (C) Texas Instruments - http://www.ti.com/
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 * Lesser General Public License for more details.
15 *
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20 */
21/* =============================================================================
22*             Texas Instruments OMAP(TM) Platform Software
23*  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
24*
25*  Use of this software is controlled by the terms and conditions found
26*  in the license agreement under which this software has been supplied.
27* ============================================================================ */
28/**
29* @file OMX_WbAmrDecoder.h
30*
31* This is an header file for an audio PCM decoder that is fully
32* compliant with the OMX Audio specification.
33* This the file that the application that uses OMX would include
34* in its code.
35*
36* @path $(CSLPATH)\
37*
38* @rev 0.1
39*/
40/* --------------------------------------------------------------------------- */
41
42#ifndef OMX_WBAMR_DECODER_H
43#define OMX_WBAMR_DECODER_H
44
45#include "LCML_DspCodec.h"
46#include <OMX_Component.h>
47#include <pthread.h>
48#include <OMX_TI_Debug.h>
49
50#ifdef __PERF_INSTRUMENTATION__
51    #include "perf.h"
52#endif
53
54#ifndef UNDER_CE
55#ifdef DSP_RENDERING_ON
56#include <AudioManagerAPI.h>
57#endif
58
59#ifdef RESOURCE_MANAGER_ENABLED
60#include <ResourceManagerProxyAPI.h>
61#endif
62#endif
63
64#ifndef ANDROID
65    #define ANDROID
66#endif
67
68#ifdef ANDROID
69    #undef LOG_TAG
70    #define LOG_TAG "OMX_WBAMRDEC"
71
72/* PV opencore capability custom parameter index */
73    #define PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347
74#endif
75
76/* =======================================================================
77 *
78 ** Default timeout used to come out of blocking calls*
79 *
80 *
81 ======================================================================= */
82#define WBAMR_DEC_TIMEOUT (1000) /* millisecs */
83
84/* ======================================================================= */
85/**
86 * @def    NUM_WMADEC_INPUT_BUFFERS   Default number of input buffers
87 *
88 */
89/* ======================================================================= */
90#define NUM_WBAMRDEC_INPUT_BUFFERS 1
91/* ======================================================================= */
92/**
93 * @def    NUM_WMADEC_OUTPUT_BUFFERS   Default number of output buffers
94 *
95 */
96/* ======================================================================= */
97#define NUM_WBAMRDEC_OUTPUT_BUFFERS 2
98/* ======================================================================= */
99/**
100 * @def    NUM_WMADEC_OUTPUT_BUFFERS   Default number of output buffers DASF
101 *
102 */
103/* ======================================================================= */
104#define NUM_WBAMRDEC_OUTPUT_BUFFERS_DASF 2
105/* ======================================================================= */
106/**
107 * @def    INPUT_WBAMRDEC_BUFFER_SIZE   Default input buffer size
108 *
109 */
110/* ======================================================================= */
111#define INPUT_WBAMRDEC_BUFFER_SIZE 116
112/* ======================================================================= */
113/**
114 * @def    OUTPUT_WBAMRDEC_BUFFER_SIZE   Default output buffer size
115 *
116 */
117/* ======================================================================= */
118#define OUTPUT_WBAMRDEC_BUFFER_SIZE 640
119/* ======================================================================= */
120/**
121 * @def    INPUT_WBAMRDEC_BUFFER_SIZE_MIME   Default input buffer size MIME
122 *
123 */
124/* ======================================================================= */
125#define INPUT_WBAMRDEC_BUFFER_SIZE_MIME 61
126
127/* ======================================================================= */
128/**
129 * @def    WBAMR_DEC_STREAM_COUNT   Number of streams
130 */
131/* ======================================================================= */
132#define WBAMR_DEC_STREAM_COUNT 2
133#define WBAMR_DEC_INPUT_STREAM_ID 0
134/* ======================================================================= */
135/**
136 * @def    WBAMR_DEC_INPUT_BUFF_SIZE_EFR   Default input buffer size EFR
137 *
138 */
139/* ======================================================================= */
140#define WBAMR_DEC_INPUT_BUFF_SIZE_EFR 120
141
142/* ======================================================================= */
143/** WBAMR_DEC_COMP_PORT_TYPE  Port types
144*
145*  @param  WBAMR_DEC_INPUT_PORT                 Input port
146*
147*  @param  WBAMR_DEC_OUTPUT_PORT                Output port
148*/
149/*  ==================================================================== */
150/*This enum must not be changed. */
151typedef enum WBAMR_DEC_COMP_PORT_TYPE {
152    WBAMR_DEC_INPUT_PORT = 0,
153    WBAMR_DEC_OUTPUT_PORT
154}WBAMR_DEC_COMP_PORT_TYPE;
155/* ======================================================================= */
156/**
157 * @def    WBAMR_DEC_SAMPLING_FREQUENCY   Sampling frequency
158 */
159/* ======================================================================= */
160#define WBAMR_DEC_SAMPLING_FREQUENCY 16000
161/* ======================================================================= */
162/**
163 * @def    WBAMR_DEC_CPU_LOAD                    CPU Load in MHz
164 */
165/* ======================================================================= */
166#define WBAMR_DEC_CPU_LOAD 10
167/* ======================================================================= */
168/**
169 * @def    WBAMR_DEC_MAX_NUM_OF_BUFS   Maximum number of buffers
170 */
171/* ======================================================================= */
172#define WBAMR_DEC_MAX_NUM_OF_BUFS 12
173/* ======================================================================= */
174/**
175 * @def    IP_BUFFERSIZE                      Input Port Buffer Size
176 */
177/* ======================================================================= */
178#define IP_WBAMRDEC_BUFFERSIZE 8192
179/* ======================================================================= */
180/**
181 * @def    NUM_MIME_BYTES_ARRAY               amrMimeBytes array size
182 */
183/* ======================================================================= */
184#define NUM_MIME_BYTES_ARRAY 16
185/* ======================================================================= */
186/**
187 * @def    NUM_IF2_BYTES_ARRAY                amrIF2Bytes array size
188 */
189/* ======================================================================= */
190#define NUM_IF2_BYTES_ARRAY 16
191
192/* ======================================================================= */
193/**
194 * @def    WBAMR_DEC_DEBUG   Turns debug messaging on and off
195 */
196/* ======================================================================= */
197#undef WBAMR_DEC_DEBUG
198/* ======================================================================= */
199/**
200 * @def    WBAMR_DEC_MEMCHECK   Turns memory messaging on and off
201 */
202/* ======================================================================= */
203#undef WBAMR_DEC_MEMCHECK
204
205/* ======================================================================= */
206/**
207 * @def    WBAMRDEC_DEBUGMEM   Turns memory leaks messaging on and off.
208 *         APP_DEBUGMEM must be defined in Test App in order to get
209 *         this functionality On.
210 */
211/* ======================================================================= */
212#undef WBAMRDEC_DEBUGMEM
213/*#define WBAMRDEC_DEBUGMEM*/
214
215
216#ifdef UNDER_CE
217#define sleep Sleep
218#endif
219
220/* ======================================================================= */
221/**
222 * @def    WBAMR_DEC_NUM_OF_PORTS   Number of ports
223 */
224/* ======================================================================= */
225#define WBAMR_DEC_NUM_OF_PORTS 2
226
227/* ======================================================================= */
228/**
229 * @def    _ERROR_PROPAGATION__              Allow Logic to Detec Arm Errors
230 */
231/* ======================================================================= */
232#define _ERROR_PROPAGATION__
233
234/* ======================================================================= */
235/** OMX_INDEXAUDIOTYPE_WBAMRDEC  Defines the custom configuration settings
236*                              for the component
237*
238*  @param  OMX_IndexCustomModeDasfConfig_WBAMRDEC  Sets the DASF mode
239*
240*  @param  OMX_IndexCustomModeAcdnConfig_WBAMRDEC  Sets the ACDN mode
241*
242*  @param  OMX_IndexCustomModeMimeConfig_WBAMRDEC  Sets the MIME mode
243*/
244/*  ==================================================================== */
245typedef enum OMX_INDEXAUDIOTYPE_WBAMRDEC {
246    OMX_IndexCustomModeEfrConfig_WBAMRDEC = 0xFF000001,
247    OMX_IndexCustomModeAmrConfig_WBAMRDEC,
248    OMX_IndexCustomModeAcdnConfig_WBAMRDEC,
249    OMX_IndexCustomModeDasfConfig_WBAMRDEC,
250    OMX_IndexCustomModeMimeConfig_WBAMRDEC,
251    OMX_IndexCustomWbAmrDecHeaderInfoConfig,
252    OMX_IndexCustomWbAmrDecStreamIDConfig,
253    OMX_IndexCustomWbAmrDecDataPath,
254    OMX_IndexCustomWbAmrDecNextFrameLost,
255    OMX_IndexCustomDebug
256}OMX_INDEXAUDIOTYPE_WBAMRDEC;
257
258/* ======================================================================= */
259/**
260 * pthread variable to indicate OMX returned all buffers to app
261 */
262/* ======================================================================= */
263pthread_mutex_t bufferReturned_mutex;
264pthread_cond_t bufferReturned_condition;
265
266/* ======================================================================= */
267/** WBAMR_DEC_StreamType  Stream types
268*
269*  @param  WBAMR_DEC_DMM                    DMM
270*
271*  @param  WBAMR_DEC_INSTRM                 Input stream
272*
273*  @param  WBAMR_DEC_OUTSTRM                Output stream
274*/
275/*  ==================================================================== */
276enum WBAMR_DEC_StreamType
277{
278    WBAMR_DEC_DMM,
279    WBAMR_DEC_INSTRM,
280    WBAMR_DEC_OUTSTRM
281};
282
283enum WBAMR_DEC_DecodeType
284{
285    WBAMR,
286    WBAMR_EFR
287};
288
289/* ======================================================================= */
290/** WBAMR_DEC_MimeMode  Stream types
291*
292*  @param  WBAMR_DEC_MIMEMODE                   MIME
293*
294*  @param  WBAMR_DEC_NONMIMEMODE                NON MIME
295*
296*/
297/*  ====================================================================== */
298enum WBAMR_DEC_MimeMode {
299    WBAMR_DEC_NONMIMEMODE,
300    WBAMR_DEC_MIMEMODE
301};
302
303/* ======================================================================= */
304/** WBAMR_DEC_BUFFER_Dir  Buffer Direction
305*
306*  @param  WBAMR_DEC_DIRECTION_INPUT                    INPUT
307*
308*  @param  WBAMR_DEC_DIRECTION_OUTPUT                   OUTPUT
309*
310*/
311/*  ====================================================================== */
312typedef enum {
313    WBAMR_DEC_DIRECTION_INPUT,
314    WBAMR_DEC_DIRECTION_OUTPUT
315}WBAMR_DEC_BUFFER_Dir;
316
317typedef struct WBAMR_DEC_BUFFS
318{
319    char WBAMR_DEC_BufHeader;
320    char WBAMR_DEC_Buffer;
321}WBAMR_DEC_BUFFS;
322
323/* ======================================================================= */
324/** WBAMR_DEC_BUFFERHEADERTYPE_INFO
325*
326*  @param  pBufHeader
327*
328*  @param  bBufOwner
329*
330*/
331/*  ==================================================================== */
332typedef struct WBAMR_DEC_BUFFERHEADERTYPE_INFO
333{
334    OMX_BUFFERHEADERTYPE* pBufHeader[WBAMR_DEC_MAX_NUM_OF_BUFS];
335    WBAMR_DEC_BUFFS bBufOwner[WBAMR_DEC_MAX_NUM_OF_BUFS];
336}WBAMR_DEC_BUFFERHEADERTYPE_INFO;
337
338/* ======================================================================= */
339/** WBAMR_DEC_LCML_MimeMode  Stream types
340*
341*  @param  WBAMR_DEC_MODE_MIME                  MIME
342*
343*  @param  WBAMR_DEC_MODE_NONMIME               NON MIME
344*
345*/
346/*  ==================================================================== */
347typedef enum {
348    WBAMR_DEC_MODE_MIME,
349    WBAMR_DEC_MODE_NONMIME
350}WBAMR_DEC_LCML_MimeMode;
351
352/* =================================================================================== */
353/**
354* Socket node input parameters.
355*/
356/* ================================================================================== */
357typedef struct WBAMR_DEC_AudioCodecParams
358{
359    unsigned long  iSamplingRate;
360    unsigned long  iStrmId;
361    unsigned short iAudioFormat;
362
363}WBAMR_DEC_AudioCodecParams;
364
365/* =================================================================================== */
366/**
367* Socket node alg parameters.
368*/
369/* ================================================================================== */
370typedef struct {
371        unsigned long int usLastFrame;
372        unsigned long int usFrameLost;
373}WAMRDEC_FrameStruct;
374
375typedef struct{
376         unsigned long int usNbFrames;
377         WAMRDEC_FrameStruct *pParamElem;
378}WBAMRDEC_ParamStruct;
379
380/* =================================================================================== */
381/**
382* WBAMR Buffer Header Type
383*/
384/* ================================================================================== */
385typedef struct LCML_WBAMR_DEC_BUFHEADERTYPE {
386      WBAMR_DEC_BUFFER_Dir eDir;
387      OMX_BUFFERHEADERTYPE* buffer;
388      WAMRDEC_FrameStruct *pFrameParam;
389      WBAMRDEC_ParamStruct *pBufferParam;
390      DMM_BUFFER_OBJ* pDmmBuf;
391}LCML_WBAMR_DEC_BUFHEADERTYPE;
392
393#ifndef UNDER_CE
394
395OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
396
397#else
398/*  WinCE Implicit Export Syntax */
399#define OMX_EXPORT __declspec(dllexport)
400/* ===========================================================  */
401/**
402*  OMX_ComponentInit()  Initializes component
403*
404*
405*  @param hComp         OMX Handle
406*
407*  @return OMX_ErrorNone = Successful
408*          Other error code = fail
409*
410*/
411/*================================================================== */
412OMX_EXPORT OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
413
414#endif
415
416/* =================================================================================== */
417/**
418* Instrumentation info
419*/
420/* ================================================================================== */
421
422typedef struct WBAMRDEC_BUFFERLIST WBAMR_DEC_BUFFERLIST;
423
424/* =================================================================================== */
425/**
426* Structure for buffer list
427*/
428/* ================================================================================== */
429struct WBAMRDEC_BUFFERLIST{
430    OMX_BUFFERHEADERTYPE *pBufHdr[WBAMR_DEC_MAX_NUM_OF_BUFS];   /* records buffer header send by client */
431    OMX_U32 bufferOwner[WBAMR_DEC_MAX_NUM_OF_BUFS];
432    OMX_U32 bBufferPending[WBAMR_DEC_MAX_NUM_OF_BUFS];
433    OMX_U16 numBuffers;
434};
435#ifdef UNDER_CE
436    #ifndef _OMX_EVENT_
437        #define _OMX_EVENT_
438        typedef struct OMX_Event {
439            HANDLE event;
440        } OMX_Event;
441    #endif
442#endif
443
444typedef struct PV_OMXComponentCapabilityFlagsType
445{
446        ////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS (for opencore compatability)
447        OMX_BOOL iIsOMXComponentMultiThreaded;
448        OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc;
449        OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc;
450        OMX_BOOL iOMXComponentSupportsMovableInputBuffers;
451        OMX_BOOL iOMXComponentSupportsPartialFrames;
452        OMX_BOOL iOMXComponentNeedsNALStartCode;
453        OMX_BOOL iOMXComponentCanHandleIncompleteFrames;
454} PV_OMXComponentCapabilityFlagsType;
455
456
457/* =================================================================================== */
458/*
459 * NBAMRDEC_BUFDATA
460 */
461/* =================================================================================== */
462typedef struct WBAMRDEC_BUFDATA {
463   OMX_U8 nFrames;
464}WBAMRDEC_BUFDATA;
465
466
467/* =================================================================================== */
468/**
469* Component private data
470*/
471/* ================================================================================== */
472typedef struct WBAMR_DEC_COMPONENT_PRIVATE
473{
474#ifdef __PERF_INSTRUMENTATION__
475    PERF_OBJHANDLE pPERF, pPERFcomp;
476    OMX_U32 nLcml_nCntIp;
477    OMX_U32 nLcml_nCntOpReceived;
478#endif
479    /** Array of pointers to BUFFERHEADERTYPE structues
480       This pBufHeader[WBAMR_DEC_INPUT_PORT] will point to all the
481       BUFFERHEADERTYPE structures related to input port,
482       not just one structure. Same is for output port
483       also. */
484
485    OMX_BUFFERHEADERTYPE* pBufHeader[WBAMR_DEC_NUM_OF_PORTS];
486
487    /** Number of input buffers at runtime */
488    OMX_U32 nRuntimeInputBuffers;
489
490    WBAMR_DEC_BUFFERHEADERTYPE_INFO BufInfo[WBAMR_DEC_NUM_OF_PORTS];
491
492    OMX_CALLBACKTYPE cbInfo;
493    /** Handle for use with async callbacks */
494
495    OMX_PORT_PARAM_TYPE sPortParam;
496    OMX_AUDIO_PARAM_PORTFORMATTYPE sInPortFormat;
497    OMX_AUDIO_PARAM_PORTFORMATTYPE sOutPortFormat;
498
499    /** This will contain info like how many buffers
500        are there for input/output ports, their size etc, but not
501        BUFFERHEADERTYPE POINTERS. */
502    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[WBAMR_DEC_NUM_OF_PORTS];
503    OMX_AUDIO_PARAM_AMRTYPE* wbamrParams[WBAMR_DEC_NUM_OF_PORTS];
504
505    /** This is component handle */
506    OMX_COMPONENTTYPE* pHandle;
507
508    /** Current state of this component */
509    OMX_STATETYPE curState;
510
511    /** The component thread handle */
512    pthread_t WBAMR_DEC_ComponentThread;
513
514    /** The pipes for sending buffers to the thread */
515    int dataPipe[2];
516
517    /** The pipes for sending buffers to the thread */
518    int cmdPipe[2];
519
520    /** The pipes for sending buffers to the thread */
521    int cmdDataPipe[2];
522
523    /** The pipes for sending buffers to the thread */
524  /*  int lcml_Pipe[2]; */
525
526    /** Set to indicate component is stopping */
527    OMX_U32 bIsStopping;
528
529    /** Count of number of buffers outstanding with bridge */
530    OMX_U32 lcml_nIpBuf;
531
532    /** Count of number of buffers outstanding with bridge */
533    OMX_U32 lcml_nOpBuf;
534
535    OMX_U32 app_nBuf;
536    OMX_U32 wbamrIf2Bytes[NUM_IF2_BYTES_ARRAY];                        /*Array With IF2 Lenght Information*/
537    OMX_U32 lcml_nCntIp;
538    OMX_U32 lcml_nCntOpReceived;
539    OMX_U32 num_Reclaimed_Op_Buff;
540
541    OMX_HANDLETYPE pLcmlHandle;
542    LCML_WBAMR_DEC_BUFHEADERTYPE *pLcmlBufHeader[2];
543    OMX_U32 iAmrMimeFlag;
544    OMX_U32 iAmrSamplingFrequeny;
545    OMX_U32 iAmrChannels;
546    OMX_U32 iAmrMode;
547    OMX_U32 dasfmode;
548    OMX_U32 mimemode;
549    OMX_U32 acdnmode;
550    OMX_U32 fdwrite;
551    OMX_U32 fdread;
552    OMX_U32 streamID;
553
554    OMX_U32 bPortDefsAllocated;
555    OMX_U32 bCompThreadStarted;
556    OMX_PTR pMarkData;
557    OMX_MARKTYPE *pMarkBuf;
558    OMX_HANDLETYPE hMarkTargetComponent;
559    WBAMR_DEC_BUFFERLIST *pInputBufferList;
560    WBAMR_DEC_BUFFERLIST *pOutputBufferList;
561    LCML_STRMATTR *strmAttr;
562    OMX_U32 nVersion;
563    OMX_U32 wbamrMimeBytes[NUM_MIME_BYTES_ARRAY];
564    OMX_U32 nHoldLength;
565    OMX_U8* pHoldBuffer;
566    OMX_U32 bLcmlHandleOpened;
567    OMX_U32 nFillThisBufferCount;
568    OMX_U32 nFillBufferDoneCount;
569    OMX_U32 nEmptyThisBufferCount;
570    OMX_U32 nEmptyBufferDoneCount;
571    WBAMR_DEC_AudioCodecParams *pParams;
572    OMX_U32 bInitParamsInitialized;
573 /*     OMX_U32 bIdleCommandPending; */
574    OMX_BUFFERHEADERTYPE *pInputBufHdrPending[WBAMR_DEC_MAX_NUM_OF_BUFS];
575    OMX_U32 nNumInputBufPending;
576    OMX_BUFFERHEADERTYPE *pOutputBufHdrPending[WBAMR_DEC_MAX_NUM_OF_BUFS];
577    OMX_U32 nNumOutputBufPending;
578    OMX_U32 bDisableCommandPending;
579    OMX_U32 bEnableCommandPending;
580    OMX_U32 bDisableCommandParam;
581    OMX_U32 bEnableCommandParam;
582
583    /** Flag to set when socket node stop callback should not transition
584        component to OMX_StateIdle */
585    OMX_U32 bNoIdleOnStop;
586
587    /** Flag set when socket node is stopped */
588    OMX_U32 bDspStoppedWhileExecuting;
589
590    /** Number of outstanding FillBufferDone() calls */
591    OMX_S32 nOutStandingFillDones;
592
593    /** Stop Codec Command Sent Flag*/
594    OMX_U8 bStopSent;
595
596#ifndef UNDER_CE
597    pthread_mutex_t AlloBuf_mutex;
598    pthread_cond_t AlloBuf_threshold;
599    OMX_U8 AlloBuf_waitingsignal;
600
601    pthread_mutex_t codecStop_mutex;
602    pthread_cond_t codecStop_threshold;
603    OMX_U8 codecStop_waitingsignal;
604
605    pthread_mutex_t InLoaded_mutex;
606    pthread_cond_t InLoaded_threshold;
607    OMX_U8 InLoaded_readytoidle;
608
609    pthread_mutex_t InIdle_mutex;
610    pthread_cond_t InIdle_threshold;
611    OMX_U8 InIdle_goingtoloaded;
612
613    OMX_S8 nUnhandledFillThisBuffers;
614    OMX_S8 nUnhandledEmptyThisBuffers;
615    OMX_BOOL bFlushOutputPortCommandPending;
616    OMX_BOOL bFlushInputPortCommandPending;
617#else
618    OMX_Event AlloBuf_event;
619    OMX_U8 AlloBuf_waitingsignal;
620
621    OMX_Event InLoaded_event;
622    OMX_U8 InLoaded_readytoidle;
623
624    OMX_Event InIdle_event;
625    OMX_U8 InIdle_goingtoloaded;
626#endif
627    OMX_U16 nRuntimeOutputBuffers;
628
629    OMX_U8 PendingPausedBufs;
630    OMX_BUFFERHEADERTYPE *pOutputBufHdrPausedPending[WBAMR_DEC_MAX_NUM_OF_BUFS];
631
632    OMX_BUFFERHEADERTYPE *LastOutbuf;
633
634    OMX_BOOL bIsInvalidState;
635    OMX_STRING* sDeviceString;
636
637    void* ptrLibLCML;
638
639    /** Circular array to keep buffer timestamps */
640    OMX_S64 arrBufIndex[WBAMR_DEC_MAX_NUM_OF_BUFS];
641    /** Circular array to keep buffer nTickCounts */
642    OMX_S64 arrTickCount[WBAMR_DEC_MAX_NUM_OF_BUFS];
643    /** Index to arrBufIndex[], used for input buffer timestamps */
644    OMX_U8 IpBufindex;
645    /** Index to arrBufIndex[], used for output buffer timestamps */
646    OMX_U8 OpBufindex;
647
648    /** Flag to flush SN after EOS in order to process more buffers after EOS**/
649    OMX_U8 SendAfterEOS;
650
651    OMX_BOOL bLoadedCommandPending;
652
653    OMX_PARAM_COMPONENTROLETYPE componentRole;
654
655    /** Pointer to port priority management structure */
656    OMX_PRIORITYMGMTTYPE* pPriorityMgmt;
657
658#ifdef RESOURCE_MANAGER_ENABLED
659    RMPROXY_CALLBACKTYPE rmproxyCallback;
660#endif
661
662    OMX_BOOL bPreempted;
663    OMX_BOOL bFrameLost;
664
665    /** Flag to mark RTSP**/
666    OMX_U8 using_rtsp;
667
668    PV_OMXComponentCapabilityFlagsType iPVCapabilityFlags;
669
670    struct OMX_TI_Debug dbg;
671
672} WBAMR_DEC_COMPONENT_PRIVATE;
673
674/*=======================================================================*/
675/*! @fn SignalIfAllBuffersAreReturned
676
677 * @brief Sends pthread signal to indicate OMX has returned all buffers to app
678
679 * @param  none
680
681 * @Return void
682
683 */
684/*=======================================================================*/
685void SignalIfAllBuffersAreReturned(WBAMR_DEC_COMPONENT_PRIVATE *pComponentPrivate);
686
687#endif /* OMX_WBAMR_DECODER_H */
688