156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File:
456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * jet.c
556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Contents and purpose:
756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Implementation for JET sound engine
856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Copyright (c) 2006 Sonic Network Inc.
1056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
1156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Licensed under the Apache License, Version 2.0 (the "License");
1256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * you may not use this file except in compliance with the License.
1356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * You may obtain a copy of the License at
1456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
1556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *      http://www.apache.org/licenses/LICENSE-2.0
1656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
1756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Unless required by applicable law or agreed to in writing, software
1856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * distributed under the License is distributed on an "AS IS" BASIS,
1956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
2056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * See the License for the specific language governing permissions and
2156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * limitations under the License.
2256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
2356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Revision Control:
2456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *   $Revision: 563 $
2556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *   $Date: 2007-02-13 20:26:23 -0800 (Tue, 13 Feb 2007) $
2656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
2756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
2856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
2956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks//#define LOG_NDEBUG 0
3056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define LOG_TAG "JET_C"
3156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks//#define DEBUG_JET
3356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
3456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_data.h"
3556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_smf.h"
3656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "jet_data.h"
3756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_host.h"
3856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#include "eas_report.h"
3956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* default configuration */
4256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic const S_JET_CONFIG jetDefaultConfig =
4356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
4456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    JET_EVENT_APP_LOW,
4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    JET_EVENT_APP_HIGH
4656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks};
4756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
4856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/* function prototypes */
4956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksextern EAS_RESULT EAS_IntSetStrmParam (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_INT param, EAS_I32 value);
5056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksextern EAS_RESULT EAS_OpenJETStream (EAS_DATA_HANDLE pEASData, EAS_FILE_HANDLE fileHandle, EAS_I32 offset, EAS_HANDLE *ppStream);
5156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksextern EAS_RESULT DLSParser (EAS_HW_DATA_HANDLE hwInstData, EAS_FILE_HANDLE fileHandle, EAS_I32 offset, EAS_DLSLIB_HANDLE *ppDLS);
5256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
5456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_ParseEvent()
5556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
5656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns current status
5756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
5856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
5956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC void JET_ParseEvent (EAS_U32 event, S_JET_EVENT *pEvent)
6056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
6156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pEvent->segment = (EAS_U8) ((event & JET_EVENT_SEG_MASK) >> JET_EVENT_SEG_SHIFT);
6256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pEvent->track = (EAS_U8) ((event & JET_EVENT_TRACK_MASK) >> JET_EVENT_TRACK_SHIFT);
6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pEvent->channel = (EAS_U8) ((event & JET_EVENT_CHAN_MASK) >> JET_EVENT_CHAN_SHIFT);
6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pEvent->controller = (EAS_U8) ((event & JET_EVENT_CTRL_MASK) >> JET_EVENT_CTRL_SHIFT);
6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pEvent->value = (EAS_U8) (event & JET_EVENT_VAL_MASK);
6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_JET
6956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_DumpEvent
7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Advances queue read/write index
7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
7456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic void JET_DumpEvent (const char *procName, EAS_U32 event)
7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_JET_EVENT sEvent;
7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    JET_ParseEvent(event, &sEvent);
7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "%s: SegID=%d, TrkID=%d, channel=%d, ctrl=%d, val=%d\n",
8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        procName, sEvent.segment, sEvent.track, sEvent.channel, sEvent.controller, sEvent.value); */ }
8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_IncQueueIndex
8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Advances queue read/write index
8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_INLINE EAS_U8 JET_IncQueueIndex (EAS_U8 index, EAS_U8 queueSize)
9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (++index == queueSize)
9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        index = 0;
9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return index;
9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_WriteQueue
9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Save event to queue
10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_INLINE void JET_WriteQueue (EAS_U32 *pEventQueue, EAS_U8 *pWriteIndex, EAS_U8 readIndex, EAS_U8 queueSize, EAS_U32 event)
10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8 temp;
10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for queue overflow */
10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    temp = JET_IncQueueIndex(*pWriteIndex, queueSize);
10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (temp == readIndex)
11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "JET_Event: Event queue overflow --- event ignored!\n"); */ }
11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return;
11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* save in queue and advance write index */
11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pEventQueue[*pWriteIndex] = event;
11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pWriteIndex = temp;
11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_ReadQueue
12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Read event to queue
12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_INLINE EAS_BOOL JET_ReadQueue (EAS_U32 *pEventQueue, EAS_U8 *pReadIndex, EAS_U8 writeIndex, EAS_U8 queueSize, EAS_U32 *pEvent)
12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for empty queue */
13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (*pReadIndex == writeIndex)
13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FALSE;
13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* save in queue and advance write index */
13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pEvent = pEventQueue[*pReadIndex];
13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pReadIndex = JET_IncQueueIndex(*pReadIndex, queueSize);
13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_TRUE;
13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_NextSegment
14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Advances segment number
14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_INLINE EAS_INT JET_NextSegment (EAS_INT seg_num)
14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (++seg_num == SEG_QUEUE_DEPTH)
14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        seg_num = 0;
14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return seg_num;
15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_PrepareSegment()
15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Prepare a segment for playback
15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT JET_PrepareSegment (EAS_DATA_HANDLE easHandle, EAS_I32 queueNum)
15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_JET_SEGMENT *p;
16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_PrepareSegment: %d\n", queueNum); */ }
16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p = &easHandle->jetHandle->segQueue[queueNum];
16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    result = EAS_Prepare(easHandle, p->streamHandle);
16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (result != EAS_SUCCESS)
16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* pause segment - must be triggered by play or end of previous segment */
17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    result = EAS_Pause(easHandle, p->streamHandle);
17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (result != EAS_SUCCESS)
17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p->state = JET_STATE_READY;
17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* set calback data */
17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    result = EAS_IntSetStrmParam(easHandle, p->streamHandle, PARSER_DATA_JET_CB, queueNum);
17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (result != EAS_SUCCESS)
17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* set DLS collection */
18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (p->libNum >= 0)
18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        result = EAS_IntSetStrmParam(easHandle, p->streamHandle,
18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            PARSER_DATA_DLS_COLLECTION, (EAS_I32) easHandle->jetHandle->libHandles[p->libNum]);
18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (result != EAS_SUCCESS)
18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return result;
18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* set transposition */
19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (p->transpose)
19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        result = EAS_SetTransposition(easHandle, p->streamHandle, p->transpose);
19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (result != EAS_SUCCESS)
19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return result;
19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return result;
19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_StartPlayback()
20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Start segment playback
20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT JET_StartPlayback (EAS_DATA_HANDLE easHandle, EAS_I32 queueNum)
20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result = EAS_SUCCESS;
21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_JET_SEGMENT *pSeg;
21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_StartPlayback %d\n", queueNum); */ }
21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* if next segment is queued, start playback */
21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pSeg = &easHandle->jetHandle->segQueue[queueNum];
21656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (pSeg->streamHandle != NULL)
21756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
21856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        result = EAS_Resume(easHandle, pSeg->streamHandle);
21956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        easHandle->jetHandle->segQueue[queueNum].state = JET_STATE_PLAYING;
22056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* set mute flags */
22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if ((result == EAS_SUCCESS) && (pSeg->muteFlags != 0))
22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            result = EAS_IntSetStrmParam(easHandle, pSeg->streamHandle, PARSER_DATA_MUTE_FLAGS, (EAS_I32) pSeg->muteFlags);
22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return result;
22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_CloseSegment
23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Closes stream associated with a segment
23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_INLINE EAS_INT JET_CloseSegment (EAS_DATA_HANDLE easHandle, EAS_INT queueNum)
23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_CloseSegment %d\n", queueNum); */ }
23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* close the segment */
24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    result = EAS_CloseFile(easHandle, easHandle->jetHandle->segQueue[queueNum].streamHandle);
24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (result != EAS_SUCCESS)
24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle->segQueue[queueNum].streamHandle = NULL;
24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle->segQueue[queueNum].state = JET_STATE_CLOSED;
24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle->numQueuedSegments--;
24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return result;
24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JetParseInfoChunk()
25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Parses the JET info chunk
25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksstatic EAS_RESULT JetParseInfoChunk (EAS_DATA_HANDLE easHandle, EAS_I32 pos, EAS_I32 chunkSize)
25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U32 infoType;
26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U32 temp;
26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* offset to data */
26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    result = EAS_HWFileSeek(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, pos);
26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (result != EAS_SUCCESS)
26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* read the entire chunk */
26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    result = EAS_SUCCESS;
27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    while ((result == EAS_SUCCESS) && (chunkSize > 0))
27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* get info infoType */
27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &infoType, EAS_TRUE);
27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (result != EAS_SUCCESS)
27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* get info field */
27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &temp, EAS_FALSE);
28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (result == EAS_SUCCESS)
28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        switch (infoType)
28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case INFO_NUM_SMF_CHUNKS:
2858a9f53ee2c661e8b5b94d6e9fbb8af3baa34310dMarco Nelissen                if (temp >= JET_MAX_SEGMENTS) {
2868a9f53ee2c661e8b5b94d6e9fbb8af3baa34310dMarco Nelissen                    return EAS_ERROR_INCOMPATIBLE_VERSION;
2878a9f53ee2c661e8b5b94d6e9fbb8af3baa34310dMarco Nelissen                }
28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                easHandle->jetHandle->numSegments = (EAS_U8) temp;
28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case INFO_NUM_DLS_CHUNKS:
2928a9f53ee2c661e8b5b94d6e9fbb8af3baa34310dMarco Nelissen                if (temp >= JET_MAX_DLS_COLLECTIONS) {
2938a9f53ee2c661e8b5b94d6e9fbb8af3baa34310dMarco Nelissen                    return EAS_ERROR_INCOMPATIBLE_VERSION;
2948a9f53ee2c661e8b5b94d6e9fbb8af3baa34310dMarco Nelissen                }
29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                easHandle->jetHandle->numLibraries = (EAS_U8) temp;
29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case INFO_JET_VERSION:
29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                /* check major version number */
30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if ((temp & 0xff000000) != (JET_VERSION & 0xff000000))
30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    return EAS_ERROR_INCOMPATIBLE_VERSION;
30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            default:
30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Ignoring unrecognized JET info type 0x%08x", infoType); */ }
30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        chunkSize -= 8;
31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* allocate pointers for chunks to follow */
31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return result;
31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_OpenFile()
31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Opens a JET content file for playback
32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT JET_OpenFile (EAS_DATA_HANDLE easHandle, EAS_FILE_LOCATOR locator)
32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U32 chunkType;
32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 pos;
32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 chunkSize;
32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT smfChunkNum;
33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT dlsChunkNum;
33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_I32 dataSize = 0; /* make lint happy */
33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure that we don't have an open file */
33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (easHandle->jetHandle->jetFileHandle != NULL)
33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_FILE_ALREADY_OPEN;
33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* open the media file */
33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    result = EAS_HWOpenFile(easHandle->hwInstData, locator, &easHandle->jetHandle->jetFileHandle, EAS_FILE_READ);
33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (result != EAS_SUCCESS)
34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check header */
34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &chunkType, EAS_TRUE);
34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (result == EAS_SUCCESS)
34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (chunkType != JET_HEADER_TAG)
34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "File is not JET format\n"); */ }
34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            result = EAS_ERROR_UNRECOGNIZED_FORMAT;
35056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
35156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
35256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* get the file data size */
35356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (result == EAS_SUCCESS)
35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &dataSize, EAS_FALSE);
35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
35656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* parse through the file to find contents */
35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    smfChunkNum = dlsChunkNum = 0;
35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pos = chunkSize = 8;
35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    while ((result == EAS_SUCCESS) && (pos < dataSize))
36056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
36156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* offset to chunk data */
36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        result = EAS_HWFileSeek(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, pos);
36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (result != EAS_SUCCESS)
36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* get chunk size and type */
36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &chunkType, EAS_TRUE);
36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (result != EAS_SUCCESS)
37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        result = EAS_HWGetDWord(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &chunkSize, EAS_FALSE);
37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (result != EAS_SUCCESS)
37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pos += 8;
37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        switch (chunkType)
37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case JET_INFO_CHUNK:
38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                result = JetParseInfoChunk(easHandle, pos, chunkSize);
38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case JET_SMF_CHUNK:
38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if (smfChunkNum < easHandle->jetHandle->numSegments)
38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    easHandle->jetHandle->segmentOffsets[smfChunkNum++] = pos;
38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                else
38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Ignoring extraneous SMF chunk"); */ }
38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case JET_DLS_CHUNK:
39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if (dlsChunkNum < easHandle->jetHandle->numLibraries)
39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    result = DLSParser(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, pos, &easHandle->jetHandle->libHandles[dlsChunkNum++]);
39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                else
39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Ignoring extraneous DLS chunk"); */ }
39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
39656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
39756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case JET_APP_DATA_CHUNK:
39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                easHandle->jetHandle->appDataOffset = pos;
39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                easHandle->jetHandle->appDataSize = chunkSize;
40056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
40156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            case INFO_JET_COPYRIGHT:
40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            default:
40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Ignoring unrecognized JET chunk type 0x%08x", chunkType); */ }
40756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
40856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
40956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
41056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* offset to next chunk */
41156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pos += chunkSize;
41256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
41356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
41456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* close file if something went wrong */
41556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (result != EAS_SUCCESS)
41656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        EAS_HWCloseFile(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle);
41756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
41856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return result;
41956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
42056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
42156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
42256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_GetAppData()
42356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
42456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns location and size of application data in the JET file
42556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
42656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
42756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT JET_GetAppData (EAS_DATA_HANDLE easHandle, EAS_I32 *pAppDataOffset, EAS_I32 *pAppDataSize)
42856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
42956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
43056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for app chunk */
43156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (easHandle->jetHandle->appDataSize == 0)
43256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
43356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        *pAppDataOffset = *pAppDataSize = 0;
43456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_FAILURE;
43556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
43656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
43756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* return app data */
43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pAppDataOffset = easHandle->jetHandle->appDataOffset;
43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    *pAppDataSize = easHandle->jetHandle->appDataSize;
44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
44156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
44256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
44356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_CloseFile()
44556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
44656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Closes a JET content file and releases associated resources
44756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
44856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
44956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT JET_CloseFile (EAS_DATA_HANDLE easHandle)
45056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
45156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT index;
45256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result = EAS_SUCCESS;
45356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
45456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* close open streams */
45556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (index = 0; index < SEG_QUEUE_DEPTH; index++)
45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
45756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (easHandle->jetHandle->segQueue[index].streamHandle != NULL)
45856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
45956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            result = JET_CloseSegment(easHandle, index);
46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (result != EAS_SUCCESS)
46156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                break;
46256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
46356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
46456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
46556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* close the main file handle */
46656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((result == EAS_SUCCESS) && (easHandle->jetHandle->jetFileHandle != NULL))
46756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
46856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        result = EAS_HWCloseFile(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle);
46956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (result == EAS_SUCCESS)
47056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            easHandle->jetHandle->jetFileHandle = NULL;
47156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
47256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return result;
47356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
47456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
47556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
47656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_Init()
47756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
47856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Initializes the JET library, allocates memory, etc. Call
47956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_Shutdown to de-allocate memory.
48056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
48156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
48256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT JET_Init (EAS_DATA_HANDLE easHandle, const S_JET_CONFIG *pConfig, EAS_INT configSize)
48356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
48456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_JET_DATA *pJet;
48556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U8 flags = 0;
48656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
48756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* sanity check */
48856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (easHandle == NULL)
48956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_HANDLE_INTEGRITY;
49056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (easHandle->jetHandle != NULL)
49156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_FEATURE_ALREADY_ACTIVE;
49256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (pConfig == NULL)
49356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pConfig = &jetDefaultConfig;
49456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
49556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* allocate the JET data object */
49656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pJet = EAS_HWMalloc(easHandle->hwInstData, sizeof(S_JET_DATA));
49756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (pJet == NULL)
49856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_MALLOC_FAILED;
49956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
50056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* initialize JET data structure */
50156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HWMemSet(pJet, 0, sizeof(S_JET_DATA));
50256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle = pJet;
50356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pJet->flags = flags;
50456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
50556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* copy config data */
50656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (configSize > (EAS_INT) sizeof(S_JET_CONFIG))
50756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        configSize = sizeof(S_JET_CONFIG);
50856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HWMemCpy(&pJet->config, pConfig, configSize);
50956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
51056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
51156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
51256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
51356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_Shutdown()
51456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
51556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Frees any memory used by the JET library
51656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
51756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
51856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT JET_Shutdown (EAS_DATA_HANDLE easHandle)
51956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
52056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
52156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
52256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* close any open files */
52356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    result = JET_CloseFile(easHandle);
52456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
52556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* free allocated data */
52656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_HWFree(easHandle->hwInstData, easHandle->jetHandle);
52756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle = NULL;
52856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return result;
52956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
53056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
53156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
53256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_Status()
53356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
53456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns current status
53556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
53656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
53756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT JET_Status (EAS_DATA_HANDLE easHandle, S_JET_STATUS *pStatus)
53856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
53956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_JET_SEGMENT *pSeg;
54056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
54156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pSeg = &easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment];
54256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (pSeg->streamHandle != NULL)
54356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
54456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pStatus->currentUserID = pSeg->userID;
54556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pStatus->segmentRepeatCount = pSeg->repeatCount;
54656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
54756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    else
54856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
54956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pStatus->currentUserID = -1;
55056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pStatus->segmentRepeatCount = 0;
55156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
55256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
55356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pStatus->paused = !(easHandle->jetHandle->flags & JET_FLAGS_PLAYING);
55456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pStatus->numQueuedSegments = easHandle->jetHandle->numQueuedSegments;
55556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pStatus->currentPlayingSegment = easHandle->jetHandle->playSegment;
55656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pStatus->currentQueuedSegment = easHandle->jetHandle->queueSegment;
55756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (pSeg->streamHandle != NULL)
55856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
55956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        EAS_RESULT result;
56056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        EAS_I32 location ;
56156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if ((result = EAS_GetLocation(easHandle, pSeg->streamHandle, &location)) == EAS_SUCCESS)
56256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if(location != 0)
56356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
56456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                pStatus->location = location;
56556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
56656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
56756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
56856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
56956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
57056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
57156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_GetEvent()
57256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
57356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Checks for application events
57456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
57556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
57656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_BOOL JET_GetEvent (EAS_DATA_HANDLE easHandle, EAS_U32 *pEventRaw, S_JET_EVENT *pEvent)
57756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
57856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U32 jetEvent;
57956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_BOOL gotEvent;
58056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
58156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* process event queue */
58256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    gotEvent = JET_ReadQueue(easHandle->jetHandle->appEventQueue,
58356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        &easHandle->jetHandle->appEventQueueRead,
58456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        easHandle->jetHandle->appEventQueueWrite,
58556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        APP_EVENT_QUEUE_SIZE, &jetEvent);
58656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
58756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (gotEvent)
58856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
58956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (pEventRaw != NULL)
59056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            *pEventRaw = jetEvent;
59156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
59256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (pEvent != NULL)
59356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            JET_ParseEvent(jetEvent, pEvent);
59456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
59556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
59656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return gotEvent;
59756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
59856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
59956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
60056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_QueueSegment()
60156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
60256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Queue a segment for playback
60356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
60456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
60556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_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)
60656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
60756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_FILE_HANDLE fileHandle;
60856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
60956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_JET_SEGMENT *p;
61056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
61156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_QueueSegment segNum=%d, queue=%d\n", segmentNum, easHandle->jetHandle->queueSegment); */ }
61256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
61356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure it's a valid segment */
61456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (segmentNum >= easHandle->jetHandle->numSegments)
61556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_PARAMETER_RANGE;
61656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
61756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* make sure it's a valid DLS */
61856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (libNum >= easHandle->jetHandle->numLibraries)
61956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_PARAMETER_RANGE;
62056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
62156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check to see if queue is full */
62256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p = &easHandle->jetHandle->segQueue[easHandle->jetHandle->queueSegment];
62356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (p->streamHandle != NULL)
62456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_QUEUE_IS_FULL;
62556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
62656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* initialize data */
62756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p->userID = userID;
62856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p->repeatCount = (EAS_I16) repeatCount;
62956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p->transpose = (EAS_I8) transpose;
63056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p->libNum = (EAS_I8) libNum;
63156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p->muteFlags = muteFlags;
63256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p->state = JET_STATE_CLOSED;
63356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
63456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* open the file */
63556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    result = EAS_OpenJETStream(easHandle, easHandle->jetHandle->jetFileHandle, easHandle->jetHandle->segmentOffsets[segmentNum], &p->streamHandle);
63656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (result != EAS_SUCCESS)
63756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
63856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    p->state = JET_STATE_OPEN;
63956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
64056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* if less than SEG_QUEUE_DEPTH segments queued up, prepare file for playback */
64156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (++easHandle->jetHandle->numQueuedSegments < SEG_QUEUE_DEPTH)
64256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
64356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        result = JET_PrepareSegment(easHandle, easHandle->jetHandle->queueSegment);
64456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (result != EAS_SUCCESS)
64556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return result;
64656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
64756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
64856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* create duplicate file handle */
64956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    result = EAS_HWDupHandle(easHandle->hwInstData, easHandle->jetHandle->jetFileHandle, &fileHandle);
65056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (result != EAS_SUCCESS)
65156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return result;
65256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
65356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle->jetFileHandle = fileHandle;
65456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle->queueSegment = (EAS_U8) JET_NextSegment(easHandle->jetHandle->queueSegment);
65556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return result;
65656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
65756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
65856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
65956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_Play()
66056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
66156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Starts playback of the file
66256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
66356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
66456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT JET_Play (EAS_DATA_HANDLE easHandle)
66556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
66656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
66756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT index;
66856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT count = 0;
66956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
67056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_Play\n"); */ }
67156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
67256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* sanity check */
67356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (easHandle->jetHandle->flags & JET_FLAGS_PLAYING)
67456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_NOT_VALID_IN_THIS_STATE;
67556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
67656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* resume all paused streams */
67756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (index = 0; index < SEG_QUEUE_DEPTH; index++)
67856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
67956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (((index == easHandle->jetHandle->playSegment) && (easHandle->jetHandle->segQueue[index].state == JET_STATE_READY)) ||
68056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            (easHandle->jetHandle->segQueue[index].state == JET_STATE_PAUSED))
68156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
68256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            result = JET_StartPlayback(easHandle, index);
68356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (result != EAS_SUCCESS)
68456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return result;
68556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            count++;
68656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
68756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
68856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
68956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* if no streams are playing, return error */
69056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (!count)
69156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_QUEUE_IS_EMPTY;
69256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
69356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle->flags |= JET_FLAGS_PLAYING;
69456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
69556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
69656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
69756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
69856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_Pause()
69956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
70056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Pauses playback of the file
70156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
70256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
70356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT JET_Pause (EAS_DATA_HANDLE easHandle)
70456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
70556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result;
70656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT index;
70756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT count = 0;
70856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
70956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_Pause\n"); */ }
71056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
71156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* sanity check */
71256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((easHandle->jetHandle->flags & JET_FLAGS_PLAYING) == 0)
71356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_NOT_VALID_IN_THIS_STATE;
71456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
71556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* pause all playing streams */
71656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (index = 0; index < SEG_QUEUE_DEPTH; index++)
71756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
71856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (easHandle->jetHandle->segQueue[index].state == JET_STATE_PLAYING)
71956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
72056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            result = EAS_Pause(easHandle, easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment].streamHandle);
72156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (result != EAS_SUCCESS)
72256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return result;
72356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment].state = JET_STATE_PAUSED;
72456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            count++;
72556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
72656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
72756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
72856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* if no streams are paused, return error */
72956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (!count)
73056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_QUEUE_IS_EMPTY;
73156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
73256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle->flags &= ~JET_FLAGS_PLAYING;
73356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
73456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
73556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
73656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
73756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_SetMuteFlags()
73856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
73956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Change the state of the mute flags
74056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
74156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
74256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT JET_SetMuteFlags (EAS_DATA_HANDLE easHandle, EAS_U32 muteFlags, EAS_BOOL sync)
74356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
74456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_JET_SEGMENT *pSeg;
74556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
74656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* get pointer to current segment */
74756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pSeg = &easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment];
74856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
74956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* unsynchronized mute, set flags and return */
75056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (!sync)
75156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
75256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (pSeg->streamHandle == NULL)
75356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_ERROR_QUEUE_IS_EMPTY;
75456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pSeg->muteFlags = muteFlags;
75556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_IntSetStrmParam(easHandle, pSeg->streamHandle, PARSER_DATA_MUTE_FLAGS, (EAS_I32) muteFlags);
75656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
75756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
75856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
75956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for valid stream state */
76056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (pSeg->state == JET_STATE_CLOSED)
76156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_QUEUE_IS_EMPTY;
76256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
76356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* save mute flags */
76456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pSeg->muteFlags = muteFlags;
76556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
76656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* if repeating segment, set mute update flag */
76756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (sync)
76856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pSeg->flags |= JET_SEG_FLAG_MUTE_UPDATE;
76956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
77056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
77156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
77256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
77356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_SetMuteFlag()
77456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
77556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Change the state of a single mute flag
77656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
77756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
77856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT JET_SetMuteFlag (EAS_DATA_HANDLE easHandle, EAS_INT trackNum, EAS_BOOL muteFlag, EAS_BOOL sync)
77956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
78056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_JET_SEGMENT *pSeg;
78156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U32 trackMuteFlag;
78256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
78356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
78456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* setup flag */
78556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((trackNum < 0) || (trackNum > 31))
78656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_PARAMETER_RANGE;
78756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    trackMuteFlag = (1 << trackNum);
78856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
78956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* get pointer to current segment */
79056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pSeg = &easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment];
79156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
79256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* unsynchronized mute, set flags and return */
79356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (!sync)
79456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
79556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (pSeg->streamHandle == NULL)
79656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            return EAS_ERROR_QUEUE_IS_EMPTY;
79756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (muteFlag)
79856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            pSeg->muteFlags |= trackMuteFlag;
79956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        else
80056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            pSeg->muteFlags &= ~trackMuteFlag;
80156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_IntSetStrmParam(easHandle, pSeg->streamHandle, PARSER_DATA_MUTE_FLAGS, (EAS_I32) pSeg->muteFlags);
80256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
80356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
80456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
80556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for valid stream state */
80656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (pSeg->state == JET_STATE_CLOSED)
80756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_QUEUE_IS_EMPTY;
80856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
80956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* save mute flags and set mute update flag */
81056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (muteFlag)
81156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pSeg->muteFlags |= trackMuteFlag;
81256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    else
81356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pSeg->muteFlags &= ~trackMuteFlag;
81456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    pSeg->flags |= JET_SEG_FLAG_MUTE_UPDATE;
81556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
81656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
81756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
81856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
81956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_TriggerClip()
82056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
82156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Unmute a track and then mute it when it is complete. If a clip
82256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * is already playing, change mute event to a trigger event. The
82356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_Event function will not mute the clip, but will allow it
82456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * to continue playing through the next clip.
82556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *
82656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * NOTE: We use bit 7 to indicate an entry in the queue. For a
82756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * small queue, it is cheaper in both memory and CPU cycles to
82856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * scan the entire queue for non-zero events than keep enqueue
82956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * and dequeue indices.
83056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
83156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
83256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT JET_TriggerClip (EAS_DATA_HANDLE easHandle, EAS_INT clipID)
83356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
83456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT i;
83556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT index = -1;
83656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
83756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check for valid clipID */
83856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((clipID < 0) || (clipID > 63))
83956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_PARAMETER_RANGE;
84056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
84156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* set active flag */
84256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    clipID |= JET_CLIP_ACTIVE_FLAG;
84356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
84456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* Reverse the search so that we get the first empty element */
84556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (i = JET_MUTE_QUEUE_SIZE-1; i >= 0 ; i--)
84656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
84756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (easHandle->jetHandle->muteQueue[i] == clipID)
84856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
84956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            index = i;
85056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
85156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
85256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (easHandle->jetHandle->muteQueue[i] == 0)
85356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            index = i;
85456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
85556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (index < 0)
85656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return EAS_ERROR_QUEUE_IS_FULL;
85756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
85856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle->muteQueue[index] = (EAS_U8) clipID | JET_CLIP_TRIGGER_FLAG;
85956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return EAS_SUCCESS;
86056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
86156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
86256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
86356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_Process()
86456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
86556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Called during EAS_Render to process stream states
86656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
86756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
86856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_PUBLIC EAS_RESULT JET_Process (EAS_DATA_HANDLE easHandle)
86956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
87056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    S_JET_SEGMENT *pSeg;
87156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_STATE state;
87256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT index;
87356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT playIndex;
87456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result = EAS_SUCCESS;
87556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_BOOL endOfLoop = EAS_FALSE;
87656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_BOOL startNextSegment = EAS_FALSE;
87756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_BOOL prepareNextSegment = EAS_FALSE;
87856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U32 jetEvent;
87956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
88056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* process event queue */
88156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    while (JET_ReadQueue(easHandle->jetHandle->jetEventQueue,
88256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        &easHandle->jetHandle->jetEventQueueRead,
88356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        easHandle->jetHandle->jetEventQueueWrite,
88456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        JET_EVENT_QUEUE_SIZE, &jetEvent))
88556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
88656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        S_JET_EVENT event;
88756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_JET
88856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        JET_DumpEvent("JET_Process", jetEvent);
88956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
89056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        JET_ParseEvent(jetEvent, &event);
89156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
89256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* check for end of loop */
89356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if ((event.controller == JET_EVENT_MARKER) &&
89456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                (event.value == JET_MARKER_LOOP_END) &&
89556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                (easHandle->jetHandle->segQueue[easHandle->jetHandle->playSegment].streamHandle != NULL))
89656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            endOfLoop = EAS_TRUE;
89756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
89856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
89956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* check state of all streams */
90056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    index = playIndex = easHandle->jetHandle->playSegment;
90156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (;;)
90256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
90356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        pSeg = &easHandle->jetHandle->segQueue[index];
90456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (pSeg->state != JET_STATE_CLOSED)
90556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
90656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
90756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* get playback state */
90856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            result = EAS_State(easHandle, pSeg->streamHandle, &state);
90956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (result != EAS_SUCCESS)
91056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return result;
91156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
91256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* process state */
91356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            switch (pSeg->state)
91456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
91556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                /* take action if this segment is stopping */
91656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                case JET_STATE_PLAYING:
91756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    if (endOfLoop || (state == EAS_STATE_STOPPING) || (state == EAS_STATE_STOPPED))
91856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    {
91956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        /* handle repeats */
92056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        if (pSeg->repeatCount != 0)
92156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        {
92256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_Render repeating segment %d\n", index); */ }
92356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            result = EAS_Locate(easHandle, pSeg->streamHandle, 0, EAS_FALSE);
92456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            if (result != EAS_SUCCESS)
92556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                                return result;
92656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            if (pSeg->repeatCount > 0)
92756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                                pSeg->repeatCount--;
92856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
92956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            /* update mute flags if necessary */
93056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            if (pSeg->flags & JET_SEG_FLAG_MUTE_UPDATE)
93156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            {
93256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                                result = EAS_IntSetStrmParam(easHandle, pSeg->streamHandle, PARSER_DATA_MUTE_FLAGS, (EAS_I32) pSeg->muteFlags);
93356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                                if (result != EAS_SUCCESS)
93456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                                    return result;
93556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                                pSeg->flags &= ~JET_SEG_FLAG_MUTE_UPDATE;
93656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            }
93756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
93856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        }
93956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        /* no repeat, start next segment */
94056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        else
94156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        {
94256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_Render stopping queue %d\n", index); */ }
94356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            startNextSegment = EAS_TRUE;
94456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            pSeg->state = JET_STATE_STOPPING;
94556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            easHandle->jetHandle->playSegment = (EAS_U8) JET_NextSegment(index);
94656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        }
94756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    }
94856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    break;
94956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
95056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                /* if playback has stopped, close the segment */
95156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                case JET_STATE_STOPPING:
95256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    if (state == EAS_STATE_STOPPED)
95356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    {
95456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        result = JET_CloseSegment(easHandle, index);
95556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        if (result != EAS_SUCCESS)
95656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            return result;
95756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    }
95856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    break;
95956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
96056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                case JET_STATE_READY:
96156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    if (startNextSegment)
96256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    {
96356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        result = JET_StartPlayback(easHandle, index);
96456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        if (result != EAS_SUCCESS)
96556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            return result;
96656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        startNextSegment = EAS_FALSE;
96756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        prepareNextSegment = EAS_TRUE;
96856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    }
96956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    break;
97056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
97156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                case JET_STATE_OPEN:
97256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    if (prepareNextSegment)
97356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    {
97456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        result = JET_PrepareSegment(easHandle, index);
97556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        if (result != EAS_SUCCESS)
97656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                            return result;
97756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        prepareNextSegment = EAS_FALSE;
97856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    }
97956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    break;
98056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
98156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                case JET_STATE_PAUSED:
98256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    break;
98356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
98456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                default:
98556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "JET_Render: Unexpected segment state %d\n", pSeg->state); */ }
98656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    break;
98756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
98856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
98956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
99056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        /* increment index */
99156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        index = JET_NextSegment(index);
99256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (index == playIndex)
99356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            break;
99456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
99556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
99656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* if out of segments, clear playing flag */
99756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (easHandle->jetHandle->numQueuedSegments == 0)
99856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        easHandle->jetHandle->flags &= ~JET_FLAGS_PLAYING;
99956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
100056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return result;
100156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
100256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
100356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
100456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_Event()
100556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
100656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Called from MIDI parser when data of interest is received
100756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
100856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
100956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparksvoid JET_Event (EAS_DATA_HANDLE easHandle, EAS_U32 segTrack, EAS_U8 channel, EAS_U8 controller, EAS_U8 value)
101056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
101156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_U32 event;
101256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
101356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (easHandle->jetHandle == NULL)
101456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return;
101556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
101656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* handle triggers */
101756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if (controller == JET_EVENT_TRIGGER_CLIP)
101856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
101956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        S_JET_SEGMENT *pSeg;
102056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        EAS_INT i;
102156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        EAS_U32 muteFlag;
102256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
102356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        for (i = 0; i < JET_MUTE_QUEUE_SIZE; i++)
102456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
102556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            /* search for event in queue */
102656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if ((easHandle->jetHandle->muteQueue[i] & JET_CLIP_ID_MASK) == (value & JET_CLIP_ID_MASK))
102756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            {
102856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                /* get segment pointer and mute flag */
102956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                pSeg = &easHandle->jetHandle->segQueue[segTrack >> JET_EVENT_SEG_SHIFT];
103056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                muteFlag = 1 << ((segTrack & JET_EVENT_TRACK_MASK) >> JET_EVENT_TRACK_SHIFT);
103156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
103256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                /* un-mute the track */
103356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                if ((easHandle->jetHandle->muteQueue[i] & JET_CLIP_TRIGGER_FLAG) && ((value & 0x40) > 0))
103456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                {
103556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    pSeg->muteFlags &= ~muteFlag;
103656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    easHandle->jetHandle->muteQueue[i] &= ~JET_CLIP_TRIGGER_FLAG;
103756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                }
103856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
103956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                /* mute the track */
104056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                else
104156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                {
104256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    EAS_U32 beforeMute ;
104356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    beforeMute = pSeg->muteFlags ;
104456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    pSeg->muteFlags |= muteFlag;
104556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                    if (beforeMute != pSeg->muteFlags)
104656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                        easHandle->jetHandle->muteQueue[i] = 0;
104756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                }
104856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                EAS_IntSetStrmParam(easHandle, pSeg->streamHandle, PARSER_DATA_MUTE_FLAGS, (EAS_I32) pSeg->muteFlags);
104956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return;
105056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            }
105156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
105256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        return;
105356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
105456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
105556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* generic event stuff */
105656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    event = (channel << JET_EVENT_CHAN_SHIFT) | (controller << JET_EVENT_CTRL_SHIFT) | value;
105756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
105856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* write to app queue, translate queue index to segment number */
105956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    if ((controller >= easHandle->jetHandle->config.appEventRangeLow) && (controller <= easHandle->jetHandle->config.appEventRangeHigh))
106056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
106156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
106256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        event |= easHandle->jetHandle->segQueue[(segTrack & JET_EVENT_SEG_MASK) >> JET_EVENT_SEG_SHIFT].userID << JET_EVENT_SEG_SHIFT;
106356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_JET
106456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        JET_DumpEvent("JET_Event[app]", event);
106556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
106656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        JET_WriteQueue(easHandle->jetHandle->appEventQueue,
106756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            &easHandle->jetHandle->appEventQueueWrite,
106856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            easHandle->jetHandle->appEventQueueRead,
106956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            APP_EVENT_QUEUE_SIZE,
107056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            event);
107156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
107256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
107356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* write to JET queue */
107456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    else if ((controller >= JET_EVENT_LOW) && (controller <= JET_EVENT_HIGH))
107556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
107656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        event |= segTrack;
107756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DEBUG_JET
107856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        JET_DumpEvent("JET_Event[jet]", event);
107956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif
108056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        JET_WriteQueue(easHandle->jetHandle->jetEventQueue,
108156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            &easHandle->jetHandle->jetEventQueueWrite,
108256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            easHandle->jetHandle->jetEventQueueRead,
108356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            JET_EVENT_QUEUE_SIZE,
108456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            event);
108556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
108656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
108756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
108856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks/*----------------------------------------------------------------------------
108956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * JET_Clear_Queue()
109056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
109156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Clears the queue and stops play without a complete shutdown
109256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *----------------------------------------------------------------------------
109356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks*/
109456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave SparksEAS_RESULT JET_Clear_Queue(EAS_DATA_HANDLE easHandle)
109556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks{
109656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_INT index;
109756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    EAS_RESULT result = EAS_SUCCESS;
109856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
109956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "JET_Clear_Queue\n"); */ }
110056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
110156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* pause all playing streams */
110256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (index = 0; index < SEG_QUEUE_DEPTH; index++)
110356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
110456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (easHandle->jetHandle->segQueue[index].state == JET_STATE_PLAYING)
110556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
110656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            result = EAS_Pause(easHandle, easHandle->jetHandle->segQueue[index].streamHandle);
110756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (result != EAS_SUCCESS)
110856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return result;
110956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
111056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            easHandle->jetHandle->segQueue[index].state = JET_STATE_PAUSED;
111156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
111256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
111356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
111456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* close all streams */
111556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (index = 0; index < SEG_QUEUE_DEPTH; index++)
111656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
111756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        if (easHandle->jetHandle->segQueue[index].streamHandle != NULL)
111856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        {
111956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            result = JET_CloseSegment(easHandle, index);
112056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks            if (result != EAS_SUCCESS)
112156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks                return result;
112256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        }
112356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
112456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
112556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    /* clear all clips */
112656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    for (index = 0; index < JET_MUTE_QUEUE_SIZE ; index++)
112756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    {
112856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks        easHandle->jetHandle->muteQueue[index] = 0;
112956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    }
113056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
113156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle->flags &= ~JET_FLAGS_PLAYING;
113256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    easHandle->jetHandle->playSegment = easHandle->jetHandle->queueSegment = 0;
113356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks    return result;
113456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks}
113556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks
1136