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_AacDec_Utils.h
30 *
31 * This is an header file for an audio AAC decoder that is fully
32 * compliant with the OMX Audio specification.
33 * This the file is used internally by the component
34 * in its code.
35 *
36 * @path  $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\aac_dec\inc\
37 *
38 * @rev 1.0
39 */
40/* --------------------------------------------------------------------------- */
41#ifndef OMX_AACDEC_UTILS__H
42#define OMX_AACDEC_UTILS__H
43
44#include <OMX_Component.h>
45#include <OMX_TI_Common.h>
46#include <OMX_TI_Debug.h>
47#include "LCML_DspCodec.h"
48#include <pthread.h>
49#include <sched.h>
50
51#ifdef RESOURCE_MANAGER_ENABLED
52#include <ResourceManagerProxyAPI.h>
53#endif
54
55#ifdef UNDER_CE
56#include <windows.h>
57#include <oaf_osal.h>
58#include <omx_core.h>
59#include <stdlib.h>
60#endif
61#ifndef UNDER_CE
62#define AUDIO_MANAGER
63#else
64#undef AUDIO_MANAGER
65#endif
66
67#ifdef __PERF_INSTRUMENTATION__
68#include "perf.h"
69#endif
70
71#ifndef ANDROID
72    #define ANDROID
73#endif
74
75#ifdef ANDROID
76    /* Log for Android system*/
77    #undef LOG_TAG
78    #define LOG_TAG "OMX_AACDEC"
79
80    /* PV opencore capability custom parameter index */
81    #define PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347
82#endif
83
84#define OBJECTTYPE_LC 2
85#define OBJECTTYPE_LTP 4
86#define OBJECTTYPE_HE 5
87#define OBJECTTYPE_HE2 29
88
89#define EXIT_COMPONENT_THRD  10
90
91
92/* ======================================================================= */
93/**
94 * @def    AAC_DEC__XXX_VER    Component version
95 */
96/* ======================================================================= */
97#define AACDEC_MAJOR_VER 1
98#define AACDEC_MINOR_VER 1
99/* ======================================================================= */
100/**
101 * @def    NOT_USED_AACDEC    Defines a value for "don't care" parameters
102 */
103/* ======================================================================= */
104#define NOT_USED_AACDEC 0
105/* ======================================================================= */
106/**
107 * @def    NORMAL_BUFFER_AACDEC    Defines the flag value with all flags turned off
108 */
109/* ======================================================================= */
110#define NORMAL_BUFFER_AACDEC 0
111/* ======================================================================= */
112/**
113 * @def    OMX_AACDEC_DEFAULT_SEGMENT    Default segment ID for the LCML
114 */
115/* ======================================================================= */
116#define OMX_AACDEC_DEFAULT_SEGMENT (0)
117/* ======================================================================= */
118/**
119 * @def    OMX_AACDEC_SN_TIMEOUT    Timeout value for the socket node
120 */
121/* ======================================================================= */
122#define OMX_AACDEC_SN_TIMEOUT (-1)
123/* ======================================================================= */
124/**
125 * @def    OMX_AACDEC_SN_PRIORITY   Priority for the socket node
126 */
127/* ======================================================================= */
128#define OMX_AACDEC_SN_PRIORITY (10)
129/* ======================================================================= */
130/**
131 * @def    OMX_AACDEC_NUM_DLLS   number of DLL's
132 */
133/* ======================================================================= */
134#define OMX_AACDEC_NUM_DLLS (2)
135
136#define AACDEC_BUFHEADER_VERSION 0x1
137/* ======================================================================= */
138/**
139 ** Default timeout used to come out of blocking calls*
140 *
141 */
142/* ======================================================================= */
143#define AACD_TIMEOUT (1000) /* millisecs */
144
145/* ======================================================================= */
146/**
147 * Wince #define
148 *
149 */
150/* ======================================================================= */
151#ifdef UNDER_CE
152#define sleep Sleep
153#endif
154/* ======================================================================= */
155/**
156 * @def    AACDEC_USN_DLL_NAME   USN DLL name
157 */
158/* ======================================================================= */
159#ifdef UNDER_CE
160#define AACDEC_USN_DLL_NAME "\\windows\\usn.dll64P"
161#else
162#define AACDEC_USN_DLL_NAME "usn.dll64P"
163#endif
164
165/* ======================================================================= */
166/**
167 * @def    AACDEC_DLL_NAME   AAC Dec Decoder socket node DLL name
168 */
169/* ======================================================================= */
170#ifdef UNDER_CE
171#define AACDEC_DLL_NAME "\\windows\\mpeg4aacdec_sn.dll64P"
172#else
173#define AACDEC_DLL_NAME "mpeg4aacdec_sn.dll64P"
174#endif
175
176#define DONT_CARE 0
177
178/* ======================================================================= */
179/**
180 * @def    AACDEC_CPU_USAGE for Resource Mannager (MHZ)
181 */
182/* ======================================================================= */
183#define AACDEC_CPU_USAGE 50
184
185
186/* ======================================================================= */
187/**
188 * @def    AACDEC_SBR_CONTENT  flag detection
189 */
190/* ======================================================================= */
191
192#define AACDEC_SBR_CONTENT 0x601
193
194
195/* ======================================================================= */
196/**
197 * @def    AACDEC_PS_CONTENT flag  detection
198 */
199/* ======================================================================= */
200
201#define  AACDEC_PS_CONTENT 0x602
202
203
204/* ======================================================================= */
205/**
206 * @def    AACDEC_DEBUG   Debug print macro
207 */
208/* ======================================================================= */
209
210#undef AACDEC_DEBUG
211#define _ERROR_PROPAGATION__
212
213#ifdef UNDER_CE
214
215/* ======================================================================= */
216/**
217 * @def    DEBUG   Memory print macro
218 */
219/* ======================================================================= */
220#if DEBUG
221#define AACDEC_DPRINT printf
222#define AACDEC_MEMPRINT printf
223#define AACDEC_STATEPRINT printf
224#define AACDEC_BUFPRINT printf
225#define AACDEC_MEMPRINT printf
226#define AACDEC_EPRINT printf
227#else
228#define AACDEC_DPRINT
229#define AACDEC_MEMPRINT
230#define AACDEC_STATEPRINT
231#define AACDEC_BUFPRINT
232#define AACDEC_MEMPRINT
233#define AACDEC_EPRINT
234#endif
235
236#else /* for Linux */
237
238#ifdef  AACDEC_DEBUG
239    #define AACDEC_DPRINT printf
240    #undef AACDEC_BUFPRINT printf
241    #undef AACDEC_MEMPRINT printf
242    #define AACDEC_STATEPRINT printf
243#else
244    #define AACDEC_DPRINT(...)
245#endif
246
247#ifdef AACDEC_STATEDETAILS
248    #define AACDEC_STATEPRINT printf
249#else
250    #define AACDEC_STATEPRINT(...)
251#endif
252
253#ifdef AACDEC_BUFDETAILS
254    #define AACDEC_BUFPRINT printf
255#else
256    #define AACDEC_BUFPRINT(...)
257#endif
258
259#ifdef AACDEC_MEMDETAILS
260    #define AACDEC_MEMPRINT(...)  fprintf(stdout, "%s %d::  ",__FUNCTION__, __LINE__); \
261                                  fprintf(stdout, __VA_ARGS__); \
262                                  fprintf(stdout, "\n");
263#else
264    #define AACDEC_MEMPRINT(...)
265#endif
266
267#define AACDEC_EPRINT ALOGE
268
269#endif
270
271
272/* ======================================================================= */
273/**
274 * @def    AACDEC_OMX_ERROR_EXIT   Exit print and return macro
275 */
276/* ======================================================================= */
277#define AACDEC_OMX_ERROR_EXIT(_e_, _c_, _s_)                            \
278    _e_ = _c_;                                                          \
279    OMXDBG_PRINT(stderr, ERROR, 4, 0, "\n**************** OMX ERROR ************************\n");  \
280    OMXDBG_PRINT(stderr, ERROR, 4, 0, "%d : Error Name: %s : Error Num = %x",__LINE__, _s_, _e_);  \
281    OMXDBG_PRINT(stderr, ERROR, 4, 0, "\n**************** OMX ERROR ************************\n");  \
282    goto EXIT;
283
284/* ======================================================================= */
285/**
286 * @def    AACDEC_OMX_CONF_CHECK_CMD   Command check Macro
287 */
288/* ======================================================================= */
289#define AACDEC_OMX_CONF_CHECK_CMD(_ptr1, _ptr2, _ptr3)  \
290    {                                                   \
291        if(!_ptr1 || !_ptr2 || !_ptr3){                 \
292            eError = OMX_ErrorBadParameter;             \
293            goto EXIT;                                  \
294        }                                               \
295    }
296
297/* ======================================================================= */
298/**
299 * @def    OMX_CONF_INIT_STRUCT   Macro to Initialise the structure variables
300 */
301/* ======================================================================= */
302#define OMX_CONF_INIT_STRUCT(_s_, _name_)       \
303    memset((_s_), 0x0, sizeof(_name_));         \
304    (_s_)->nSize = sizeof(_name_);              \
305    (_s_)->nVersion.s.nVersionMajor = 1;      \
306    (_s_)->nVersion.s.nVersionMinor = 1;      \
307    (_s_)->nVersion.s.nRevision = 0x0;          \
308    (_s_)->nVersion.s.nStep = 0x0
309
310/* ======================================================================= */
311/**
312 * @def    AACDEC_BUFDETAILS   Turns buffer messaging on and off
313 */
314/* ======================================================================= */
315#undef AACDEC_BUFDETAILS
316/* ======================================================================= */
317/**
318 * @def    AACDEC_STATEDETAILS   Turns state messaging on and off
319 */
320/* ======================================================================= */
321#undef AACDEC_STATEDETAILS
322/* ======================================================================= */
323/**
324 * @def    AACDEC_MEMDETAILS   Turns memory messaging on and off
325 */
326/* ======================================================================= */
327#undef AACDEC_MEMDETAILS
328
329#define AACDEC_OUTPUT_PORT 1
330#define AACDEC_INPUT_PORT 0
331#define AACDEC_APP_ID  100
332#define MAX_NUM_OF_BUFS_AACDEC 15
333#define PARAMETRIC_STEREO_AACDEC 1
334#define NON_PARAMETRIC_STEREO_AACDEC 0
335/* ======================================================================= */
336/**
337 * @def    NUM_OF_PORTS_AACDEC   Number of ports
338 */
339/* ======================================================================= */
340#define NUM_OF_PORTS_AACDEC 2
341/* ======================================================================= */
342/**
343 * @def    STREAM_COUNT_AACDEC   Number of streams
344 */
345/* ======================================================================= */
346#define STREAM_COUNT_AACDEC 2
347
348/** Default timeout used to come out of blocking calls*/
349
350/* ======================================================================= */
351/**
352 * @def    AACD_NUM_INPUT_BUFFERS   Default number of input buffers
353 *
354 */
355/* ======================================================================= */
356#define AACD_NUM_INPUT_BUFFERS 4
357/* ======================================================================= */
358/**
359 * @def    AACD_NUM_OUTPUT_BUFFERS   Default number of output buffers
360 *
361 */
362/* ======================================================================= */
363#define AACD_NUM_OUTPUT_BUFFERS 4
364
365/* ======================================================================= */
366/**
367 * @def    AACD_INPUT_BUFFER_SIZE   Default input buffer size
368 *
369 */
370/* ======================================================================= */
371#define AACD_INPUT_BUFFER_SIZE 1536*4
372/* ======================================================================= */
373/**
374 * @def    AACD_OUTPUT_BUFFER_SIZE   Default output buffer size
375 *
376 */
377/* ======================================================================= */
378#define AACD_OUTPUT_BUFFER_SIZE 8192*2
379/* ======================================================================= */
380/**
381 * @def    AACD_SAMPLING_FREQUENCY   Sampling frequency
382 */
383/* ======================================================================= */
384#define AACD_SAMPLING_FREQUENCY 44100
385
386/* ======================================================================= */
387/**
388 * @def    AACDec macros for MONO,STEREO_INTERLEAVED,STEREO_NONINTERLEAVED
389 */
390/* ======================================================================= */
391/*#define AACD_STEREO_INTERLEAVED_STREAM     2
392  #define AACD_STEREO_NONINTERLEAVED_STREAM  3*/
393/* ======================================================================= */
394/**
395 * @def    AACDec macros for MONO,STEREO_INTERLEAVED,STEREO_NONINTERLEAVED
396 */
397/* ======================================================================= */
398/* Stream types supported*/
399#define MONO_STREAM_AACDEC                   1
400#define STEREO_INTERLEAVED_STREAM_AACDEC     2
401#define STEREO_NONINTERLEAVED_STREAM_AACDEC  3
402
403/* ======================================================================= */
404/**
405 * pthread variable to indicate OMX returned all buffers to app
406 */
407/* ======================================================================= */
408pthread_mutex_t bufferReturned_mutex;
409pthread_cond_t bufferReturned_condition;
410
411/**
412 *
413 * AAC Decoder Profile:0 - MAIN, 1 - LC, 2 - SSR, 3 - LTP.
414 */
415typedef enum {
416    EProfileMain,
417    EProfileLC,
418    EProfileSSR,
419    EProfileLTP
420}AACProfile;
421/* ======================================================================= */
422/** COMP_PORT_TYPE_AACDEC  Port types
423 *
424 *  @param  INPUT_PORT_AACDEC                    Input port
425 *
426 *  @param  OUTPUT_PORT_AACDEC               Output port
427 */
428/*  ==================================================================== */
429/*This enum must not be changed. */
430typedef enum COMP_PORT_TYPE_AACDEC {
431    INPUT_PORT_AACDEC = 0,
432    OUTPUT_PORT_AACDEC
433}COMP_PORT_TYPE_AACDEC;
434/* ======================================================================= */
435/** OMX_INDEXAUDIOTYPE_AACDEC  Defines the custom configuration settings
436 *                              for the component
437 *
438 *  @param  OMX_IndexCustomMode16_24bit_AACDEC  Sets the 16/24 mode
439 *
440 *  @param  OMX_IndexCustomModeProfile_AACDEC  Sets the Profile mode
441 *
442 *  @param  OMX_IndexCustomModeSBR_AACDEC  Sets the SBR mode
443 *
444 *  @param  OMX_IndexCustomModeDasfConfig_AACDEC  Sets the DASF mode
445 *
446 *  @param  OMX_IndexCustomModeRAW_AACDEC  Sets the RAW mode
447 *
448 *  @param  OMX_IndexCustomModePS_AACDEC  Sets the ParametricStereo mode
449 *
450 */
451/*  ==================================================================== */
452typedef enum OMX_INDEXAUDIOTYPE_AACDEC {
453    OMX_IndexCustomAacDecHeaderInfoConfig = 0xFF000001,
454    OMX_IndexCustomAacDecStreamIDConfig,
455    OMX_IndexCustomAacDecDataPath,
456    OMX_IndexCustomDebug
457}OMX_INDEXAUDIOTYPE_AACDEC;
458
459/* ======================================================================= */
460/** IAUDIO_PcmFormat: This value is used by DSP.
461 *
462 * @param IAUDIO_BLOCK: It is used in DASF mode.
463 *
464 * @param IAUDIO_INTERLEAVED: It specifies interleaved format of SN.
465 */
466/* ==================================================================== */
467typedef enum {
468    EAUDIO_BLOCK =0,
469    EAUDIO_INTERLEAVED
470}TAUDIO_AacFormat;
471
472/* ======================================================================= */
473/** IAUDIO_PcmFormat: This value is used by DSP.
474 *
475 * @param IAUDIO_BLOCK: It is used in DASF mode.
476 *
477 * @param IAUDIO_INTERLEAVED: It specifies interleaved format of SN.
478 */
479/* ==================================================================== */
480typedef enum {
481    IAUDIO_BLOCK=0,
482    IAUDIO_INTERLEAVED
483} IAUDIO_PcmFormat;
484/* ======================================================================= */
485/** MPEG4AACDEC_UALGParams
486 *
487 * @param lOutputFormat - To set interleaved/Block format:Refer to IAUDIO_AacFormat.
488 * @param DownSampleSbr -
489 */
490/* ==================================================================== */
491typedef struct {
492    OMX_U32    size;
493    long       lOutputFormat;
494    long       DownSampleSbr;
495    long       iEnablePS;
496    long       lSamplingRateIdx;
497    long       bRawFormat;
498    long       dualMonoMode;
499} MPEG4AACDEC_UALGParams;
500
501/* ======================================================================= */
502/** IUALG_Cmd_AAC_DEC: This enum type describes the standard set of commands that
503 * will be passed to iualg control API at DSP. This enum is taken as it is from
504 * DSP side USN source code.
505 *
506 * @param IUALG_CMD_STOP: This command indicates that higher layer framework
507 * has received a stop command and no more process API will be called for the
508 * current data stream. The iualg layer is expected to ensure that all processed
509 * output as is put in the output IUALG_Buf buffers and the state of all buffers
510 * changed as to free or DISPATCH after this function call.
511 *
512 * @param IUALG_CMD_PAUSE: This command indicates that higher layer framework
513 * has received a PAUSE command on the current data stream. The iualg layer
514 * can change the state of some of its output IUALG_Bufs to DISPATCH to enable
515 * high level framework to use the processed data until the command was received.
516 *
517 * @param IUALG_CMD_GETSTATUS: This command indicates that some algo specific
518 * status needs to be returned to the framework. The pointer to the status
519 * structure will be in IALG_status * variable passed to the control API.
520 * The interpretation of the content of this pointer is left to IUALG layer.
521 *
522 * @param IUALG_CMD_SETSTATUS: This command indicates that some algo specific
523 * status needs to be set. The pointer to the status structure will be in
524 * IALG_status * variable passed to the control API. The interpretation of the
525 * content of this pointer is left to IUALG layer.
526 *
527 * @param IUALG_CMD_USERCMDSTART: The algorithm specific control commands can
528 * have the enum type set from this number.
529 */
530/* ==================================================================== */
531
532typedef enum {
533    IUALG_CMD_STOP          = 0,
534    IUALG_CMD_PAUSE         = 1,
535    IUALG_CMD_GETSTATUS     = 2,
536    IUALG_CMD_SETSTATUS     = 3,
537    IUALG_CMD_USERCMDSTART_AACDEC  = 100
538}IUALG_Cmd_AAC_DEC;
539
540typedef enum{
541  IAAC_WARN_DATA_CORRUPT = 0x0804
542}IAAC_WARN_MSG;
543
544#ifdef UNDER_CE
545#ifndef _OMX_EVENT_
546#define _OMX_EVENT_
547typedef struct OMX_Event {
548    HANDLE event;
549} OMX_Event;
550#endif
551int OMX_CreateEvent(OMX_Event *event);
552int OMX_SignalEvent(OMX_Event *event);
553int OMX_WaitForEvent(OMX_Event *event);
554int OMX_DestroyEvent(OMX_Event *event);
555#endif
556
557/* ======================================================================= */
558/** IUALG_PCMDCmd: This enum specifies the command to DSP.
559 *
560 * @param IULAG_CMD_SETSTREAMTYPE: Specifies the stream type to be sent to DSP.
561 */
562/* ==================================================================== */
563typedef enum {
564    IULAG_CMD_SETSTREAMTYPE = IUALG_CMD_USERCMDSTART_AACDEC
565}IUALG_PCMDCmd;
566
567/* ======================================================================= */
568/** AACDEC_UAlgInBufParamStruct: This struct is passed with input buffers that
569 * are sent to DSP.
570 */
571/* ==================================================================== */
572typedef struct {
573    /* Set to 1 if buffer is last buffer */
574    unsigned short bLastBuffer;
575    unsigned short bConcealBuffer;
576}AACDEC_UAlgInBufParamStruct;
577
578/* ======================================================================= */
579/** USN_AudioCodecParams: This contains the information which does to Codec
580 * on DSP
581 * are sent to DSP.
582 */
583/* ==================================================================== */
584typedef struct USN_AudioCodecParams{
585    /* Specifies the sample frequency */
586    unsigned long ulSamplingFreq;
587    /* Specifies the UUID */
588    unsigned long unUUID;
589    /* Specifies the audio format */
590    unsigned short unAudioFormat;
591}USN_AudioCodecParams;
592
593/* ======================================================================= */
594/** AACDEC_UAlgOutBufParamStruct: This is passed with output buffer to DSP.
595 */
596/* ==================================================================== */
597typedef struct {
598    unsigned long ulFrameCount;
599    unsigned long isLastBuffer;
600}AACDEC_UAlgOutBufParamStruct;
601
602typedef struct AACDEC_UALGParams{
603    unsigned long    lOutputFormat;
604    unsigned long    lMonoToStereoCopy;
605} AACDEC_UALGParams;
606
607/* ======================================================================= */
608/** AACD_LCML_BUFHEADERTYPE: This is LCML buffer header which is sent to LCML
609 * for both input and output buffers.
610 */
611/* ==================================================================== */
612typedef struct AACD_LCML_BUFHEADERTYPE {
613    /* Direction whether input or output buffer */
614    OMX_DIRTYPE eDir;
615    /* Pointer to OMX Buffer Header */
616    OMX_BUFFERHEADERTYPE *pBufHdr;
617    /* Other parameters, may be useful for enhancements */
618    void *pOtherParams[10];
619    /* Input Parameter Information structure */
620    AACDEC_UAlgInBufParamStruct *pIpParam;
621    /* Output Parameter Information structure */
622    AACDEC_UAlgOutBufParamStruct *pOpParam;
623}AACD_LCML_BUFHEADERTYPE;
624
625/* Component Port Context */
626typedef struct AUDIODEC_PORT_TYPE {
627    /* Used in tunneling, this is handle of tunneled component */
628    OMX_HANDLETYPE hTunnelComponent;
629    /* Port which has to be tunneled */
630    OMX_U32 nTunnelPort;
631    /* Buffer Supplier Information */
632    OMX_BUFFERSUPPLIERTYPE eSupplierSetting;
633    /* Number of buffers */
634    OMX_U8 nBufferCnt;
635    /* Port format information */
636    OMX_AUDIO_PARAM_PORTFORMATTYPE* pPortFormat;
637} AUDIODEC_PORT_TYPE;
638
639
640/* ======================================================================= */
641/** AAC_DEC_BUFFERLIST: This contains information about a buffer's owner whether
642 * it is application or component, number of buffers owned etc.
643 *
644 * @see OMX_BUFFERHEADERTYPE
645 */
646/* ==================================================================== */
647struct AAC_DEC_BUFFERLIST{
648    /* Array of pointer to OMX buffer headers */
649    OMX_BUFFERHEADERTYPE *pBufHdr[MAX_NUM_OF_BUFS_AACDEC];
650    /* Array that tells about owner of each buffer */
651    OMX_U32 bufferOwner[MAX_NUM_OF_BUFS_AACDEC];
652    /* Tracks pending buffers */
653    OMX_U32 bBufferPending[MAX_NUM_OF_BUFS_AACDEC];
654    /* Number of buffers  */
655    OMX_U32 numBuffers;
656};
657
658typedef struct AAC_DEC_BUFFERLIST AACDEC_BUFFERLIST;
659
660typedef struct PV_OMXComponentCapabilityFlagsType
661{
662        ////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS (for opencore compatability)
663        OMX_BOOL iIsOMXComponentMultiThreaded;
664        OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc;
665        OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc;
666        OMX_BOOL iOMXComponentSupportsMovableInputBuffers;
667        OMX_BOOL iOMXComponentSupportsPartialFrames;
668        OMX_BOOL iOMXComponentNeedsNALStartCode;
669        OMX_BOOL iOMXComponentCanHandleIncompleteFrames;
670} PV_OMXComponentCapabilityFlagsType;
671
672/* ======================================================================= */
673/** AACDEC_COMPONENT_PRIVATE: This is the major and main structure of the
674 * component which contains all type of information of buffers, ports etc
675 * contained in the component.
676 *
677 * @see OMX_BUFFERHEADERTYPE
678 * @see OMX_AUDIO_PARAM_PORTFORMATTYPE
679 * @see OMX_PARAM_PORTDEFINITIONTYPE
680 * @see AACD_LCML_BUFHEADERTYPE
681 * @see OMX_PORT_PARAM_TYPE
682 * @see OMX_PRIORITYMGMTTYPE
683 * @see AUDIODEC_PORT_TYPE
684 * @see AACDEC_BUFFERLIST
685 * @see LCML_STRMATTR
686 * @see
687 */
688/* ==================================================================== */
689
690typedef struct AACDEC_COMPONENT_PRIVATE
691{
692
693    OMX_CALLBACKTYPE cbInfo;
694    /** Handle for use with async callbacks */
695    OMX_PORT_PARAM_TYPE* sPortParam;
696    /* Input port information */
697    OMX_AUDIO_PARAM_PORTFORMATTYPE sInPortFormat;
698    /* Output port information */
699    OMX_AUDIO_PARAM_PORTFORMATTYPE sOutPortFormat;
700    /* Buffer owner information */
701    OMX_U32 bIsBufferOwned[NUM_OF_PORTS_AACDEC];
702
703    /** This will contain info like how many buffers
704        are there for input/output ports, their size etc, but not
705        BUFFERHEADERTYPE POINTERS. */
706    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[NUM_OF_PORTS_AACDEC];
707    /* Contains information that come from application */
708    OMX_AUDIO_PARAM_AACPROFILETYPE* aacParams;
709
710    OMX_AUDIO_PARAM_PCMMODETYPE* pcmParams;
711
712    /** This is component handle */
713    OMX_COMPONENTTYPE* pHandle;
714
715    /** Current state of this component */
716    OMX_STATETYPE curState;
717
718    /** The component thread handle */
719    pthread_t ComponentThread;
720
721    /** The pipes for sending buffers to the thread */
722    int dataPipe[2];
723
724    /** The pipes for sending buffers to the thread */
725    int cmdPipe[2];
726
727    /** The pipes for sending command data to the thread */
728    int cmdDataPipe[2];
729
730    /** Set to indicate component is stopping */
731    OMX_U32 bIsEOFSent;
732
733    /** Count of number of buffers outstanding with bridge */
734    OMX_U32 lcml_nIpBuf;
735
736    /** Count of number of buffers outstanding with bridge */
737    OMX_U32 lcml_nOpBuf;
738
739    /** Counts of number of input buffers sent to LCML */
740    OMX_U32 lcml_nCntIp;
741    /** Counts of number of input buffers received from LCML */
742    OMX_U32 lcml_nCntIpRes;
743    /** Counts of number of output buffers sent to LCML */
744    OMX_U32 lcml_nCntOp;
745    /** Counts of number of output buffers received from LCML */
746    OMX_U32 lcml_nCntOpReceived;
747    /** Counts of number of buffers sent to App  */
748    OMX_U32 lcml_nCntApp;
749    /** Counts of number of buffers received from App  */
750    OMX_U32 app_nBuf;
751
752    OMX_U32 lcml_compID;
753    /** Counts of number of output buffers reclaimed from lcml  */
754    OMX_U32 num_Reclaimed_Op_Buff;
755    /** Counts of number of input buffers sent to lcml  */
756    OMX_U32 num_Sent_Ip_Buff;
757    /** Counts of number of output buffers sent to lcml  */
758    OMX_U32 num_Op_Issued;
759    /** Holds the value of dasf mode, 1: DASF mode or 0: File Mode  */
760    OMX_U32 dasfmode;
761
762    /** This is LCML handle  */
763    OMX_HANDLETYPE pLcmlHandle;
764
765    /** ID stream ID**/
766    OMX_U32 streamID;
767    /** Contains pointers to LCML Buffer Headers */
768    AACD_LCML_BUFHEADERTYPE *pLcmlBufHeader[2];
769
770#ifdef __PERF_INSTRUMENTATION__
771    PERF_OBJHANDLE pPERF, pPERFcomp;
772    OMX_U32 nLcml_nCntIp;
773    OMX_U32 nLcml_nCntOpReceived;
774#endif
775
776    /** Tells whether buffers on ports have been allocated */
777    OMX_U32 bPortDefsAllocated;
778    /** Tells whether component thread has started */
779    OMX_U32 bCompThreadStarted;
780    /** Marks the buffer data  */
781    OMX_PTR pMarkData;
782    /** Marks the buffer */
783    OMX_MARKTYPE *pMarkBuf;
784    /** Marks the target component */
785    OMX_HANDLETYPE hMarkTargetComponent;
786    /** Flag to track when input buffer's filled length is 0 */
787    OMX_U32 bBypassDSP;
788    /** Input port enable flag */
789    OMX_U32 ipPortEnableFlag;
790    /** Input port disble flag */
791    OMX_U32 ipPortDisableFlag;
792    /** Pointer to port parameter structure */
793    OMX_PORT_PARAM_TYPE* pPortParamType;
794    /** Pointer to port priority management structure */
795    OMX_PRIORITYMGMTTYPE* pPriorityMgmt;
796
797#ifdef RESOURCE_MANAGER_ENABLED
798    RMPROXY_CALLBACKTYPE rmproxyCallback;
799#endif
800
801    OMX_BOOL bPreempted;
802
803
804    /** Contains the port related info of both the ports */
805    AUDIODEC_PORT_TYPE *pCompPort[NUM_OF_PORTS_AACDEC];
806    /* Checks whether or not buffer were allocated by appliction */
807    OMX_U32 bufAlloced;
808    /** Flag to check about execution of component thread */
809    OMX_U16 bExitCompThrd;
810    /** Pointer to list of input buffers */
811    AACDEC_BUFFERLIST *pInputBufferList;
812    /** Pointer to list of output buffers */
813    AACDEC_BUFFERLIST *pOutputBufferList;
814    /** it is used for component's create phase arguments */
815    LCML_STRMATTR  *strmAttr;
816    /** Contains the version information */
817    OMX_U32 nVersion;
818
819    /** Number of input buffers at runtime */
820    OMX_U32 nRuntimeInputBuffers;
821
822    /** Number of output buffers at runtime */
823    OMX_U32 nRuntimeOutputBuffers;
824
825    /** Parameters being passed to the SN */
826    USN_AudioCodecParams *pParams;
827
828    /** Dynamic Parameters being passed to the SN */
829    MPEG4AACDEC_UALGParams * AACDEC_UALGParam;
830
831    OMX_U16 framemode;
832
833    OMX_STRING cComponentName;
834
835    OMX_VERSIONTYPE ComponentVersion;
836
837    OMX_U32 nOpBit;
838    OMX_U32 parameteric_stereo;
839    OMX_U32 dualMonoMode;
840    OMX_U32 SBR;
841    OMX_U32 RAW;
842    OMX_U32 nFillThisBufferCount;
843    OMX_U32 nFillBufferDoneCount;
844    OMX_U32 nEmptyThisBufferCount;
845    OMX_U32 nEmptyBufferDoneCount;
846    OMX_U32 bInitParamsInitialized;
847    AACDEC_BUFFERLIST *pInputBufferListQueue;
848    AACDEC_BUFFERLIST *pOutputBufferListQueue;
849    /** To store input buffers recieved while in paused state **/
850    OMX_BUFFERHEADERTYPE *pInputBufHdrPending[MAX_NUM_OF_BUFS_AACDEC];
851    OMX_U32 nNumInputBufPending;
852
853    /** To store out buffers received while in puased state **/
854    OMX_BUFFERHEADERTYPE *pOutputBufHdrPending[MAX_NUM_OF_BUFS_AACDEC];
855    OMX_U32 nNumOutputBufPending;
856
857    /** Flags to control port disable command **/
858    OMX_U32 bDisableCommandPending;
859    OMX_U32 bDisableCommandParam;
860    /** Flags to control port enable command **/
861    OMX_U32 bEnableCommandPending;
862    OMX_U32 bEnableCommandParam;
863
864    OMX_U32 nInvalidFrameCount;
865    OMX_U32 numPendingBuffers;
866    OMX_U32 bNoIdleOnStop;
867    OMX_U32 bDspStoppedWhileExecuting;
868    /* bIdleCommandPending;*/
869    OMX_S32 nOutStandingFillDones;
870    OMX_BOOL bIsInvalidState;
871    OMX_STRING* sDeviceString;
872#ifndef UNDER_CE
873    pthread_mutex_t AlloBuf_mutex;
874    pthread_cond_t AlloBuf_threshold;
875    OMX_U8 AlloBuf_waitingsignal;
876
877    pthread_mutex_t InLoaded_mutex;
878    pthread_cond_t InLoaded_threshold;
879    OMX_U8 InLoaded_readytoidle;
880
881    pthread_mutex_t InIdle_mutex;
882    pthread_cond_t InIdle_threshold;
883    OMX_U8 InIdle_goingtoloaded;
884
885    pthread_mutex_t codecStop_mutex;
886    pthread_cond_t codecStop_threshold;
887    OMX_U8 codecStop_waitingsignal;
888
889    pthread_mutex_t codecFlush_mutex;
890    pthread_cond_t codecFlush_threshold;
891    OMX_U8 codecFlush_waitingsignal;
892
893    OMX_U32 nUnhandledFillThisBuffers;
894    OMX_U32 nHandledFillThisBuffers;
895    OMX_U32 nUnhandledEmptyThisBuffers;
896    OMX_U32 nHandledEmptyThisBuffers;
897    OMX_BOOL bFlushOutputPortCommandPending;
898    OMX_BOOL bFlushInputPortCommandPending;
899#else
900    OMX_Event AlloBuf_event;
901    OMX_U8 AlloBuf_waitingsignal;
902
903    OMX_Event InLoaded_event;
904    OMX_U8 InLoaded_readytoidle;
905
906    OMX_Event InIdle_event;
907    OMX_U8 InIdle_goingtoloaded;
908#endif
909
910    OMX_BOOL bLoadedCommandPending;
911    OMX_PARAM_COMPONENTROLETYPE *componentRole;
912
913    OMX_U8 PendingInPausedBufs;
914    OMX_BUFFERHEADERTYPE *pInBufHdrPausedPending[MAX_NUM_OF_BUFS_AACDEC];
915    OMX_U8 PendingOutPausedBufs;
916    OMX_BUFFERHEADERTYPE *pOutBufHdrPausedPending[MAX_NUM_OF_BUFS_AACDEC];
917
918    /** Keep buffer timestamps **/
919    OMX_S64 arrBufIndex[MAX_NUM_OF_BUFS_AACDEC];
920	/**Keep buffer tickcount*/
921	OMX_U32 arrBufIndexTick[MAX_NUM_OF_BUFS_AACDEC];
922
923    /** Index to arrBufIndex[] and arrBufIndexTick[], used for input buffer timestamps */
924    OMX_U8 IpBufindex;
925    /** Index to arrBufIndex[] and arrBufIndexTick[], used for input buffer timestamps  */
926    OMX_U8 OpBufindex;
927
928    /** Flag to flush SN after EOS in order to process more buffers after EOS**/
929    OMX_U8 SendAfterEOS;
930
931    /** Flag to mark the first sent buffer**/
932    OMX_U8 first_buff;
933    /** First Time Stamp sent **/
934    OMX_TICKS first_TS;
935    /** Temporal time stamp **/
936    OMX_TICKS temp_TS;
937
938    PV_OMXComponentCapabilityFlagsType iPVCapabilityFlags;
939    OMX_BOOL bConfigData;
940    OMX_BOOL reconfigInputPort;
941    OMX_BOOL reconfigOutputPort;
942    OMX_U8 OutPendingPR;
943
944    struct OMX_TI_Debug dbg;
945
946    /** Indicate when first output buffer received from DSP **/
947    OMX_U32 first_output_buf_rcv;
948
949} AACDEC_COMPONENT_PRIVATE;
950
951/* ================================================================================= * */
952/**
953 * OMX_ComponentInit() function is called by OMX Core to initialize the component
954 * with default values of the component. Before calling this function OMX_Init
955 * must have been called.
956 *
957 * @param *hComp This is component handle allocated by the OMX core.
958 *
959 * @pre          OMX_Init should be called by application.
960 *
961 * @post         Component has initialzed with default values.
962 *
963 *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
964 *               OMX_ErrorInsufficientResources = Not enough memory
965 *
966 *  @see          AacDec_StartCompThread()
967 */
968/* ================================================================================ * */
969#ifndef UNDER_CE
970OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
971#else
972/*  WinCE Implicit Export Syntax */
973#define OMX_EXPORT __declspec(dllexport)
974/* ===========================================================  */
975/**
976 *  OMX_ComponentInit()  Initializes component
977 *
978 *
979 *  @param hComp            OMX Handle
980 *
981 *  @return OMX_ErrorNone = Successful
982 *          Other error code = fail
983 *
984 */
985/*================================================================== */
986OMX_EXPORT OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
987#endif
988
989/* ================================================================================= * */
990/**
991 * AacDec_StartCompThread() starts the component thread. This is internal
992 * function of the component.
993 *
994 * @param pHandle This is component handle allocated by the OMX core.
995 *
996 * @pre          None
997 *
998 * @post         None
999 *
1000 *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
1001 *               OMX_ErrorInsufficientResources = Not enough memory
1002 *
1003 *  @see         None
1004 */
1005/* ================================================================================ * */
1006OMX_ERRORTYPE AacDec_StartCompThread(OMX_HANDLETYPE pHandle);
1007/* ================================================================================= * */
1008/**
1009 * AACDEC_Fill_LCMLInitParams() fills the LCML initialization structure.
1010 *
1011 * @param pHandle This is component handle allocated by the OMX core.
1012 *
1013 * @param plcml_Init This structure is filled and sent to LCML.
1014 *
1015 * @pre          None
1016 *
1017 * @post         None
1018 *
1019 *  @return      OMX_ErrorNone = Successful Inirialization of the LCML struct.
1020 *               OMX_ErrorInsufficientResources = Not enough memory
1021 *
1022 *  @see         None
1023 */
1024/* ================================================================================ * */
1025OMX_ERRORTYPE AACDEC_Fill_LCMLInitParams(OMX_HANDLETYPE pHandle, LCML_DSP *plcml_Init, OMX_U16 arr[]);
1026/* ================================================================================= * */
1027/**
1028 * AACDEC_GetBufferDirection() function determines whether it is input buffer or
1029 * output buffer.
1030 *
1031 * @param *pBufHeader This is pointer to buffer header whose direction needs to
1032 *                    be determined.
1033 *
1034 * @param *eDir  This is output argument which stores the direction of buffer.
1035 *
1036 * @pre          None
1037 *
1038 * @post         None
1039 *
1040 *  @return      OMX_ErrorNone = Successful processing.
1041 *               OMX_ErrorBadParameter = In case of invalid buffer
1042 *
1043 *  @see         None
1044 */
1045/* ================================================================================ * */
1046OMX_ERRORTYPE AACDEC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader,
1047                                        OMX_DIRTYPE *eDir);
1048/* ================================================================================= * */
1049/**
1050 * AACDEC_LCML_Callback() function is callback which is called by LCML whenever
1051 * there is an even generated for the component.
1052 *
1053 * @param event  This is event that was generated.
1054 *
1055 * @param arg    This has other needed arguments supplied by LCML like handles
1056 *               etc.
1057 *
1058 * @pre          None
1059 *
1060 * @post         None
1061 *
1062 *  @return      OMX_ErrorNone = Successful processing.
1063 *               OMX_ErrorInsufficientResources = Not enough memory
1064 *
1065 *  @see         None
1066 */
1067/* ================================================================================ * */
1068OMX_ERRORTYPE AACDEC_LCML_Callback (TUsnCodecEvent event,void * args [10]);
1069/* ================================================================================= * */
1070/**
1071 * AACDEC_HandleCommand() function handles the command sent by the application.
1072 * All the state transitions, except from nothing to loaded state, of the
1073 * component are done by this function.
1074 *
1075 * @param pComponentPrivate  This is component's private date structure.
1076 *
1077 * @pre          None
1078 *
1079 * @post         None
1080 *
1081 *  @return      OMX_ErrorNone = Successful processing.
1082 *               OMX_ErrorInsufficientResources = Not enough memory
1083 *               OMX_ErrorHardware = Hardware error has occured lile LCML failed
1084 *               to do any said operartion.
1085 *
1086 *  @see         None
1087 */
1088/* ================================================================================ * */
1089OMX_U32 AACDEC_HandleCommand (AACDEC_COMPONENT_PRIVATE *pComponentPrivate);
1090/* ================================================================================= * */
1091/**
1092 * AACDEC_HandleDataBuf_FromApp() function handles the input and output buffers
1093 * that come from the application. It is not direct function wich gets called by
1094 * the application rather, it gets called eventually.
1095 *
1096 * @param *pBufHeader This is the buffer header that needs to be processed.
1097 *
1098 * @param *pComponentPrivate  This is component's private date structure.
1099 *
1100 * @pre          None
1101 *
1102 * @post         None
1103 *
1104 *  @return      OMX_ErrorNone = Successful processing.
1105 *               OMX_ErrorInsufficientResources = Not enough memory
1106 *               OMX_ErrorHardware = Hardware error has occured lile LCML failed
1107 *               to do any said operartion.
1108 *
1109 *  @see         None
1110 */
1111/* ================================================================================ * */
1112OMX_ERRORTYPE AACDEC_HandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE *pBufHeader,
1113                                           AACDEC_COMPONENT_PRIVATE *pComponentPrivate);
1114/* ================================================================================= * */
1115/**
1116 * AACDEC_GetLCMLHandle() function gets the LCML handle and interacts with LCML
1117 * by using this LCML Handle.
1118 *
1119 * @param *pBufHeader This is the buffer header that needs to be processed.
1120 *
1121 * @param *pComponentPrivate  This is component's private date structure.
1122 *
1123 * @pre          None
1124 *
1125 * @post         None
1126 *
1127 *  @return      OMX_HANDLETYPE = Successful loading of LCML library.
1128 *               OMX_ErrorHardware = Hardware error has occured.
1129 *
1130 *  @see         None
1131 */
1132/* ================================================================================ * */
1133OMX_HANDLETYPE AACDEC_GetLCMLHandle(AACDEC_COMPONENT_PRIVATE* pComponentPrivate);
1134/* ================================================================================= * */
1135/**
1136 * AACDEC_GetCorresponding_LCMLHeader() function gets the corresponding LCML
1137 * header from the actual data buffer for required processing.
1138 *
1139 * @param *pBuffer This is the data buffer pointer.
1140 *
1141 * @param eDir   This is direction of buffer. Input/Output.
1142 *
1143 * @param *AACD_LCML_BUFHEADERTYPE  This is pointer to LCML Buffer Header.
1144 *
1145 * @pre          None
1146 *
1147 * @post         None
1148 *
1149 *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
1150 *               OMX_ErrorHardware = Hardware error has occured.
1151 *
1152 *  @see         None
1153 */
1154/* ================================================================================ * */
1155OMX_ERRORTYPE AACDEC_GetCorresponding_LCMLHeader(AACDEC_COMPONENT_PRIVATE* pComponentPrivate,
1156                                                 OMX_U8 *pBuffer,
1157                                                 OMX_DIRTYPE eDir,
1158                                                 AACD_LCML_BUFHEADERTYPE **ppLcmlHdr);
1159/* ================================================================================= * */
1160/**
1161 * AACDEC_FreeCompResources() function frees the component resources.
1162 *
1163 * @param pComponent This is the component handle.
1164 *
1165 * @pre          None
1166 *
1167 * @post         None
1168 *
1169 *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
1170 *               OMX_ErrorHardware = Hardware error has occured.
1171 *
1172 *  @see         None
1173 */
1174/* ================================================================================ * */
1175OMX_ERRORTYPE AACDEC_FreeCompResources(OMX_HANDLETYPE pComponent);
1176/* ================================================================================= * */
1177/**
1178 * AACDEC_CleanupInitParams() function frees only the initialization time
1179 * memories allocated. For example, it will not close pipes, it will not free the
1180 * memory allocated to the buffers etc. But it does free the memory of buffers
1181 * utilized by the LCML etc. It is basically subset of AACDEC_FreeCompResources()
1182 * function.
1183 *
1184 * @param pComponent This is the component handle.
1185 *
1186 * @pre          None
1187 *
1188 * @post         None
1189 *
1190 *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
1191 *
1192 *  @see         None
1193 */
1194/* ================================================================================ * */
1195void AACDEC_CleanupInitParams(OMX_HANDLETYPE pComponent);
1196/* ================================================================================= * */
1197/**
1198 * AACDEC_CleanupInitParamsEx() function frees only the initialization time
1199 * memories allocated. For example, it will not close pipes, it will not free the
1200 * memory allocated to the buffers etc. But it does free the memory of buffers
1201 * utilized by the LCML etc. It is basically subset of AACDEC_FreeCompResources()
1202 * function. Called while port disable when port reconfiguration takes place.
1203 *
1204 * @param pComponent This is the component handle.
1205 *
1206 * @pre          None
1207 *
1208 * @post         None
1209 *
1210 *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
1211 *
1212 *  @see         None
1213 */
1214/* ================================================================================ * */
1215void AACDEC_CleanupInitParamsEx(OMX_HANDLETYPE pComponent,OMX_U32 indexport);
1216/* ===========================================================  */
1217/**
1218 *  AACDEC_SetPending()  Called when the component queues a buffer
1219 * to the LCML
1220 *
1221 *  @param pComponentPrivate        Component private data
1222 *
1223 *  @param pBufHdr                Buffer header
1224 *
1225 *  @param eDir                    Direction of the buffer
1226 *
1227 *  @return None
1228 */
1229/*================================================================== */
1230void AACDEC_SetPending(AACDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber);
1231/* ===========================================================  */
1232/**
1233 *  AACDEC_ClearPending()  Called when a buffer is returned
1234 * from the LCML
1235 *
1236 *  @param pComponentPrivate        Component private data
1237 *
1238 *  @param pBufHdr                Buffer header
1239 *
1240 *  @param eDir                    Direction of the buffer
1241 *
1242 *  @return None
1243 */
1244/*================================================================== */
1245void AACDEC_ClearPending(AACDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber) ;
1246/* ===========================================================  */
1247/**
1248 *  AACDEC_IsPending()
1249 *
1250 *
1251 *  @param pComponentPrivate        Component private data
1252 *
1253 *  @return OMX_ErrorNone = Successful
1254 *          Other error code = fail
1255 */
1256/*================================================================== */
1257OMX_U32 AACDEC_IsPending(AACDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir);
1258/* ===========================================================  */
1259/**
1260 *  AACDECFill_LCMLInitParamsEx()  Fills the parameters needed
1261 * to initialize the LCML without recreating the socket node
1262 *
1263 *  @param pComponent            OMX Handle
1264 *
1265 *  @return None
1266 */
1267
1268/*================================================================== */
1269OMX_ERRORTYPE AACDECFill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent,OMX_U32 indexport);
1270/* ===========================================================  */
1271/**
1272 *  AACDEC_IsValid()
1273 *
1274 *
1275 *  @param pComponentPrivate        Component private data
1276 *
1277 *  @return OMX_ErrorNone = Successful
1278 *          Other error code = fail
1279 */
1280/*================================================================== */
1281OMX_U32 AACDEC_IsValid(AACDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer, OMX_DIRTYPE eDir) ;
1282
1283#ifdef RESOURCE_MANAGER_ENABLED
1284void AACDEC_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData);
1285#endif
1286/*=======================================================================*/
1287/*! @fn AACDec_GetSampleRateIndexL
1288
1289 * @brief Gets the sample rate index
1290
1291 * @param  aRate : Actual Sampling Freq
1292
1293 * @Return  Index
1294
1295 */
1296/*=======================================================================*/
1297int AACDec_GetSampleRateIndexL( const int aRate);
1298int AACDec_GetSampleRatebyIndex( const int index);
1299void* AACDEC_ComponentThread (void* pThreadData);
1300
1301OMX_U32 AACDEC_ParseHeader(OMX_BUFFERHEADERTYPE* pBufHeader,
1302                           AACDEC_COMPONENT_PRIVATE *pComponentPrivate);
1303
1304/*  =========================================================================*/
1305/*  func    GetBits                                                          */
1306/*                                                                           */
1307/*  desc    Gets aBits number of bits from position aPosition of one buffer  */
1308/*            and returns the value in a TUint value.                        */
1309/*  =========================================================================*/
1310OMX_U32 AACDEC_GetBits(OMX_U32* nPosition, OMX_U8 nBits, OMX_U8* pBuffer, OMX_BOOL bIcreasePosition);
1311
1312/*  =========================================================================*/
1313/*  func    AACDEC_HandleUSNError
1314 *
1315 *  desc    Handles error messages returned by the dsp
1316 *
1317 * @Return n/a
1318 *
1319 *  =========================================================================*/
1320void AACDEC_HandleUSNError (AACDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 arg);
1321
1322/*=======================================================================*/
1323/*! @fn SignalIfAllBuffersAreReturned
1324 * @brief Sends pthread signal to indicate OMX has returned all buffers to app
1325 * @param  none
1326 * @Return void
1327 */
1328/*=======================================================================*/
1329void SignalIfAllBuffersAreReturned(AACDEC_COMPONENT_PRIVATE *pComponentPrivate);
1330
1331#endif
1332