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