1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/
4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or
6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public
7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either
8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version.
9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful,
12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of
13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details.
15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public
18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software
19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ====================================================================
22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*             Texas Instruments OMAP(TM) Platform Software
23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved.
24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Use of this software is controlled by the terms and conditions found
26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* in the license agreement under which this software has been supplied.
27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ==================================================================== */
28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** LCML_dspcodec.h
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  The LCML header file contains the definitions used by both the
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  application and the component to access common items.
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef __LCML_DSPCODEC_H__
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define __LCML_DSPCODEC_H__
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define MAX_OBJS                10
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define MAX_STREAMS             10
40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
41b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* 720p implementation */
42b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define MAX_DMM_BUFFERS 20
43b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*DSP specific*/
45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define DSP_DOF_IMAGE           "baseimage.dof"
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define TI_PROCESSOR_DSP        0
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define LCML_MAX_NUM_OF_DLLs    10
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define END_OF_CR_PHASE_ARGS    0xFC25
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define LCML_DATA_SIZE          42
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define DMM_PAGE_SIZE           4096
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define QUEUE_SIZE              20
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define ROUND_TO_PAGESIZE(n)    ((((n)+4095)/DMM_PAGE_SIZE)*DMM_PAGE_SIZE)
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
54b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define __ERROR_PROPAGATION__
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
57b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*switch on/off here */
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
59b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef ANDROID
60b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    #include <utils/Log.h>
61b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <oaf_osal.h>
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <oaf_debug.h>
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "perf.h"
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <LCML_Types.h>
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <LCML_CodecInterface.h>
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <pthread.h>
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*DSP specific*/
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define DSP_ERROR_EXIT(err, msg, label)                \
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (DSP_FAILED (err)) {                        \
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        printf("\n****************LCML ERROR : DSP ************************\n");\
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        printf("Error: %s : Err Num = %lx", msg, err);  \
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;                \
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        printf("\n****************LCML ERROR : DSP ************************\n");\
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto label;                               \
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }                                              /**/
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ======================================================================= */
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This enum is mean to abtract the enumerations of messages that are
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * sent to dsp processor.
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*  ====================================================================== */
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef enum {
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    DSPMSG_AUDIO_UID = 1,
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    DSPMSG_AUDIO_PARAMETERS,
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    DSPMSG_PLAY,
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    DSPMSG_PAUSE,
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    DSPMSG_STOP,
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    DSPMSG_MODE,
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    DSPMSG_PLAYCOMPLETED
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} DSP_Messages;
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * USN structure
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iBufferPtr; /* storing buffer pointer MAPPED */
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iBufferSize; /*buffer size */
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iParamPtr;/*storing param pointer MAPPED */
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iParamSize;/*param size */
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iBufSizeUsed; /* Modified as USN chnages*/
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iEOSFlag;
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 tBufState;
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 bBufActive;
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 unBufID;
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 ulReserved;
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iArmArg;/* storing dsp mapped address of structure*/
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iArmbufferArg;/* ARM side buffer pointer*/
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iArmParamArg;/*ARM side Param pointer*/
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 Bufoutindex;/* buffer index*/
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 BufInindex;/*buffer i/p index*/
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iUsrArg;/*Usr argument*/
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iStreamID;
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} TArmDspCommunicationStruct;
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*API needs to be exposed to application*/
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ========================================================================
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  Initialise the OMX Component specific handle to LCML. The memory is
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  allocated and the dsp node is created. Add notification object to listener
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  thread.
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  hInterface - Handle to LCML which is allocated and filled
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  codecName - not used
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  toCodecInitParams - not used yet
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  fromCodecInfoStruct - not used yet
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  pCallbacks - List of callback that uses to call OMX
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ==========================================================================*/
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define LCML_InitMMCodec(                                  \
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hInterface,                                        \
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        codecName,                                         \
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        toCodecInitParams,                                 \
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fromCodecInfoStruct ,                              \
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCallbacks                                         \
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        )                                                  \
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((LCML_CODEC_INTERFACE*)hInterface)->InitMMCodec(      \
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hInterface,                                        \
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        codecName,                                         \
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        toCodecInitParams,                                 \
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fromCodecInfoStruct ,                              \
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCallbacks                                         \
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        )                          /* Macro End */
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define LCML_InitMMCodecEx(                                \
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hInterface,                                        \
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        codecName,                                         \
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        toCodecInitParams,                                 \
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fromCodecInfoStruct ,                              \
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCallbacks,                                        \
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        Args)                                              \
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((LCML_CODEC_INTERFACE*)hInterface)->InitMMCodecEx(    \
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hInterface,                                        \
167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        codecName,                                         \
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        toCodecInitParams,                                 \
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fromCodecInfoStruct ,                              \
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCallbacks,                                        \
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        Args)                          /* Macro End */
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ========================================================================
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  The LCML_WaitForEvent Wait for a event sychronously
175b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*  @param  hInterface -  Handle of the component to be accessed.  This is the
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*      component handle returned by the call to the GetHandle function.
177b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*  @param  event - Event occured
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  args - Array of "void *" that contains the associated arguments for
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*             occured event
180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @return OMX_ERRORTYPE
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*      If the command successfully executes, the return code will be
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*      OMX_NoError.  Otherwise the appropriate OMX error will be returned.
184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** ==========================================================================*/
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define LCML_WaitForEvent(                                 \
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hInterface,                                        \
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        event,                                             \
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        args)                                              \
189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((LCML_CODEC_INTERFACE*)hInterface)->ControlCodec(     \
190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hInterface,                                        \
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        event,                                             \
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        args)                          /* Macro End */
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
194b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ========================================================================
196b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*  The LCML_QueueBuffer send data to DSP convert it into USN format and send
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  it to DSP via setbuff
198b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*  @param [in] hInterface -  Handle of the component to be accessed.  This is
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*      the component handle returned by the call to the GetHandle function.
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  bufType - type of buffer
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  buffer - pointer to buffer
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  bufferLen - length of  buffer
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  bufferSizeUsed - length of used buffer
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  auxInfo - pointer to parameter
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  auxInfoLen - length of  parameter
206b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*  @param  usrArg - not used
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @return OMX_ERRORTYPE
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*      If the command successfully executes, the return code will be
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*      OMX_NoError.  Otherwise the appropriate OMX error will be returned.
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ==========================================================================*/
211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define LCML_QueueBuffer(                                  \
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hInterface,                                        \
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        bufType,                                           \
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        buffer,                                            \
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        bufferLen,                                         \
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        bufferSizeUsed,                                    \
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        auxInfo,                                           \
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        auxInfoLen,                                        \
219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        usrArg)                                            \
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((LCML_CODEC_INTERFACE*)hInterface)->QueueBuffer(      \
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hInterface,                                        \
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        bufType,                                           \
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        buffer,                                            \
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        bufferLen,                                         \
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        bufferSizeUsed,                                    \
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        auxInfo,                                           \
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        auxInfoLen,                                        \
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        usrArg)
229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ========================================================================
231b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*  The LCML_ControlCodec send command to DSP convert it into USN format and
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  send it to DSP
233b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*  @param  hInterface -  Handle of the component to be accessed.  This is the
234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*      component handle returned by the call to the GetHandle function.
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  bufType - type of buffer
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  iCodecCmd -  command refer TControlCmd
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @param  args - pointer to send some specific command to DSP
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  @return OMX_ERRORTYPE
240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*      If the command successfully executes, the return code will be
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*      OMX_NoError.  Otherwise the appropriate OMX error will be returned.
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** ==========================================================================*/
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define LCML_ControlCodec(                                 \
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hInterface,                                        \
245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        iCodecCmd,                                         \
246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        args)                                              \
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((LCML_CODEC_INTERFACE*)hInterface)->ControlCodec(     \
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        hInterface,                                        \
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        iCodecCmd,                                         \
250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        args)                          /* Macro End */
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* First function needs to be called by application
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE GetHandle (OMX_HANDLETYPE* hInterface );
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
261b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* Struct derives codec interface which have interface to implement for using
262b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* generic codec and also have pointer to DSP specific data and have queues for
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* storing input and output data
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavintypedef struct LCML_DSP_INTERFACE
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE pCodecinterfacehandle;  /* handle to interface struct LCML_CODEC_INTERFACE *dspcodecinterface */
268b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    struct LCML_DSP *dspCodec;
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PTR pComponentPrivate;
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    void * iUsrArg;
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*queue to store USN structure*/
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TArmDspCommunicationStruct* Armoutputstorage[QUEUE_SIZE];
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TArmDspCommunicationStruct* Arminputstorage[QUEUE_SIZE];
274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TArmDspCommunicationStruct * commStruct;
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iBufinputcount;
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 iBufoutputcount;
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 pshutdownFlag;
278b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef __ERROR_PROPAGATION__
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct DSP_NOTIFICATION * g_aNotificationObjects[3];
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct DSP_NOTIFICATION * g_aNotificationObjects[1];
282b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_t g_tidMessageThread;
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 algcntlmapped[QUEUE_SIZE];
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    DMM_BUFFER_OBJ *pAlgcntlDmmBuf[QUEUE_SIZE];
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 strmcntlmapped[QUEUE_SIZE];
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    DMM_BUFFER_OBJ *pStrmcntlDmmBuf[QUEUE_SIZE];
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_t mutex;
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 flush_pending[4];
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bUsnEos;
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_OBJHANDLE pPERF, pPERFcomp;
294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
295b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    DMM_BUFFER_OBJ mapped_dmm_buffers[MAX_DMM_BUFFERS];
296b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U32 mapped_buffer_count;
297b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_BOOL ReUseMap;
298b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pthread_mutex_t m_isStopped_mutex;
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}LCML_DSP_INTERFACE;
301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif /* __MMDSPCODEC_H__ */
303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
305