1*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
2*f81fb7c4SAndroid Build Coastguard Worker *
3*f81fb7c4SAndroid Build Coastguard Worker * File:
4*f81fb7c4SAndroid Build Coastguard Worker * jet.c
5*f81fb7c4SAndroid Build Coastguard Worker *
6*f81fb7c4SAndroid Build Coastguard Worker * Contents and purpose:
7*f81fb7c4SAndroid Build Coastguard Worker * Implementation for JET sound engine
8*f81fb7c4SAndroid Build Coastguard Worker *
9*f81fb7c4SAndroid Build Coastguard Worker * Copyright (c) 2006 Sonic Network Inc.
10*f81fb7c4SAndroid Build Coastguard Worker
11*f81fb7c4SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
12*f81fb7c4SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
13*f81fb7c4SAndroid Build Coastguard Worker * You may obtain a copy of the License at
14*f81fb7c4SAndroid Build Coastguard Worker *
15*f81fb7c4SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
16*f81fb7c4SAndroid Build Coastguard Worker *
17*f81fb7c4SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
18*f81fb7c4SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
19*f81fb7c4SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20*f81fb7c4SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
21*f81fb7c4SAndroid Build Coastguard Worker * limitations under the License.
22*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
23*f81fb7c4SAndroid Build Coastguard Worker * Revision Control:
24*f81fb7c4SAndroid Build Coastguard Worker * $Revision: 563 $
25*f81fb7c4SAndroid Build Coastguard Worker * $Date: 2007-02-13 20:26:23 -0800 (Tue, 13 Feb 2007) $
26*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
27*f81fb7c4SAndroid Build Coastguard Worker */
28*f81fb7c4SAndroid Build Coastguard Worker
29*f81fb7c4SAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
30*f81fb7c4SAndroid Build Coastguard Worker #define LOG_TAG "JET_C"
31*f81fb7c4SAndroid Build Coastguard Worker
32*f81fb7c4SAndroid Build Coastguard Worker //#define DEBUG_JET
33*f81fb7c4SAndroid Build Coastguard Worker
34*f81fb7c4SAndroid Build Coastguard Worker #include "eas_data.h"
35*f81fb7c4SAndroid Build Coastguard Worker #include "eas_smf.h"
36*f81fb7c4SAndroid Build Coastguard Worker #include "jet_data.h"
37*f81fb7c4SAndroid Build Coastguard Worker #include "eas_host.h"
38*f81fb7c4SAndroid Build Coastguard Worker #include "eas_report.h"
39*f81fb7c4SAndroid Build Coastguard Worker
40*f81fb7c4SAndroid Build Coastguard Worker
41*f81fb7c4SAndroid Build Coastguard Worker /* default configuration */
42*f81fb7c4SAndroid Build Coastguard Worker static const S_JET_CONFIG jetDefaultConfig =
43*f81fb7c4SAndroid Build Coastguard Worker {
44*f81fb7c4SAndroid Build Coastguard Worker JET_EVENT_APP_LOW,
45*f81fb7c4SAndroid Build Coastguard Worker JET_EVENT_APP_HIGH
46*f81fb7c4SAndroid Build Coastguard Worker };
47*f81fb7c4SAndroid Build Coastguard Worker
48*f81fb7c4SAndroid Build Coastguard Worker /* function prototypes */
49*f81fb7c4SAndroid Build Coastguard Worker extern EAS_RESULT EAS_IntSetStrmParam (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_INT param, EAS_I32 value);
50*f81fb7c4SAndroid Build Coastguard Worker extern EAS_RESULT EAS_OpenJETStream (EAS_DATA_HANDLE pEASData, EAS_FILE_HANDLE fileHandle, EAS_I32 offset, EAS_HANDLE *ppStream);
51*f81fb7c4SAndroid Build Coastguard Worker extern EAS_RESULT DLSParser (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE fileHandle, EAS_I32 offset, EAS_DLSLIB_HANDLE *ppDLS);
52*f81fb7c4SAndroid Build Coastguard Worker
53*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
54*f81fb7c4SAndroid Build Coastguard Worker * JET_ParseEvent()
55*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
56*f81fb7c4SAndroid Build Coastguard Worker * Returns current status
57*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
58*f81fb7c4SAndroid Build Coastguard Worker */
JET_ParseEvent(EAS_U32 event,S_JET_EVENT * pEvent)59*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC void JET_ParseEvent (EAS_U32 event, S_JET_EVENT *pEvent)
60*f81fb7c4SAndroid Build Coastguard Worker {
61*f81fb7c4SAndroid Build Coastguard Worker pEvent->segment = (EAS_U8) ((event & JET_EVENT_SEG_MASK) >> JET_EVENT_SEG_SHIFT);
62*f81fb7c4SAndroid Build Coastguard Worker pEvent->track = (EAS_U8) ((event & JET_EVENT_TRACK_MASK) >> JET_EVENT_TRACK_SHIFT);
63*f81fb7c4SAndroid Build Coastguard Worker pEvent->channel = (EAS_U8) ((event & JET_EVENT_CHAN_MASK) >> JET_EVENT_CHAN_SHIFT);
64*f81fb7c4SAndroid Build Coastguard Worker pEvent->controller = (EAS_U8) ((event & JET_EVENT_CTRL_MASK) >> JET_EVENT_CTRL_SHIFT);
65*f81fb7c4SAndroid Build Coastguard Worker pEvent->value = (EAS_U8) (event & JET_EVENT_VAL_MASK);
66*f81fb7c4SAndroid Build Coastguard Worker }
67*f81fb7c4SAndroid Build Coastguard Worker
68*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_JET
69*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
70*f81fb7c4SAndroid Build Coastguard Worker * JET_DumpEvent
71*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
72*f81fb7c4SAndroid Build Coastguard Worker * Advances queue read/write index
73*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
74*f81fb7c4SAndroid Build Coastguard Worker */
JET_DumpEvent(const char * procName,EAS_U32 event)75*f81fb7c4SAndroid Build Coastguard Worker static void JET_DumpEvent (const char *procName, EAS_U32 event)
76*f81fb7c4SAndroid Build Coastguard Worker {
77*f81fb7c4SAndroid Build Coastguard Worker S_JET_EVENT sEvent;
78*f81fb7c4SAndroid Build Coastguard Worker JET_ParseEvent(event, &sEvent);
79*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "%s: SegID=%d, TrkID=%d, channel=%d, ctrl=%d, val=%d\n",
80*f81fb7c4SAndroid Build Coastguard Worker procName, sEvent.segment, sEvent.track, sEvent.channel, sEvent.controller, sEvent.value); */ }
81*f81fb7c4SAndroid Build Coastguard Worker }
82*f81fb7c4SAndroid Build Coastguard Worker #endif
83*f81fb7c4SAndroid Build Coastguard Worker
84*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
85*f81fb7c4SAndroid Build Coastguard Worker * JET_IncQueueIndex
86*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
87*f81fb7c4SAndroid Build Coastguard Worker * Advances queue read/write index
88*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
89*f81fb7c4SAndroid Build Coastguard Worker */
JET_IncQueueIndex(EAS_U8 index,EAS_U8 queueSize)90*f81fb7c4SAndroid Build Coastguard Worker EAS_INLINE EAS_U8 JET_IncQueueIndex (EAS_U8 index, EAS_U8 queueSize)
91*f81fb7c4SAndroid Build Coastguard Worker {
92*f81fb7c4SAndroid Build Coastguard Worker if (++index == queueSize)
93*f81fb7c4SAndroid Build Coastguard Worker index = 0;
94*f81fb7c4SAndroid Build Coastguard Worker return index;
95*f81fb7c4SAndroid Build Coastguard Worker }
96*f81fb7c4SAndroid Build Coastguard Worker
97*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
98*f81fb7c4SAndroid Build Coastguard Worker * JET_WriteQueue
99*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
100*f81fb7c4SAndroid Build Coastguard Worker * Save event to queue
101*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
102*f81fb7c4SAndroid Build Coastguard Worker */
JET_WriteQueue(EAS_U32 * pEventQueue,EAS_U8 * pWriteIndex,EAS_U8 readIndex,EAS_U8 queueSize,EAS_U32 event)103*f81fb7c4SAndroid Build Coastguard Worker EAS_INLINE void JET_WriteQueue (EAS_U32 *pEventQueue, EAS_U8 *pWriteIndex, EAS_U8 readIndex, EAS_U8 queueSize, EAS_U32 event)
104*f81fb7c4SAndroid Build Coastguard Worker {
105*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 temp;
106*f81fb7c4SAndroid Build Coastguard Worker
107*f81fb7c4SAndroid Build Coastguard Worker /* check for queue overflow */
108*f81fb7c4SAndroid Build Coastguard Worker temp = JET_IncQueueIndex(*pWriteIndex, queueSize);
109*f81fb7c4SAndroid Build Coastguard Worker if (temp == readIndex)
110*f81fb7c4SAndroid Build Coastguard Worker {
111*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "JET_Event: Event queue overflow --- event ignored!\n"); */ }
112*f81fb7c4SAndroid Build Coastguard Worker return;
113*f81fb7c4SAndroid Build Coastguard Worker }
114*f81fb7c4SAndroid Build Coastguard Worker
115*f81fb7c4SAndroid Build Coastguard Worker /* save in queue and advance write index */
116*f81fb7c4SAndroid Build Coastguard Worker pEventQueue[*pWriteIndex] = event;
117*f81fb7c4SAndroid Build Coastguard Worker *pWriteIndex = temp;
118*f81fb7c4SAndroid Build Coastguard Worker }
119*f81fb7c4SAndroid Build Coastguard Worker
120*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
121*f81fb7c4SAndroid Build Coastguard Worker * JET_ReadQueue
122*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
123*f81fb7c4SAndroid Build Coastguard Worker * Read event to queue
124*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
125*f81fb7c4SAndroid Build Coastguard Worker */
JET_ReadQueue(EAS_U32 * pEventQueue,EAS_U8 * pReadIndex,EAS_U8 writeIndex,EAS_U8 queueSize,EAS_U32 * pEvent)126*f81fb7c4SAndroid Build Coastguard Worker EAS_INLINE EAS_BOOL JET_ReadQueue (EAS_U32 *pEventQueue, EAS_U8 *pReadIndex, EAS_U8 writeIndex, EAS_U8 queueSize, EAS_U32 *pEvent)
127*f81fb7c4SAndroid Build Coastguard Worker {
128*f81fb7c4SAndroid Build Coastguard Worker
129*f81fb7c4SAndroid Build Coastguard Worker /* check for empty queue */
130*f81fb7c4SAndroid Build Coastguard Worker if (*pReadIndex == writeIndex)
131*f81fb7c4SAndroid Build Coastguard Worker return EAS_FALSE;
132*f81fb7c4SAndroid Build Coastguard Worker
133*f81fb7c4SAndroid Build Coastguard Worker /* save in queue and advance write index */
134*f81fb7c4SAndroid Build Coastguard Worker *pEvent = pEventQueue[*pReadIndex];
135*f81fb7c4SAndroid Build Coastguard Worker *pReadIndex = JET_IncQueueIndex(*pReadIndex, queueSize);
136*f81fb7c4SAndroid Build Coastguard Worker return EAS_TRUE;
137*f81fb7c4SAndroid Build Coastguard Worker }
138*f81fb7c4SAndroid Build Coastguard Worker
139*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
140*f81fb7c4SAndroid Build Coastguard Worker * JET_NextSegment
141*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
142*f81fb7c4SAndroid Build Coastguard Worker * Advances segment number
143*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
144*f81fb7c4SAndroid Build Coastguard Worker */
JET_NextSegment(EAS_INT seg_num)145*f81fb7c4SAndroid Build Coastguard Worker EAS_INLINE EAS_INT JET_NextSegment (EAS_INT seg_num)
146*f81fb7c4SAndroid Build Coastguard Worker {
147*f81fb7c4SAndroid Build Coastguard Worker if (++seg_num == SEG_QUEUE_DEPTH)
148*f81fb7c4SAndroid Build Coastguard Worker seg_num = 0;
149*f81fb7c4SAndroid Build Coastguard Worker return seg_num;
150*f81fb7c4SAndroid Build Coastguard Worker }
151*f81fb7c4SAndroid Build Coastguard Worker
152*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
153*f81fb7c4SAndroid Build Coastguard Worker * JET_PrepareSegment()
154*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
155*f81fb7c4SAndroid Build Coastguard Worker * Prepare a segment for playback
156*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
157*f81fb7c4SAndroid Build Coastguard Worker */
JET_PrepareSegment(EAS_DATA_HANDLE easHandle,EAS_I32 queueNum)158*f81fb7c4SAndroid Build Coastguard Worker static EAS_RESULT JET_PrepareSegment (EAS_DATA_HANDLE easHandle, EAS_I32 queueNum)
159*f81fb7c4SAndroid Build Coastguard Worker {
160*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
161*f81fb7c4SAndroid Build Coastguard Worker S_JET_SEGMENT *p;
162*f81fb7c4SAndroid Build Coastguard Worker
163*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_PrepareSegment: %d\n", queueNum); */ }
164*f81fb7c4SAndroid Build Coastguard Worker
165*f81fb7c4SAndroid Build Coastguard Worker p = &easHandle->jetHandle->segQueue[queueNum];
166*f81fb7c4SAndroid Build Coastguard Worker result = EAS_Prepare(easHandle, p->streamHandle);
167*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
168*f81fb7c4SAndroid Build Coastguard Worker return result;
169*f81fb7c4SAndroid Build Coastguard Worker
170*f81fb7c4SAndroid Build Coastguard Worker /* pause segment - must be triggered by play or end of previous segment */
171*f81fb7c4SAndroid Build Coastguard Worker result = EAS_Pause(easHandle, p->streamHandle);
172*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
173*f81fb7c4SAndroid Build Coastguard Worker return result;
174*f81fb7c4SAndroid Build Coastguard Worker p->state = JET_STATE_READY;
175*f81fb7c4SAndroid Build Coastguard Worker
176*f81fb7c4SAndroid Build Coastguard Worker /* set calback data */
177*f81fb7c4SAndroid Build Coastguard Worker result = EAS_IntSetStrmParam(easHandle, p->streamHandle, PARSER_DATA_JET_CB, queueNum);
178*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
179*f81fb7c4SAndroid Build Coastguard Worker return result;
180*f81fb7c4SAndroid Build Coastguard Worker
181*f81fb7c4SAndroid Build Coastguard Worker /* set DLS collection */
182*f81fb7c4SAndroid Build Coastguard Worker if (p->libNum >= 0)
183*f81fb7c4SAndroid Build Coastguard Worker {
184*f81fb7c4SAndroid Build Coastguard Worker result = EAS_IntSetStrmParam(easHandle, p->streamHandle,
185*f81fb7c4SAndroid Build Coastguard Worker PARSER_DATA_DLS_COLLECTION, (EAS_I32) easHandle->jetHandle->libHandles[p->libNum]);
186*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
187*f81fb7c4SAndroid Build Coastguard Worker return result;
188*f81fb7c4SAndroid Build Coastguard Worker }
189*f81fb7c4SAndroid Build Coastguard Worker
190*f81fb7c4SAndroid Build Coastguard Worker /* set transposition */
191*f81fb7c4SAndroid Build Coastguard Worker if (p->transpose)
192*f81fb7c4SAndroid Build Coastguard Worker {
193*f81fb7c4SAndroid Build Coastguard Worker result = EAS_SetTransposition(easHandle, p->streamHandle, p->transpose);
194*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
195*f81fb7c4SAndroid Build Coastguard Worker return result;
196*f81fb7c4SAndroid Build Coastguard Worker }
197*f81fb7c4SAndroid Build Coastguard Worker
198*f81fb7c4SAndroid Build Coastguard Worker return result;
199*f81fb7c4SAndroid Build Coastguard Worker }
200*f81fb7c4SAndroid Build Coastguard Worker
201*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
202*f81fb7c4SAndroid Build Coastguard Worker * JET_StartPlayback()
203*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
204*f81fb7c4SAndroid Build Coastguard Worker * Start segment playback
205*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
206*f81fb7c4SAndroid Build Coastguard Worker */
JET_StartPlayback(EAS_DATA_HANDLE easHandle,EAS_I32 queueNum)207*f81fb7c4SAndroid Build Coastguard Worker static EAS_RESULT JET_StartPlayback (EAS_DATA_HANDLE easHandle, EAS_I32 queueNum)
208*f81fb7c4SAndroid Build Coastguard Worker {
209*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result = EAS_SUCCESS;
210*f81fb7c4SAndroid Build Coastguard Worker S_JET_SEGMENT *pSeg;
211*f81fb7c4SAndroid Build Coastguard Worker
212*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_StartPlayback %d\n", queueNum); */ }
213*f81fb7c4SAndroid Build Coastguard Worker
214*f81fb7c4SAndroid Build Coastguard Worker /* if next segment is queued, start playback */
215*f81fb7c4SAndroid Build Coastguard Worker pSeg = &easHandle->jetHandle->segQueue[queueNum];
216*f81fb7c4SAndroid Build Coastguard Worker if (pSeg->streamHandle != NULL)
217*f81fb7c4SAndroid Build Coastguard Worker {
218*f81fb7c4SAndroid Build Coastguard Worker result = EAS_Resume(easHandle, pSeg->streamHandle);
219*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->segQueue[queueNum].state = JET_STATE_PLAYING;
220*f81fb7c4SAndroid Build Coastguard Worker
221*f81fb7c4SAndroid Build Coastguard Worker /* set mute flags */
222*f81fb7c4SAndroid Build Coastguard Worker if ((result == EAS_SUCCESS) && (pSeg->muteFlags != 0))
223*f81fb7c4SAndroid Build Coastguard Worker result = EAS_IntSetStrmParam(easHandle, pSeg->streamHandle, PARSER_DATA_MUTE_FLAGS, (EAS_I32) pSeg->muteFlags);
224*f81fb7c4SAndroid Build Coastguard Worker }
225*f81fb7c4SAndroid Build Coastguard Worker return result;
226*f81fb7c4SAndroid Build Coastguard Worker }
227*f81fb7c4SAndroid Build Coastguard Worker
228*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
229*f81fb7c4SAndroid Build Coastguard Worker * JET_CloseSegment
230*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
231*f81fb7c4SAndroid Build Coastguard Worker * Closes stream associated with a segment
232*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
233*f81fb7c4SAndroid Build Coastguard Worker */
JET_CloseSegment(EAS_DATA_HANDLE easHandle,EAS_INT queueNum)234*f81fb7c4SAndroid Build Coastguard Worker EAS_INLINE EAS_INT JET_CloseSegment (EAS_DATA_HANDLE easHandle, EAS_INT queueNum)
235*f81fb7c4SAndroid Build Coastguard Worker {
236*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
237*f81fb7c4SAndroid Build Coastguard Worker
238*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_CloseSegment %d\n", queueNum); */ }
239*f81fb7c4SAndroid Build Coastguard Worker
240*f81fb7c4SAndroid Build Coastguard Worker /* close the segment */
241*f81fb7c4SAndroid Build Coastguard Worker result = EAS_CloseFile(easHandle, easHandle->jetHandle->segQueue[queueNum].streamHandle);
242*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
243*f81fb7c4SAndroid Build Coastguard Worker return result;
244*f81fb7c4SAndroid Build Coastguard Worker
245*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->segQueue[queueNum].streamHandle = NULL;
246*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->segQueue[queueNum].state = JET_STATE_CLOSED;
247*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->numQueuedSegments--;
248*f81fb7c4SAndroid Build Coastguard Worker return result;
249*f81fb7c4SAndroid Build Coastguard Worker }
250*f81fb7c4SAndroid Build Coastguard Worker
251*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
252*f81fb7c4SAndroid Build Coastguard Worker * JetParseInfoChunk()
253*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
254*f81fb7c4SAndroid Build Coastguard Worker * Parses the JET info chunk
255*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
256*f81fb7c4SAndroid Build Coastguard Worker */
JetParseInfoChunk(EAS_DATA_HANDLE easHandle,EAS_I32 pos,EAS_I32 chunkSize)257*f81fb7c4SAndroid Build Coastguard Worker static EAS_RESULT JetParseInfoChunk (EAS_DATA_HANDLE easHandle, EAS_I32 pos, EAS_I32 chunkSize)
258*f81fb7c4SAndroid Build Coastguard Worker {
259*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
260*f81fb7c4SAndroid Build Coastguard Worker EAS_U32 infoType;
261*f81fb7c4SAndroid Build Coastguard Worker EAS_U32 temp;
262*f81fb7c4SAndroid Build Coastguard Worker
263*f81fb7c4SAndroid Build Coastguard Worker /* offset to data */
264*f81fb7c4SAndroid Build Coastguard Worker result = EAS_HWFileSeek(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, pos);
265*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
266*f81fb7c4SAndroid Build Coastguard Worker return result;
267*f81fb7c4SAndroid Build Coastguard Worker
268*f81fb7c4SAndroid Build Coastguard Worker /* read the entire chunk */
269*f81fb7c4SAndroid Build Coastguard Worker result = EAS_SUCCESS;
270*f81fb7c4SAndroid Build Coastguard Worker while ((result == EAS_SUCCESS) && (chunkSize > 0))
271*f81fb7c4SAndroid Build Coastguard Worker {
272*f81fb7c4SAndroid Build Coastguard Worker
273*f81fb7c4SAndroid Build Coastguard Worker /* get info infoType */
274*f81fb7c4SAndroid Build Coastguard Worker result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &infoType, EAS_TRUE);
275*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
276*f81fb7c4SAndroid Build Coastguard Worker break;
277*f81fb7c4SAndroid Build Coastguard Worker
278*f81fb7c4SAndroid Build Coastguard Worker /* get info field */
279*f81fb7c4SAndroid Build Coastguard Worker result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &temp, EAS_FALSE);
280*f81fb7c4SAndroid Build Coastguard Worker if (result == EAS_SUCCESS)
281*f81fb7c4SAndroid Build Coastguard Worker
282*f81fb7c4SAndroid Build Coastguard Worker switch (infoType)
283*f81fb7c4SAndroid Build Coastguard Worker {
284*f81fb7c4SAndroid Build Coastguard Worker case INFO_NUM_SMF_CHUNKS:
285*f81fb7c4SAndroid Build Coastguard Worker if (temp >= JET_MAX_SEGMENTS) {
286*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INCOMPATIBLE_VERSION;
287*f81fb7c4SAndroid Build Coastguard Worker }
288*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->numSegments = (EAS_U8) temp;
289*f81fb7c4SAndroid Build Coastguard Worker break;
290*f81fb7c4SAndroid Build Coastguard Worker
291*f81fb7c4SAndroid Build Coastguard Worker case INFO_NUM_DLS_CHUNKS:
292*f81fb7c4SAndroid Build Coastguard Worker if (temp >= JET_MAX_DLS_COLLECTIONS) {
293*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INCOMPATIBLE_VERSION;
294*f81fb7c4SAndroid Build Coastguard Worker }
295*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->numLibraries = (EAS_U8) temp;
296*f81fb7c4SAndroid Build Coastguard Worker break;
297*f81fb7c4SAndroid Build Coastguard Worker
298*f81fb7c4SAndroid Build Coastguard Worker case INFO_JET_VERSION:
299*f81fb7c4SAndroid Build Coastguard Worker /* check major version number */
300*f81fb7c4SAndroid Build Coastguard Worker if ((temp & 0xff000000) != (JET_VERSION & 0xff000000))
301*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_INCOMPATIBLE_VERSION;
302*f81fb7c4SAndroid Build Coastguard Worker break;
303*f81fb7c4SAndroid Build Coastguard Worker
304*f81fb7c4SAndroid Build Coastguard Worker default:
305*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Ignoring unrecognized JET info type 0x%08x", infoType); */ }
306*f81fb7c4SAndroid Build Coastguard Worker break;
307*f81fb7c4SAndroid Build Coastguard Worker }
308*f81fb7c4SAndroid Build Coastguard Worker
309*f81fb7c4SAndroid Build Coastguard Worker chunkSize -= 8;
310*f81fb7c4SAndroid Build Coastguard Worker }
311*f81fb7c4SAndroid Build Coastguard Worker
312*f81fb7c4SAndroid Build Coastguard Worker /* allocate pointers for chunks to follow */
313*f81fb7c4SAndroid Build Coastguard Worker
314*f81fb7c4SAndroid Build Coastguard Worker return result;
315*f81fb7c4SAndroid Build Coastguard Worker }
316*f81fb7c4SAndroid Build Coastguard Worker
317*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
318*f81fb7c4SAndroid Build Coastguard Worker * JET_OpenFile()
319*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
320*f81fb7c4SAndroid Build Coastguard Worker * Opens a JET content file for playback
321*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
322*f81fb7c4SAndroid Build Coastguard Worker */
JET_OpenFile(EAS_DATA_HANDLE easHandle,EAS_FILE_LOCATOR locator)323*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_OpenFile (EAS_DATA_HANDLE easHandle, EAS_FILE_LOCATOR locator)
324*f81fb7c4SAndroid Build Coastguard Worker {
325*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
326*f81fb7c4SAndroid Build Coastguard Worker EAS_U32 chunkType;
327*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 pos;
328*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 chunkSize;
329*f81fb7c4SAndroid Build Coastguard Worker EAS_INT smfChunkNum;
330*f81fb7c4SAndroid Build Coastguard Worker EAS_INT dlsChunkNum;
331*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 dataSize = 0; /* make lint happy */
332*f81fb7c4SAndroid Build Coastguard Worker
333*f81fb7c4SAndroid Build Coastguard Worker /* make sure that we don't have an open file */
334*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle->jetFileHandle != NULL)
335*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_FILE_ALREADY_OPEN;
336*f81fb7c4SAndroid Build Coastguard Worker
337*f81fb7c4SAndroid Build Coastguard Worker /* open the media file */
338*f81fb7c4SAndroid Build Coastguard Worker result = EAS_HWOpenFile(easHandle->hwInstData, locator, &easHandle->jetHandle->jetFileHandle, EAS_FILE_READ);
339*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
340*f81fb7c4SAndroid Build Coastguard Worker return result;
341*f81fb7c4SAndroid Build Coastguard Worker
342*f81fb7c4SAndroid Build Coastguard Worker /* check header */
343*f81fb7c4SAndroid Build Coastguard Worker result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &chunkType, EAS_TRUE);
344*f81fb7c4SAndroid Build Coastguard Worker if (result == EAS_SUCCESS)
345*f81fb7c4SAndroid Build Coastguard Worker {
346*f81fb7c4SAndroid Build Coastguard Worker if (chunkType != JET_HEADER_TAG)
347*f81fb7c4SAndroid Build Coastguard Worker {
348*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "File is not JET format\n"); */ }
349*f81fb7c4SAndroid Build Coastguard Worker result = EAS_ERROR_UNRECOGNIZED_FORMAT;
350*f81fb7c4SAndroid Build Coastguard Worker }
351*f81fb7c4SAndroid Build Coastguard Worker }
352*f81fb7c4SAndroid Build Coastguard Worker /* get the file data size */
353*f81fb7c4SAndroid Build Coastguard Worker if (result == EAS_SUCCESS)
354*f81fb7c4SAndroid Build Coastguard Worker result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &dataSize, EAS_FALSE);
355*f81fb7c4SAndroid Build Coastguard Worker
356*f81fb7c4SAndroid Build Coastguard Worker /* parse through the file to find contents */
357*f81fb7c4SAndroid Build Coastguard Worker smfChunkNum = dlsChunkNum = 0;
358*f81fb7c4SAndroid Build Coastguard Worker pos = chunkSize = 8;
359*f81fb7c4SAndroid Build Coastguard Worker while ((result == EAS_SUCCESS) && (pos < dataSize))
360*f81fb7c4SAndroid Build Coastguard Worker {
361*f81fb7c4SAndroid Build Coastguard Worker
362*f81fb7c4SAndroid Build Coastguard Worker /* offset to chunk data */
363*f81fb7c4SAndroid Build Coastguard Worker result = EAS_HWFileSeek(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, pos);
364*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
365*f81fb7c4SAndroid Build Coastguard Worker break;
366*f81fb7c4SAndroid Build Coastguard Worker
367*f81fb7c4SAndroid Build Coastguard Worker /* get chunk size and type */
368*f81fb7c4SAndroid Build Coastguard Worker result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &chunkType, EAS_TRUE);
369*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
370*f81fb7c4SAndroid Build Coastguard Worker break;
371*f81fb7c4SAndroid Build Coastguard Worker
372*f81fb7c4SAndroid Build Coastguard Worker result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &chunkSize, EAS_FALSE);
373*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
374*f81fb7c4SAndroid Build Coastguard Worker break;
375*f81fb7c4SAndroid Build Coastguard Worker pos += 8;
376*f81fb7c4SAndroid Build Coastguard Worker
377*f81fb7c4SAndroid Build Coastguard Worker switch (chunkType)
378*f81fb7c4SAndroid Build Coastguard Worker {
379*f81fb7c4SAndroid Build Coastguard Worker case JET_INFO_CHUNK:
380*f81fb7c4SAndroid Build Coastguard Worker result = JetParseInfoChunk(easHandle, pos, chunkSize);
381*f81fb7c4SAndroid Build Coastguard Worker break;
382*f81fb7c4SAndroid Build Coastguard Worker
383*f81fb7c4SAndroid Build Coastguard Worker case JET_SMF_CHUNK:
384*f81fb7c4SAndroid Build Coastguard Worker if (smfChunkNum < easHandle->jetHandle->numSegments)
385*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->segmentOffsets[smfChunkNum++] = pos;
386*f81fb7c4SAndroid Build Coastguard Worker else
387*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Ignoring extraneous SMF chunk"); */ }
388*f81fb7c4SAndroid Build Coastguard Worker break;
389*f81fb7c4SAndroid Build Coastguard Worker
390*f81fb7c4SAndroid Build Coastguard Worker case JET_DLS_CHUNK:
391*f81fb7c4SAndroid Build Coastguard Worker if (dlsChunkNum < easHandle->jetHandle->numLibraries)
392*f81fb7c4SAndroid Build Coastguard Worker result = DLSParser(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, pos, &easHandle->jetHandle->libHandles[dlsChunkNum++]);
393*f81fb7c4SAndroid Build Coastguard Worker else
394*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Ignoring extraneous DLS chunk"); */ }
395*f81fb7c4SAndroid Build Coastguard Worker break;
396*f81fb7c4SAndroid Build Coastguard Worker
397*f81fb7c4SAndroid Build Coastguard Worker case JET_APP_DATA_CHUNK:
398*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->appDataOffset = pos;
399*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->appDataSize = chunkSize;
400*f81fb7c4SAndroid Build Coastguard Worker break;
401*f81fb7c4SAndroid Build Coastguard Worker
402*f81fb7c4SAndroid Build Coastguard Worker case INFO_JET_COPYRIGHT:
403*f81fb7c4SAndroid Build Coastguard Worker break;
404*f81fb7c4SAndroid Build Coastguard Worker
405*f81fb7c4SAndroid Build Coastguard Worker default:
406*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Ignoring unrecognized JET chunk type 0x%08x", chunkType); */ }
407*f81fb7c4SAndroid Build Coastguard Worker break;
408*f81fb7c4SAndroid Build Coastguard Worker }
409*f81fb7c4SAndroid Build Coastguard Worker
410*f81fb7c4SAndroid Build Coastguard Worker /* offset to next chunk */
411*f81fb7c4SAndroid Build Coastguard Worker pos += chunkSize;
412*f81fb7c4SAndroid Build Coastguard Worker }
413*f81fb7c4SAndroid Build Coastguard Worker
414*f81fb7c4SAndroid Build Coastguard Worker /* close file if something went wrong */
415*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
416*f81fb7c4SAndroid Build Coastguard Worker EAS_HWCloseFile(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle);
417*f81fb7c4SAndroid Build Coastguard Worker
418*f81fb7c4SAndroid Build Coastguard Worker return result;
419*f81fb7c4SAndroid Build Coastguard Worker }
420*f81fb7c4SAndroid Build Coastguard Worker
421*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
422*f81fb7c4SAndroid Build Coastguard Worker * JET_GetAppData()
423*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
424*f81fb7c4SAndroid Build Coastguard Worker * Returns location and size of application data in the JET file
425*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
426*f81fb7c4SAndroid Build Coastguard Worker */
JET_GetAppData(EAS_DATA_HANDLE easHandle,EAS_I32 * pAppDataOffset,EAS_I32 * pAppDataSize)427*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT JET_GetAppData (EAS_DATA_HANDLE easHandle, EAS_I32 *pAppDataOffset, EAS_I32 *pAppDataSize)
428*f81fb7c4SAndroid Build Coastguard Worker {
429*f81fb7c4SAndroid Build Coastguard Worker
430*f81fb7c4SAndroid Build Coastguard Worker /* check for app chunk */
431*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle->appDataSize == 0)
432*f81fb7c4SAndroid Build Coastguard Worker {
433*f81fb7c4SAndroid Build Coastguard Worker *pAppDataOffset = *pAppDataSize = 0;
434*f81fb7c4SAndroid Build Coastguard Worker return EAS_FAILURE;
435*f81fb7c4SAndroid Build Coastguard Worker }
436*f81fb7c4SAndroid Build Coastguard Worker
437*f81fb7c4SAndroid Build Coastguard Worker /* return app data */
438*f81fb7c4SAndroid Build Coastguard Worker *pAppDataOffset = easHandle->jetHandle->appDataOffset;
439*f81fb7c4SAndroid Build Coastguard Worker *pAppDataSize = easHandle->jetHandle->appDataSize;
440*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
441*f81fb7c4SAndroid Build Coastguard Worker }
442*f81fb7c4SAndroid Build Coastguard Worker
443*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
444*f81fb7c4SAndroid Build Coastguard Worker * JET_CloseFile()
445*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
446*f81fb7c4SAndroid Build Coastguard Worker * Closes a JET content file and releases associated resources
447*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
448*f81fb7c4SAndroid Build Coastguard Worker */
JET_CloseFile(EAS_DATA_HANDLE easHandle)449*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_CloseFile (EAS_DATA_HANDLE easHandle)
450*f81fb7c4SAndroid Build Coastguard Worker {
451*f81fb7c4SAndroid Build Coastguard Worker EAS_INT index;
452*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result = EAS_SUCCESS;
453*f81fb7c4SAndroid Build Coastguard Worker
454*f81fb7c4SAndroid Build Coastguard Worker /* close open streams */
455*f81fb7c4SAndroid Build Coastguard Worker for (index = 0; index < SEG_QUEUE_DEPTH; index++)
456*f81fb7c4SAndroid Build Coastguard Worker {
457*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle->segQueue[index].streamHandle != NULL)
458*f81fb7c4SAndroid Build Coastguard Worker {
459*f81fb7c4SAndroid Build Coastguard Worker result = JET_CloseSegment(easHandle, index);
460*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
461*f81fb7c4SAndroid Build Coastguard Worker break;
462*f81fb7c4SAndroid Build Coastguard Worker }
463*f81fb7c4SAndroid Build Coastguard Worker }
464*f81fb7c4SAndroid Build Coastguard Worker
465*f81fb7c4SAndroid Build Coastguard Worker /* close the main file handle */
466*f81fb7c4SAndroid Build Coastguard Worker if ((result == EAS_SUCCESS) && (easHandle->jetHandle->jetFileHandle != NULL))
467*f81fb7c4SAndroid Build Coastguard Worker {
468*f81fb7c4SAndroid Build Coastguard Worker result = EAS_HWCloseFile(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle);
469*f81fb7c4SAndroid Build Coastguard Worker if (result == EAS_SUCCESS)
470*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->jetFileHandle = NULL;
471*f81fb7c4SAndroid Build Coastguard Worker }
472*f81fb7c4SAndroid Build Coastguard Worker return result;
473*f81fb7c4SAndroid Build Coastguard Worker }
474*f81fb7c4SAndroid Build Coastguard Worker
475*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
476*f81fb7c4SAndroid Build Coastguard Worker * JET_Init()
477*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
478*f81fb7c4SAndroid Build Coastguard Worker * Initializes the JET library, allocates memory, etc. Call
479*f81fb7c4SAndroid Build Coastguard Worker * JET_Shutdown to de-allocate memory.
480*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
481*f81fb7c4SAndroid Build Coastguard Worker */
JET_Init(EAS_DATA_HANDLE easHandle,const S_JET_CONFIG * pConfig,EAS_INT configSize)482*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_Init (EAS_DATA_HANDLE easHandle, const S_JET_CONFIG *pConfig, EAS_INT configSize)
483*f81fb7c4SAndroid Build Coastguard Worker {
484*f81fb7c4SAndroid Build Coastguard Worker S_JET_DATA *pJet;
485*f81fb7c4SAndroid Build Coastguard Worker EAS_U8 flags = 0;
486*f81fb7c4SAndroid Build Coastguard Worker
487*f81fb7c4SAndroid Build Coastguard Worker /* sanity check */
488*f81fb7c4SAndroid Build Coastguard Worker if (easHandle == NULL)
489*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_HANDLE_INTEGRITY;
490*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle != NULL)
491*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_FEATURE_ALREADY_ACTIVE;
492*f81fb7c4SAndroid Build Coastguard Worker if (pConfig == NULL)
493*f81fb7c4SAndroid Build Coastguard Worker pConfig = &jetDefaultConfig;
494*f81fb7c4SAndroid Build Coastguard Worker
495*f81fb7c4SAndroid Build Coastguard Worker /* allocate the JET data object */
496*f81fb7c4SAndroid Build Coastguard Worker pJet = EAS_HWMalloc(easHandle->hwInstData, sizeof(S_JET_DATA));
497*f81fb7c4SAndroid Build Coastguard Worker if (pJet == NULL)
498*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_MALLOC_FAILED;
499*f81fb7c4SAndroid Build Coastguard Worker
500*f81fb7c4SAndroid Build Coastguard Worker /* initialize JET data structure */
501*f81fb7c4SAndroid Build Coastguard Worker EAS_HWMemSet(pJet, 0, sizeof(S_JET_DATA));
502*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle = pJet;
503*f81fb7c4SAndroid Build Coastguard Worker pJet->flags = flags;
504*f81fb7c4SAndroid Build Coastguard Worker
505*f81fb7c4SAndroid Build Coastguard Worker /* copy config data */
506*f81fb7c4SAndroid Build Coastguard Worker if (configSize > (EAS_INT) sizeof(S_JET_CONFIG))
507*f81fb7c4SAndroid Build Coastguard Worker configSize = sizeof(S_JET_CONFIG);
508*f81fb7c4SAndroid Build Coastguard Worker EAS_HWMemCpy(&pJet->config, pConfig, configSize);
509*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
510*f81fb7c4SAndroid Build Coastguard Worker }
511*f81fb7c4SAndroid Build Coastguard Worker
512*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
513*f81fb7c4SAndroid Build Coastguard Worker * JET_Shutdown()
514*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
515*f81fb7c4SAndroid Build Coastguard Worker * Frees any memory used by the JET library
516*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
517*f81fb7c4SAndroid Build Coastguard Worker */
JET_Shutdown(EAS_DATA_HANDLE easHandle)518*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_Shutdown (EAS_DATA_HANDLE easHandle)
519*f81fb7c4SAndroid Build Coastguard Worker {
520*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
521*f81fb7c4SAndroid Build Coastguard Worker int i;
522*f81fb7c4SAndroid Build Coastguard Worker
523*f81fb7c4SAndroid Build Coastguard Worker /* close any open files */
524*f81fb7c4SAndroid Build Coastguard Worker result = JET_CloseFile(easHandle);
525*f81fb7c4SAndroid Build Coastguard Worker
526*f81fb7c4SAndroid Build Coastguard Worker /* free allocated data */
527*f81fb7c4SAndroid Build Coastguard Worker for(i = 0 ; i < easHandle->jetHandle->numLibraries ; i++) {
528*f81fb7c4SAndroid Build Coastguard Worker if(easHandle->jetHandle->libHandles[i] != NULL) {
529*f81fb7c4SAndroid Build Coastguard Worker EAS_HWFree(easHandle->hwInstData, easHandle->jetHandle->libHandles[i]);
530*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->libHandles[i] = NULL;
531*f81fb7c4SAndroid Build Coastguard Worker }
532*f81fb7c4SAndroid Build Coastguard Worker }
533*f81fb7c4SAndroid Build Coastguard Worker
534*f81fb7c4SAndroid Build Coastguard Worker EAS_HWFree(easHandle->hwInstData, easHandle->jetHandle);
535*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle = NULL;
536*f81fb7c4SAndroid Build Coastguard Worker return result;
537*f81fb7c4SAndroid Build Coastguard Worker }
538*f81fb7c4SAndroid Build Coastguard Worker
539*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
540*f81fb7c4SAndroid Build Coastguard Worker * JET_Status()
541*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
542*f81fb7c4SAndroid Build Coastguard Worker * Returns current status
543*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
544*f81fb7c4SAndroid Build Coastguard Worker */
JET_Status(EAS_DATA_HANDLE easHandle,S_JET_STATUS * pStatus)545*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_Status (EAS_DATA_HANDLE easHandle, S_JET_STATUS *pStatus)
546*f81fb7c4SAndroid Build Coastguard Worker {
547*f81fb7c4SAndroid Build Coastguard Worker S_JET_SEGMENT *pSeg;
548*f81fb7c4SAndroid Build Coastguard Worker
549*f81fb7c4SAndroid Build Coastguard Worker pSeg = &easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment];
550*f81fb7c4SAndroid Build Coastguard Worker if (pSeg->streamHandle != NULL)
551*f81fb7c4SAndroid Build Coastguard Worker {
552*f81fb7c4SAndroid Build Coastguard Worker pStatus->currentUserID = pSeg->userID;
553*f81fb7c4SAndroid Build Coastguard Worker pStatus->segmentRepeatCount = pSeg->repeatCount;
554*f81fb7c4SAndroid Build Coastguard Worker }
555*f81fb7c4SAndroid Build Coastguard Worker else
556*f81fb7c4SAndroid Build Coastguard Worker {
557*f81fb7c4SAndroid Build Coastguard Worker pStatus->currentUserID = -1;
558*f81fb7c4SAndroid Build Coastguard Worker pStatus->segmentRepeatCount = 0;
559*f81fb7c4SAndroid Build Coastguard Worker }
560*f81fb7c4SAndroid Build Coastguard Worker
561*f81fb7c4SAndroid Build Coastguard Worker pStatus->paused = !(easHandle->jetHandle->flags & JET_FLAGS_PLAYING);
562*f81fb7c4SAndroid Build Coastguard Worker pStatus->numQueuedSegments = easHandle->jetHandle->numQueuedSegments;
563*f81fb7c4SAndroid Build Coastguard Worker pStatus->currentPlayingSegment = easHandle->jetHandle->playSegment;
564*f81fb7c4SAndroid Build Coastguard Worker pStatus->currentQueuedSegment = easHandle->jetHandle->queueSegment;
565*f81fb7c4SAndroid Build Coastguard Worker if (pSeg->streamHandle != NULL)
566*f81fb7c4SAndroid Build Coastguard Worker {
567*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
568*f81fb7c4SAndroid Build Coastguard Worker EAS_I32 location ;
569*f81fb7c4SAndroid Build Coastguard Worker if ((result = EAS_GetLocation(easHandle, pSeg->streamHandle, &location)) == EAS_SUCCESS)
570*f81fb7c4SAndroid Build Coastguard Worker if(location != 0)
571*f81fb7c4SAndroid Build Coastguard Worker {
572*f81fb7c4SAndroid Build Coastguard Worker pStatus->location = location;
573*f81fb7c4SAndroid Build Coastguard Worker }
574*f81fb7c4SAndroid Build Coastguard Worker }
575*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
576*f81fb7c4SAndroid Build Coastguard Worker }
577*f81fb7c4SAndroid Build Coastguard Worker
578*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
579*f81fb7c4SAndroid Build Coastguard Worker * JET_GetEvent()
580*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
581*f81fb7c4SAndroid Build Coastguard Worker * Checks for application events
582*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
583*f81fb7c4SAndroid Build Coastguard Worker */
JET_GetEvent(EAS_DATA_HANDLE easHandle,EAS_U32 * pEventRaw,S_JET_EVENT * pEvent)584*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_BOOL JET_GetEvent (EAS_DATA_HANDLE easHandle, EAS_U32 *pEventRaw, S_JET_EVENT *pEvent)
585*f81fb7c4SAndroid Build Coastguard Worker {
586*f81fb7c4SAndroid Build Coastguard Worker EAS_U32 jetEvent;
587*f81fb7c4SAndroid Build Coastguard Worker EAS_BOOL gotEvent;
588*f81fb7c4SAndroid Build Coastguard Worker
589*f81fb7c4SAndroid Build Coastguard Worker /* process event queue */
590*f81fb7c4SAndroid Build Coastguard Worker gotEvent = JET_ReadQueue(easHandle->jetHandle->appEventQueue,
591*f81fb7c4SAndroid Build Coastguard Worker &easHandle->jetHandle->appEventQueueRead,
592*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->appEventQueueWrite,
593*f81fb7c4SAndroid Build Coastguard Worker APP_EVENT_QUEUE_SIZE, &jetEvent);
594*f81fb7c4SAndroid Build Coastguard Worker
595*f81fb7c4SAndroid Build Coastguard Worker if (gotEvent)
596*f81fb7c4SAndroid Build Coastguard Worker {
597*f81fb7c4SAndroid Build Coastguard Worker if (pEventRaw != NULL)
598*f81fb7c4SAndroid Build Coastguard Worker *pEventRaw = jetEvent;
599*f81fb7c4SAndroid Build Coastguard Worker
600*f81fb7c4SAndroid Build Coastguard Worker if (pEvent != NULL)
601*f81fb7c4SAndroid Build Coastguard Worker JET_ParseEvent(jetEvent, pEvent);
602*f81fb7c4SAndroid Build Coastguard Worker }
603*f81fb7c4SAndroid Build Coastguard Worker
604*f81fb7c4SAndroid Build Coastguard Worker return gotEvent;
605*f81fb7c4SAndroid Build Coastguard Worker }
606*f81fb7c4SAndroid Build Coastguard Worker
607*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
608*f81fb7c4SAndroid Build Coastguard Worker * JET_QueueSegment()
609*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
610*f81fb7c4SAndroid Build Coastguard Worker * Queue a segment for playback
611*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
612*f81fb7c4SAndroid Build Coastguard Worker */
JET_QueueSegment(EAS_DATA_HANDLE easHandle,EAS_INT segmentNum,EAS_INT libNum,EAS_INT repeatCount,EAS_INT transpose,EAS_U32 muteFlags,EAS_U8 userID)613*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_QueueSegment (EAS_DATA_HANDLE easHandle, EAS_INT segmentNum, EAS_INT libNum, EAS_INT repeatCount, EAS_INT transpose, EAS_U32 muteFlags, EAS_U8 userID)
614*f81fb7c4SAndroid Build Coastguard Worker {
615*f81fb7c4SAndroid Build Coastguard Worker EAS_FILE_HANDLE fileHandle;
616*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
617*f81fb7c4SAndroid Build Coastguard Worker S_JET_SEGMENT *p;
618*f81fb7c4SAndroid Build Coastguard Worker
619*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_QueueSegment segNum=%d, queue=%d\n", segmentNum, easHandle->jetHandle->queueSegment); */ }
620*f81fb7c4SAndroid Build Coastguard Worker
621*f81fb7c4SAndroid Build Coastguard Worker /* make sure it's a valid segment */
622*f81fb7c4SAndroid Build Coastguard Worker if (segmentNum >= easHandle->jetHandle->numSegments)
623*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_PARAMETER_RANGE;
624*f81fb7c4SAndroid Build Coastguard Worker
625*f81fb7c4SAndroid Build Coastguard Worker /* make sure it's a valid DLS */
626*f81fb7c4SAndroid Build Coastguard Worker if (libNum >= easHandle->jetHandle->numLibraries)
627*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_PARAMETER_RANGE;
628*f81fb7c4SAndroid Build Coastguard Worker
629*f81fb7c4SAndroid Build Coastguard Worker /* check to see if queue is full */
630*f81fb7c4SAndroid Build Coastguard Worker p = &easHandle->jetHandle->segQueue[easHandle->jetHandle->queueSegment];
631*f81fb7c4SAndroid Build Coastguard Worker if (p->streamHandle != NULL)
632*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_QUEUE_IS_FULL;
633*f81fb7c4SAndroid Build Coastguard Worker
634*f81fb7c4SAndroid Build Coastguard Worker /* initialize data */
635*f81fb7c4SAndroid Build Coastguard Worker p->userID = userID;
636*f81fb7c4SAndroid Build Coastguard Worker p->repeatCount = (EAS_I16) repeatCount;
637*f81fb7c4SAndroid Build Coastguard Worker p->transpose = (EAS_I8) transpose;
638*f81fb7c4SAndroid Build Coastguard Worker p->libNum = (EAS_I8) libNum;
639*f81fb7c4SAndroid Build Coastguard Worker p->muteFlags = muteFlags;
640*f81fb7c4SAndroid Build Coastguard Worker p->state = JET_STATE_CLOSED;
641*f81fb7c4SAndroid Build Coastguard Worker
642*f81fb7c4SAndroid Build Coastguard Worker /* open the file */
643*f81fb7c4SAndroid Build Coastguard Worker result = EAS_OpenJETStream(easHandle, easHandle->jetHandle->jetFileHandle, easHandle->jetHandle->segmentOffsets[segmentNum], &p->streamHandle);
644*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
645*f81fb7c4SAndroid Build Coastguard Worker return result;
646*f81fb7c4SAndroid Build Coastguard Worker p->state = JET_STATE_OPEN;
647*f81fb7c4SAndroid Build Coastguard Worker
648*f81fb7c4SAndroid Build Coastguard Worker /* if less than SEG_QUEUE_DEPTH segments queued up, prepare file for playback */
649*f81fb7c4SAndroid Build Coastguard Worker if (++easHandle->jetHandle->numQueuedSegments < SEG_QUEUE_DEPTH)
650*f81fb7c4SAndroid Build Coastguard Worker {
651*f81fb7c4SAndroid Build Coastguard Worker result = JET_PrepareSegment(easHandle, easHandle->jetHandle->queueSegment);
652*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
653*f81fb7c4SAndroid Build Coastguard Worker return result;
654*f81fb7c4SAndroid Build Coastguard Worker }
655*f81fb7c4SAndroid Build Coastguard Worker
656*f81fb7c4SAndroid Build Coastguard Worker /* create duplicate file handle */
657*f81fb7c4SAndroid Build Coastguard Worker result = EAS_HWDupHandle(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &fileHandle);
658*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
659*f81fb7c4SAndroid Build Coastguard Worker return result;
660*f81fb7c4SAndroid Build Coastguard Worker
661*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->jetFileHandle = fileHandle;
662*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->queueSegment = (EAS_U8) JET_NextSegment(easHandle->jetHandle->queueSegment);
663*f81fb7c4SAndroid Build Coastguard Worker return result;
664*f81fb7c4SAndroid Build Coastguard Worker }
665*f81fb7c4SAndroid Build Coastguard Worker
666*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
667*f81fb7c4SAndroid Build Coastguard Worker * JET_Play()
668*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
669*f81fb7c4SAndroid Build Coastguard Worker * Starts playback of the file
670*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
671*f81fb7c4SAndroid Build Coastguard Worker */
JET_Play(EAS_DATA_HANDLE easHandle)672*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_Play (EAS_DATA_HANDLE easHandle)
673*f81fb7c4SAndroid Build Coastguard Worker {
674*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
675*f81fb7c4SAndroid Build Coastguard Worker EAS_INT index;
676*f81fb7c4SAndroid Build Coastguard Worker EAS_INT count = 0;
677*f81fb7c4SAndroid Build Coastguard Worker
678*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_Play\n"); */ }
679*f81fb7c4SAndroid Build Coastguard Worker
680*f81fb7c4SAndroid Build Coastguard Worker /* sanity check */
681*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle->flags & JET_FLAGS_PLAYING)
682*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_NOT_VALID_IN_THIS_STATE;
683*f81fb7c4SAndroid Build Coastguard Worker
684*f81fb7c4SAndroid Build Coastguard Worker /* resume all paused streams */
685*f81fb7c4SAndroid Build Coastguard Worker for (index = 0; index < SEG_QUEUE_DEPTH; index++)
686*f81fb7c4SAndroid Build Coastguard Worker {
687*f81fb7c4SAndroid Build Coastguard Worker if (((index == easHandle->jetHandle->playSegment) && (easHandle->jetHandle->segQueue[index].state == JET_STATE_READY)) ||
688*f81fb7c4SAndroid Build Coastguard Worker (easHandle->jetHandle->segQueue[index].state == JET_STATE_PAUSED))
689*f81fb7c4SAndroid Build Coastguard Worker {
690*f81fb7c4SAndroid Build Coastguard Worker result = JET_StartPlayback(easHandle, index);
691*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
692*f81fb7c4SAndroid Build Coastguard Worker return result;
693*f81fb7c4SAndroid Build Coastguard Worker count++;
694*f81fb7c4SAndroid Build Coastguard Worker }
695*f81fb7c4SAndroid Build Coastguard Worker }
696*f81fb7c4SAndroid Build Coastguard Worker
697*f81fb7c4SAndroid Build Coastguard Worker /* if no streams are playing, return error */
698*f81fb7c4SAndroid Build Coastguard Worker if (!count)
699*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_QUEUE_IS_EMPTY;
700*f81fb7c4SAndroid Build Coastguard Worker
701*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->flags |= JET_FLAGS_PLAYING;
702*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
703*f81fb7c4SAndroid Build Coastguard Worker }
704*f81fb7c4SAndroid Build Coastguard Worker
705*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
706*f81fb7c4SAndroid Build Coastguard Worker * JET_Pause()
707*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
708*f81fb7c4SAndroid Build Coastguard Worker * Pauses playback of the file
709*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
710*f81fb7c4SAndroid Build Coastguard Worker */
JET_Pause(EAS_DATA_HANDLE easHandle)711*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_Pause (EAS_DATA_HANDLE easHandle)
712*f81fb7c4SAndroid Build Coastguard Worker {
713*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result;
714*f81fb7c4SAndroid Build Coastguard Worker EAS_INT index;
715*f81fb7c4SAndroid Build Coastguard Worker EAS_INT count = 0;
716*f81fb7c4SAndroid Build Coastguard Worker
717*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_Pause\n"); */ }
718*f81fb7c4SAndroid Build Coastguard Worker
719*f81fb7c4SAndroid Build Coastguard Worker /* sanity check */
720*f81fb7c4SAndroid Build Coastguard Worker if ((easHandle->jetHandle->flags & JET_FLAGS_PLAYING) == 0)
721*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_NOT_VALID_IN_THIS_STATE;
722*f81fb7c4SAndroid Build Coastguard Worker
723*f81fb7c4SAndroid Build Coastguard Worker /* pause all playing streams */
724*f81fb7c4SAndroid Build Coastguard Worker for (index = 0; index < SEG_QUEUE_DEPTH; index++)
725*f81fb7c4SAndroid Build Coastguard Worker {
726*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle->segQueue[index].state == JET_STATE_PLAYING)
727*f81fb7c4SAndroid Build Coastguard Worker {
728*f81fb7c4SAndroid Build Coastguard Worker result = EAS_Pause(easHandle, easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment].streamHandle);
729*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
730*f81fb7c4SAndroid Build Coastguard Worker return result;
731*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment].state = JET_STATE_PAUSED;
732*f81fb7c4SAndroid Build Coastguard Worker count++;
733*f81fb7c4SAndroid Build Coastguard Worker }
734*f81fb7c4SAndroid Build Coastguard Worker }
735*f81fb7c4SAndroid Build Coastguard Worker
736*f81fb7c4SAndroid Build Coastguard Worker /* if no streams are paused, return error */
737*f81fb7c4SAndroid Build Coastguard Worker if (!count)
738*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_QUEUE_IS_EMPTY;
739*f81fb7c4SAndroid Build Coastguard Worker
740*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->flags &= ~JET_FLAGS_PLAYING;
741*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
742*f81fb7c4SAndroid Build Coastguard Worker }
743*f81fb7c4SAndroid Build Coastguard Worker
744*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
745*f81fb7c4SAndroid Build Coastguard Worker * JET_SetMuteFlags()
746*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
747*f81fb7c4SAndroid Build Coastguard Worker * Change the state of the mute flags
748*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
749*f81fb7c4SAndroid Build Coastguard Worker */
JET_SetMuteFlags(EAS_DATA_HANDLE easHandle,EAS_U32 muteFlags,EAS_BOOL sync)750*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_SetMuteFlags (EAS_DATA_HANDLE easHandle, EAS_U32 muteFlags, EAS_BOOL sync)
751*f81fb7c4SAndroid Build Coastguard Worker {
752*f81fb7c4SAndroid Build Coastguard Worker S_JET_SEGMENT *pSeg;
753*f81fb7c4SAndroid Build Coastguard Worker
754*f81fb7c4SAndroid Build Coastguard Worker /* get pointer to current segment */
755*f81fb7c4SAndroid Build Coastguard Worker pSeg = &easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment];
756*f81fb7c4SAndroid Build Coastguard Worker
757*f81fb7c4SAndroid Build Coastguard Worker /* unsynchronized mute, set flags and return */
758*f81fb7c4SAndroid Build Coastguard Worker if (!sync)
759*f81fb7c4SAndroid Build Coastguard Worker {
760*f81fb7c4SAndroid Build Coastguard Worker if (pSeg->streamHandle == NULL)
761*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_QUEUE_IS_EMPTY;
762*f81fb7c4SAndroid Build Coastguard Worker pSeg->muteFlags = muteFlags;
763*f81fb7c4SAndroid Build Coastguard Worker return EAS_IntSetStrmParam(easHandle, pSeg->streamHandle, PARSER_DATA_MUTE_FLAGS, (EAS_I32) muteFlags);
764*f81fb7c4SAndroid Build Coastguard Worker }
765*f81fb7c4SAndroid Build Coastguard Worker
766*f81fb7c4SAndroid Build Coastguard Worker
767*f81fb7c4SAndroid Build Coastguard Worker /* check for valid stream state */
768*f81fb7c4SAndroid Build Coastguard Worker if (pSeg->state == JET_STATE_CLOSED)
769*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_QUEUE_IS_EMPTY;
770*f81fb7c4SAndroid Build Coastguard Worker
771*f81fb7c4SAndroid Build Coastguard Worker /* save mute flags */
772*f81fb7c4SAndroid Build Coastguard Worker pSeg->muteFlags = muteFlags;
773*f81fb7c4SAndroid Build Coastguard Worker
774*f81fb7c4SAndroid Build Coastguard Worker /* if repeating segment, set mute update flag */
775*f81fb7c4SAndroid Build Coastguard Worker if (sync)
776*f81fb7c4SAndroid Build Coastguard Worker pSeg->flags |= JET_SEG_FLAG_MUTE_UPDATE;
777*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
778*f81fb7c4SAndroid Build Coastguard Worker }
779*f81fb7c4SAndroid Build Coastguard Worker
780*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
781*f81fb7c4SAndroid Build Coastguard Worker * JET_SetMuteFlag()
782*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
783*f81fb7c4SAndroid Build Coastguard Worker * Change the state of a single mute flag
784*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
785*f81fb7c4SAndroid Build Coastguard Worker */
JET_SetMuteFlag(EAS_DATA_HANDLE easHandle,EAS_INT trackNum,EAS_BOOL muteFlag,EAS_BOOL sync)786*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_SetMuteFlag (EAS_DATA_HANDLE easHandle, EAS_INT trackNum, EAS_BOOL muteFlag, EAS_BOOL sync)
787*f81fb7c4SAndroid Build Coastguard Worker {
788*f81fb7c4SAndroid Build Coastguard Worker S_JET_SEGMENT *pSeg;
789*f81fb7c4SAndroid Build Coastguard Worker EAS_U32 trackMuteFlag;
790*f81fb7c4SAndroid Build Coastguard Worker
791*f81fb7c4SAndroid Build Coastguard Worker
792*f81fb7c4SAndroid Build Coastguard Worker /* setup flag */
793*f81fb7c4SAndroid Build Coastguard Worker if ((trackNum < 0) || (trackNum > 31))
794*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_PARAMETER_RANGE;
795*f81fb7c4SAndroid Build Coastguard Worker trackMuteFlag = (1 << trackNum);
796*f81fb7c4SAndroid Build Coastguard Worker
797*f81fb7c4SAndroid Build Coastguard Worker /* get pointer to current segment */
798*f81fb7c4SAndroid Build Coastguard Worker pSeg = &easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment];
799*f81fb7c4SAndroid Build Coastguard Worker
800*f81fb7c4SAndroid Build Coastguard Worker /* unsynchronized mute, set flags and return */
801*f81fb7c4SAndroid Build Coastguard Worker if (!sync)
802*f81fb7c4SAndroid Build Coastguard Worker {
803*f81fb7c4SAndroid Build Coastguard Worker if (pSeg->streamHandle == NULL)
804*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_QUEUE_IS_EMPTY;
805*f81fb7c4SAndroid Build Coastguard Worker if (muteFlag)
806*f81fb7c4SAndroid Build Coastguard Worker pSeg->muteFlags |= trackMuteFlag;
807*f81fb7c4SAndroid Build Coastguard Worker else
808*f81fb7c4SAndroid Build Coastguard Worker pSeg->muteFlags &= ~trackMuteFlag;
809*f81fb7c4SAndroid Build Coastguard Worker return EAS_IntSetStrmParam(easHandle, pSeg->streamHandle, PARSER_DATA_MUTE_FLAGS, (EAS_I32) pSeg->muteFlags);
810*f81fb7c4SAndroid Build Coastguard Worker }
811*f81fb7c4SAndroid Build Coastguard Worker
812*f81fb7c4SAndroid Build Coastguard Worker
813*f81fb7c4SAndroid Build Coastguard Worker /* check for valid stream state */
814*f81fb7c4SAndroid Build Coastguard Worker if (pSeg->state == JET_STATE_CLOSED)
815*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_QUEUE_IS_EMPTY;
816*f81fb7c4SAndroid Build Coastguard Worker
817*f81fb7c4SAndroid Build Coastguard Worker /* save mute flags and set mute update flag */
818*f81fb7c4SAndroid Build Coastguard Worker if (muteFlag)
819*f81fb7c4SAndroid Build Coastguard Worker pSeg->muteFlags |= trackMuteFlag;
820*f81fb7c4SAndroid Build Coastguard Worker else
821*f81fb7c4SAndroid Build Coastguard Worker pSeg->muteFlags &= ~trackMuteFlag;
822*f81fb7c4SAndroid Build Coastguard Worker pSeg->flags |= JET_SEG_FLAG_MUTE_UPDATE;
823*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
824*f81fb7c4SAndroid Build Coastguard Worker }
825*f81fb7c4SAndroid Build Coastguard Worker
826*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
827*f81fb7c4SAndroid Build Coastguard Worker * JET_TriggerClip()
828*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
829*f81fb7c4SAndroid Build Coastguard Worker * Unmute a track and then mute it when it is complete. If a clip
830*f81fb7c4SAndroid Build Coastguard Worker * is already playing, change mute event to a trigger event. The
831*f81fb7c4SAndroid Build Coastguard Worker * JET_Event function will not mute the clip, but will allow it
832*f81fb7c4SAndroid Build Coastguard Worker * to continue playing through the next clip.
833*f81fb7c4SAndroid Build Coastguard Worker *
834*f81fb7c4SAndroid Build Coastguard Worker * NOTE: We use bit 7 to indicate an entry in the queue. For a
835*f81fb7c4SAndroid Build Coastguard Worker * small queue, it is cheaper in both memory and CPU cycles to
836*f81fb7c4SAndroid Build Coastguard Worker * scan the entire queue for non-zero events than keep enqueue
837*f81fb7c4SAndroid Build Coastguard Worker * and dequeue indices.
838*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
839*f81fb7c4SAndroid Build Coastguard Worker */
JET_TriggerClip(EAS_DATA_HANDLE easHandle,EAS_INT clipID)840*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_TriggerClip (EAS_DATA_HANDLE easHandle, EAS_INT clipID)
841*f81fb7c4SAndroid Build Coastguard Worker {
842*f81fb7c4SAndroid Build Coastguard Worker EAS_INT i;
843*f81fb7c4SAndroid Build Coastguard Worker EAS_INT index = -1;
844*f81fb7c4SAndroid Build Coastguard Worker
845*f81fb7c4SAndroid Build Coastguard Worker /* check for valid clipID */
846*f81fb7c4SAndroid Build Coastguard Worker if ((clipID < 0) || (clipID > 63))
847*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_PARAMETER_RANGE;
848*f81fb7c4SAndroid Build Coastguard Worker
849*f81fb7c4SAndroid Build Coastguard Worker /* set active flag */
850*f81fb7c4SAndroid Build Coastguard Worker clipID |= JET_CLIP_ACTIVE_FLAG;
851*f81fb7c4SAndroid Build Coastguard Worker
852*f81fb7c4SAndroid Build Coastguard Worker /* Reverse the search so that we get the first empty element */
853*f81fb7c4SAndroid Build Coastguard Worker for (i = JET_MUTE_QUEUE_SIZE-1; i >= 0 ; i--)
854*f81fb7c4SAndroid Build Coastguard Worker {
855*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle->muteQueue[i] == clipID)
856*f81fb7c4SAndroid Build Coastguard Worker {
857*f81fb7c4SAndroid Build Coastguard Worker index = i;
858*f81fb7c4SAndroid Build Coastguard Worker break;
859*f81fb7c4SAndroid Build Coastguard Worker }
860*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle->muteQueue[i] == 0)
861*f81fb7c4SAndroid Build Coastguard Worker index = i;
862*f81fb7c4SAndroid Build Coastguard Worker }
863*f81fb7c4SAndroid Build Coastguard Worker if (index < 0)
864*f81fb7c4SAndroid Build Coastguard Worker return EAS_ERROR_QUEUE_IS_FULL;
865*f81fb7c4SAndroid Build Coastguard Worker
866*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->muteQueue[index] = (EAS_U8) clipID | JET_CLIP_TRIGGER_FLAG;
867*f81fb7c4SAndroid Build Coastguard Worker return EAS_SUCCESS;
868*f81fb7c4SAndroid Build Coastguard Worker }
869*f81fb7c4SAndroid Build Coastguard Worker
870*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
871*f81fb7c4SAndroid Build Coastguard Worker * JET_Process()
872*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
873*f81fb7c4SAndroid Build Coastguard Worker * Called during EAS_Render to process stream states
874*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
875*f81fb7c4SAndroid Build Coastguard Worker */
JET_Process(EAS_DATA_HANDLE easHandle)876*f81fb7c4SAndroid Build Coastguard Worker EAS_PUBLIC EAS_RESULT JET_Process (EAS_DATA_HANDLE easHandle)
877*f81fb7c4SAndroid Build Coastguard Worker {
878*f81fb7c4SAndroid Build Coastguard Worker S_JET_SEGMENT *pSeg;
879*f81fb7c4SAndroid Build Coastguard Worker EAS_STATE state;
880*f81fb7c4SAndroid Build Coastguard Worker EAS_INT index;
881*f81fb7c4SAndroid Build Coastguard Worker EAS_INT playIndex;
882*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result = EAS_SUCCESS;
883*f81fb7c4SAndroid Build Coastguard Worker EAS_BOOL endOfLoop = EAS_FALSE;
884*f81fb7c4SAndroid Build Coastguard Worker EAS_BOOL startNextSegment = EAS_FALSE;
885*f81fb7c4SAndroid Build Coastguard Worker EAS_BOOL prepareNextSegment = EAS_FALSE;
886*f81fb7c4SAndroid Build Coastguard Worker EAS_U32 jetEvent;
887*f81fb7c4SAndroid Build Coastguard Worker
888*f81fb7c4SAndroid Build Coastguard Worker /* process event queue */
889*f81fb7c4SAndroid Build Coastguard Worker while (JET_ReadQueue(easHandle->jetHandle->jetEventQueue,
890*f81fb7c4SAndroid Build Coastguard Worker &easHandle->jetHandle->jetEventQueueRead,
891*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->jetEventQueueWrite,
892*f81fb7c4SAndroid Build Coastguard Worker JET_EVENT_QUEUE_SIZE, &jetEvent))
893*f81fb7c4SAndroid Build Coastguard Worker {
894*f81fb7c4SAndroid Build Coastguard Worker S_JET_EVENT event;
895*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_JET
896*f81fb7c4SAndroid Build Coastguard Worker JET_DumpEvent("JET_Process", jetEvent);
897*f81fb7c4SAndroid Build Coastguard Worker #endif
898*f81fb7c4SAndroid Build Coastguard Worker JET_ParseEvent(jetEvent, &event);
899*f81fb7c4SAndroid Build Coastguard Worker
900*f81fb7c4SAndroid Build Coastguard Worker /* check for end of loop */
901*f81fb7c4SAndroid Build Coastguard Worker if ((event.controller == JET_EVENT_MARKER) &&
902*f81fb7c4SAndroid Build Coastguard Worker (event.value == JET_MARKER_LOOP_END) &&
903*f81fb7c4SAndroid Build Coastguard Worker (easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment].streamHandle != NULL))
904*f81fb7c4SAndroid Build Coastguard Worker endOfLoop = EAS_TRUE;
905*f81fb7c4SAndroid Build Coastguard Worker }
906*f81fb7c4SAndroid Build Coastguard Worker
907*f81fb7c4SAndroid Build Coastguard Worker /* check state of all streams */
908*f81fb7c4SAndroid Build Coastguard Worker index = playIndex = easHandle->jetHandle->playSegment;
909*f81fb7c4SAndroid Build Coastguard Worker for (;;)
910*f81fb7c4SAndroid Build Coastguard Worker {
911*f81fb7c4SAndroid Build Coastguard Worker pSeg = &easHandle->jetHandle->segQueue[index];
912*f81fb7c4SAndroid Build Coastguard Worker if (pSeg->state != JET_STATE_CLOSED)
913*f81fb7c4SAndroid Build Coastguard Worker {
914*f81fb7c4SAndroid Build Coastguard Worker
915*f81fb7c4SAndroid Build Coastguard Worker /* get playback state */
916*f81fb7c4SAndroid Build Coastguard Worker result = EAS_State(easHandle, pSeg->streamHandle, &state);
917*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
918*f81fb7c4SAndroid Build Coastguard Worker return result;
919*f81fb7c4SAndroid Build Coastguard Worker
920*f81fb7c4SAndroid Build Coastguard Worker /* process state */
921*f81fb7c4SAndroid Build Coastguard Worker switch (pSeg->state)
922*f81fb7c4SAndroid Build Coastguard Worker {
923*f81fb7c4SAndroid Build Coastguard Worker /* take action if this segment is stopping */
924*f81fb7c4SAndroid Build Coastguard Worker case JET_STATE_PLAYING:
925*f81fb7c4SAndroid Build Coastguard Worker if (endOfLoop || (state == EAS_STATE_STOPPING) || (state == EAS_STATE_STOPPED))
926*f81fb7c4SAndroid Build Coastguard Worker {
927*f81fb7c4SAndroid Build Coastguard Worker /* handle repeats */
928*f81fb7c4SAndroid Build Coastguard Worker if (pSeg->repeatCount != 0)
929*f81fb7c4SAndroid Build Coastguard Worker {
930*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_Render repeating segment %d\n", index); */ }
931*f81fb7c4SAndroid Build Coastguard Worker result = EAS_Locate(easHandle, pSeg->streamHandle, 0, EAS_FALSE);
932*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
933*f81fb7c4SAndroid Build Coastguard Worker return result;
934*f81fb7c4SAndroid Build Coastguard Worker if (pSeg->repeatCount > 0)
935*f81fb7c4SAndroid Build Coastguard Worker pSeg->repeatCount--;
936*f81fb7c4SAndroid Build Coastguard Worker
937*f81fb7c4SAndroid Build Coastguard Worker /* update mute flags if necessary */
938*f81fb7c4SAndroid Build Coastguard Worker if (pSeg->flags & JET_SEG_FLAG_MUTE_UPDATE)
939*f81fb7c4SAndroid Build Coastguard Worker {
940*f81fb7c4SAndroid Build Coastguard Worker result = EAS_IntSetStrmParam(easHandle, pSeg->streamHandle, PARSER_DATA_MUTE_FLAGS, (EAS_I32) pSeg->muteFlags);
941*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
942*f81fb7c4SAndroid Build Coastguard Worker return result;
943*f81fb7c4SAndroid Build Coastguard Worker pSeg->flags &= ~JET_SEG_FLAG_MUTE_UPDATE;
944*f81fb7c4SAndroid Build Coastguard Worker }
945*f81fb7c4SAndroid Build Coastguard Worker
946*f81fb7c4SAndroid Build Coastguard Worker }
947*f81fb7c4SAndroid Build Coastguard Worker /* no repeat, start next segment */
948*f81fb7c4SAndroid Build Coastguard Worker else
949*f81fb7c4SAndroid Build Coastguard Worker {
950*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_Render stopping queue %d\n", index); */ }
951*f81fb7c4SAndroid Build Coastguard Worker startNextSegment = EAS_TRUE;
952*f81fb7c4SAndroid Build Coastguard Worker pSeg->state = JET_STATE_STOPPING;
953*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->playSegment = (EAS_U8) JET_NextSegment(index);
954*f81fb7c4SAndroid Build Coastguard Worker }
955*f81fb7c4SAndroid Build Coastguard Worker }
956*f81fb7c4SAndroid Build Coastguard Worker break;
957*f81fb7c4SAndroid Build Coastguard Worker
958*f81fb7c4SAndroid Build Coastguard Worker /* if playback has stopped, close the segment */
959*f81fb7c4SAndroid Build Coastguard Worker case JET_STATE_STOPPING:
960*f81fb7c4SAndroid Build Coastguard Worker if (state == EAS_STATE_STOPPED)
961*f81fb7c4SAndroid Build Coastguard Worker {
962*f81fb7c4SAndroid Build Coastguard Worker result = JET_CloseSegment(easHandle, index);
963*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
964*f81fb7c4SAndroid Build Coastguard Worker return result;
965*f81fb7c4SAndroid Build Coastguard Worker }
966*f81fb7c4SAndroid Build Coastguard Worker break;
967*f81fb7c4SAndroid Build Coastguard Worker
968*f81fb7c4SAndroid Build Coastguard Worker case JET_STATE_READY:
969*f81fb7c4SAndroid Build Coastguard Worker if (startNextSegment)
970*f81fb7c4SAndroid Build Coastguard Worker {
971*f81fb7c4SAndroid Build Coastguard Worker result = JET_StartPlayback(easHandle, index);
972*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
973*f81fb7c4SAndroid Build Coastguard Worker return result;
974*f81fb7c4SAndroid Build Coastguard Worker startNextSegment = EAS_FALSE;
975*f81fb7c4SAndroid Build Coastguard Worker prepareNextSegment = EAS_TRUE;
976*f81fb7c4SAndroid Build Coastguard Worker }
977*f81fb7c4SAndroid Build Coastguard Worker break;
978*f81fb7c4SAndroid Build Coastguard Worker
979*f81fb7c4SAndroid Build Coastguard Worker case JET_STATE_OPEN:
980*f81fb7c4SAndroid Build Coastguard Worker if (prepareNextSegment)
981*f81fb7c4SAndroid Build Coastguard Worker {
982*f81fb7c4SAndroid Build Coastguard Worker result = JET_PrepareSegment(easHandle, index);
983*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
984*f81fb7c4SAndroid Build Coastguard Worker return result;
985*f81fb7c4SAndroid Build Coastguard Worker prepareNextSegment = EAS_FALSE;
986*f81fb7c4SAndroid Build Coastguard Worker }
987*f81fb7c4SAndroid Build Coastguard Worker break;
988*f81fb7c4SAndroid Build Coastguard Worker
989*f81fb7c4SAndroid Build Coastguard Worker case JET_STATE_PAUSED:
990*f81fb7c4SAndroid Build Coastguard Worker break;
991*f81fb7c4SAndroid Build Coastguard Worker
992*f81fb7c4SAndroid Build Coastguard Worker default:
993*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "JET_Render: Unexpected segment state %d\n", pSeg->state); */ }
994*f81fb7c4SAndroid Build Coastguard Worker break;
995*f81fb7c4SAndroid Build Coastguard Worker }
996*f81fb7c4SAndroid Build Coastguard Worker }
997*f81fb7c4SAndroid Build Coastguard Worker
998*f81fb7c4SAndroid Build Coastguard Worker /* increment index */
999*f81fb7c4SAndroid Build Coastguard Worker index = JET_NextSegment(index);
1000*f81fb7c4SAndroid Build Coastguard Worker if (index == playIndex)
1001*f81fb7c4SAndroid Build Coastguard Worker break;
1002*f81fb7c4SAndroid Build Coastguard Worker }
1003*f81fb7c4SAndroid Build Coastguard Worker
1004*f81fb7c4SAndroid Build Coastguard Worker /* if out of segments, clear playing flag */
1005*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle->numQueuedSegments == 0)
1006*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->flags &= ~JET_FLAGS_PLAYING;
1007*f81fb7c4SAndroid Build Coastguard Worker
1008*f81fb7c4SAndroid Build Coastguard Worker return result;
1009*f81fb7c4SAndroid Build Coastguard Worker }
1010*f81fb7c4SAndroid Build Coastguard Worker
1011*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
1012*f81fb7c4SAndroid Build Coastguard Worker * JET_Event()
1013*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
1014*f81fb7c4SAndroid Build Coastguard Worker * Called from MIDI parser when data of interest is received
1015*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
1016*f81fb7c4SAndroid Build Coastguard Worker */
JET_Event(EAS_DATA_HANDLE easHandle,EAS_U32 segTrack,EAS_U8 channel,EAS_U8 controller,EAS_U8 value)1017*f81fb7c4SAndroid Build Coastguard Worker void JET_Event (EAS_DATA_HANDLE easHandle, EAS_U32 segTrack, EAS_U8 channel, EAS_U8 controller, EAS_U8 value)
1018*f81fb7c4SAndroid Build Coastguard Worker {
1019*f81fb7c4SAndroid Build Coastguard Worker EAS_U32 event;
1020*f81fb7c4SAndroid Build Coastguard Worker
1021*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle == NULL)
1022*f81fb7c4SAndroid Build Coastguard Worker return;
1023*f81fb7c4SAndroid Build Coastguard Worker
1024*f81fb7c4SAndroid Build Coastguard Worker /* handle triggers */
1025*f81fb7c4SAndroid Build Coastguard Worker if (controller == JET_EVENT_TRIGGER_CLIP)
1026*f81fb7c4SAndroid Build Coastguard Worker {
1027*f81fb7c4SAndroid Build Coastguard Worker S_JET_SEGMENT *pSeg;
1028*f81fb7c4SAndroid Build Coastguard Worker EAS_INT i;
1029*f81fb7c4SAndroid Build Coastguard Worker EAS_U32 muteFlag;
1030*f81fb7c4SAndroid Build Coastguard Worker
1031*f81fb7c4SAndroid Build Coastguard Worker for (i = 0; i < JET_MUTE_QUEUE_SIZE; i++)
1032*f81fb7c4SAndroid Build Coastguard Worker {
1033*f81fb7c4SAndroid Build Coastguard Worker /* search for event in queue */
1034*f81fb7c4SAndroid Build Coastguard Worker if ((easHandle->jetHandle->muteQueue[i] & JET_CLIP_ID_MASK) == (value & JET_CLIP_ID_MASK))
1035*f81fb7c4SAndroid Build Coastguard Worker {
1036*f81fb7c4SAndroid Build Coastguard Worker /* get segment pointer and mute flag */
1037*f81fb7c4SAndroid Build Coastguard Worker pSeg = &easHandle->jetHandle->segQueue[segTrack >> JET_EVENT_SEG_SHIFT];
1038*f81fb7c4SAndroid Build Coastguard Worker muteFlag = 1 << ((segTrack & JET_EVENT_TRACK_MASK) >> JET_EVENT_TRACK_SHIFT);
1039*f81fb7c4SAndroid Build Coastguard Worker
1040*f81fb7c4SAndroid Build Coastguard Worker /* un-mute the track */
1041*f81fb7c4SAndroid Build Coastguard Worker if ((easHandle->jetHandle->muteQueue[i] & JET_CLIP_TRIGGER_FLAG) && ((value & 0x40) > 0))
1042*f81fb7c4SAndroid Build Coastguard Worker {
1043*f81fb7c4SAndroid Build Coastguard Worker pSeg->muteFlags &= ~muteFlag;
1044*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->muteQueue[i] &= ~JET_CLIP_TRIGGER_FLAG;
1045*f81fb7c4SAndroid Build Coastguard Worker }
1046*f81fb7c4SAndroid Build Coastguard Worker
1047*f81fb7c4SAndroid Build Coastguard Worker /* mute the track */
1048*f81fb7c4SAndroid Build Coastguard Worker else
1049*f81fb7c4SAndroid Build Coastguard Worker {
1050*f81fb7c4SAndroid Build Coastguard Worker EAS_U32 beforeMute ;
1051*f81fb7c4SAndroid Build Coastguard Worker beforeMute = pSeg->muteFlags ;
1052*f81fb7c4SAndroid Build Coastguard Worker pSeg->muteFlags |= muteFlag;
1053*f81fb7c4SAndroid Build Coastguard Worker if (beforeMute != pSeg->muteFlags)
1054*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->muteQueue[i] = 0;
1055*f81fb7c4SAndroid Build Coastguard Worker }
1056*f81fb7c4SAndroid Build Coastguard Worker EAS_IntSetStrmParam(easHandle, pSeg->streamHandle, PARSER_DATA_MUTE_FLAGS, (EAS_I32) pSeg->muteFlags);
1057*f81fb7c4SAndroid Build Coastguard Worker return;
1058*f81fb7c4SAndroid Build Coastguard Worker }
1059*f81fb7c4SAndroid Build Coastguard Worker }
1060*f81fb7c4SAndroid Build Coastguard Worker return;
1061*f81fb7c4SAndroid Build Coastguard Worker }
1062*f81fb7c4SAndroid Build Coastguard Worker
1063*f81fb7c4SAndroid Build Coastguard Worker /* generic event stuff */
1064*f81fb7c4SAndroid Build Coastguard Worker event = (channel << JET_EVENT_CHAN_SHIFT) | (controller << JET_EVENT_CTRL_SHIFT) | value;
1065*f81fb7c4SAndroid Build Coastguard Worker
1066*f81fb7c4SAndroid Build Coastguard Worker /* write to app queue, translate queue index to segment number */
1067*f81fb7c4SAndroid Build Coastguard Worker if ((controller >= easHandle->jetHandle->config.appEventRangeLow) && (controller <= easHandle->jetHandle->config.appEventRangeHigh))
1068*f81fb7c4SAndroid Build Coastguard Worker {
1069*f81fb7c4SAndroid Build Coastguard Worker
1070*f81fb7c4SAndroid Build Coastguard Worker event |= easHandle->jetHandle->segQueue[(segTrack & JET_EVENT_SEG_MASK) >> JET_EVENT_SEG_SHIFT].userID << JET_EVENT_SEG_SHIFT;
1071*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_JET
1072*f81fb7c4SAndroid Build Coastguard Worker JET_DumpEvent("JET_Event[app]", event);
1073*f81fb7c4SAndroid Build Coastguard Worker #endif
1074*f81fb7c4SAndroid Build Coastguard Worker JET_WriteQueue(easHandle->jetHandle->appEventQueue,
1075*f81fb7c4SAndroid Build Coastguard Worker &easHandle->jetHandle->appEventQueueWrite,
1076*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->appEventQueueRead,
1077*f81fb7c4SAndroid Build Coastguard Worker APP_EVENT_QUEUE_SIZE,
1078*f81fb7c4SAndroid Build Coastguard Worker event);
1079*f81fb7c4SAndroid Build Coastguard Worker }
1080*f81fb7c4SAndroid Build Coastguard Worker
1081*f81fb7c4SAndroid Build Coastguard Worker /* write to JET queue */
1082*f81fb7c4SAndroid Build Coastguard Worker else if ((controller >= JET_EVENT_LOW) && (controller <= JET_EVENT_HIGH))
1083*f81fb7c4SAndroid Build Coastguard Worker {
1084*f81fb7c4SAndroid Build Coastguard Worker event |= segTrack;
1085*f81fb7c4SAndroid Build Coastguard Worker #ifdef DEBUG_JET
1086*f81fb7c4SAndroid Build Coastguard Worker JET_DumpEvent("JET_Event[jet]", event);
1087*f81fb7c4SAndroid Build Coastguard Worker #endif
1088*f81fb7c4SAndroid Build Coastguard Worker JET_WriteQueue(easHandle->jetHandle->jetEventQueue,
1089*f81fb7c4SAndroid Build Coastguard Worker &easHandle->jetHandle->jetEventQueueWrite,
1090*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->jetEventQueueRead,
1091*f81fb7c4SAndroid Build Coastguard Worker JET_EVENT_QUEUE_SIZE,
1092*f81fb7c4SAndroid Build Coastguard Worker event);
1093*f81fb7c4SAndroid Build Coastguard Worker }
1094*f81fb7c4SAndroid Build Coastguard Worker }
1095*f81fb7c4SAndroid Build Coastguard Worker
1096*f81fb7c4SAndroid Build Coastguard Worker /*----------------------------------------------------------------------------
1097*f81fb7c4SAndroid Build Coastguard Worker * JET_Clear_Queue()
1098*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
1099*f81fb7c4SAndroid Build Coastguard Worker * Clears the queue and stops play without a complete shutdown
1100*f81fb7c4SAndroid Build Coastguard Worker *----------------------------------------------------------------------------
1101*f81fb7c4SAndroid Build Coastguard Worker */
JET_Clear_Queue(EAS_DATA_HANDLE easHandle)1102*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT JET_Clear_Queue(EAS_DATA_HANDLE easHandle)
1103*f81fb7c4SAndroid Build Coastguard Worker {
1104*f81fb7c4SAndroid Build Coastguard Worker EAS_INT index;
1105*f81fb7c4SAndroid Build Coastguard Worker EAS_RESULT result = EAS_SUCCESS;
1106*f81fb7c4SAndroid Build Coastguard Worker
1107*f81fb7c4SAndroid Build Coastguard Worker { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_Clear_Queue\n"); */ }
1108*f81fb7c4SAndroid Build Coastguard Worker
1109*f81fb7c4SAndroid Build Coastguard Worker /* pause all playing streams */
1110*f81fb7c4SAndroid Build Coastguard Worker for (index = 0; index < SEG_QUEUE_DEPTH; index++)
1111*f81fb7c4SAndroid Build Coastguard Worker {
1112*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle->segQueue[index].state == JET_STATE_PLAYING)
1113*f81fb7c4SAndroid Build Coastguard Worker {
1114*f81fb7c4SAndroid Build Coastguard Worker result = EAS_Pause(easHandle, easHandle->jetHandle->segQueue[index].streamHandle);
1115*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
1116*f81fb7c4SAndroid Build Coastguard Worker return result;
1117*f81fb7c4SAndroid Build Coastguard Worker
1118*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->segQueue[index].state = JET_STATE_PAUSED;
1119*f81fb7c4SAndroid Build Coastguard Worker }
1120*f81fb7c4SAndroid Build Coastguard Worker }
1121*f81fb7c4SAndroid Build Coastguard Worker
1122*f81fb7c4SAndroid Build Coastguard Worker /* close all streams */
1123*f81fb7c4SAndroid Build Coastguard Worker for (index = 0; index < SEG_QUEUE_DEPTH; index++)
1124*f81fb7c4SAndroid Build Coastguard Worker {
1125*f81fb7c4SAndroid Build Coastguard Worker if (easHandle->jetHandle->segQueue[index].streamHandle != NULL)
1126*f81fb7c4SAndroid Build Coastguard Worker {
1127*f81fb7c4SAndroid Build Coastguard Worker result = JET_CloseSegment(easHandle, index);
1128*f81fb7c4SAndroid Build Coastguard Worker if (result != EAS_SUCCESS)
1129*f81fb7c4SAndroid Build Coastguard Worker return result;
1130*f81fb7c4SAndroid Build Coastguard Worker }
1131*f81fb7c4SAndroid Build Coastguard Worker }
1132*f81fb7c4SAndroid Build Coastguard Worker
1133*f81fb7c4SAndroid Build Coastguard Worker /* clear all clips */
1134*f81fb7c4SAndroid Build Coastguard Worker for (index = 0; index < JET_MUTE_QUEUE_SIZE ; index++)
1135*f81fb7c4SAndroid Build Coastguard Worker {
1136*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->muteQueue[index] = 0;
1137*f81fb7c4SAndroid Build Coastguard Worker }
1138*f81fb7c4SAndroid Build Coastguard Worker
1139*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->flags &= ~JET_FLAGS_PLAYING;
1140*f81fb7c4SAndroid Build Coastguard Worker easHandle->jetHandle->playSegment = easHandle->jetHandle->queueSegment = 0;
1141*f81fb7c4SAndroid Build Coastguard Worker return result;
1142*f81fb7c4SAndroid Build Coastguard Worker }
1143*f81fb7c4SAndroid Build Coastguard Worker
1144