eas_public.c revision 56c99cd2c2c1e6ab038dac5fced5b92ccf11ff6c
17df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 27df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File: 47df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * eas_public.c 57df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 67df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Contents and purpose: 77df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Contains EAS library public interface 856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 97df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Copyright Sonic Network Inc. 2004 107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * you may not use this file except in compliance with the License. 137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * You may obtain a copy of the License at 147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * See the License for the specific language governing permissions and 217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * limitations under the License. 227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Revision Control: 257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * $Revision: 842 $ 267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * $Date: 2007-08-23 14:32:31 -0700 (Thu, 23 Aug 2007) $ 277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_synthcfg.h" 317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas.h" 327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_config.h" 337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_host.h" 347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_report.h" 357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_data.h" 367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_parser.h" 377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_pcm.h" 387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_midi.h" 397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_mixer.h" 407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_build.h" 417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_vm_protos.h" 427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_math.h" 437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef JET_INTERFACE 457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "jet_data.h" 467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef DLS_SYNTHESIZER 497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_mdls.h" 507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* number of events to parse before calling EAS_HWYield function */ 5356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define YIELD_EVENT_COUNT 10 547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * easLibConfig 577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * This structure is available through the EAS public interface to allow 597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * the user to check the configuration of the library. 607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 627df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic const S_EAS_LIB_CONFIG easLibConfig = 637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 6456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks LIB_VERSION, 657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _CHECKED_BUILD 6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_TRUE, 677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#else 6856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FALSE, 697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 7056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks MAX_SYNTH_VOICES, 7156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks NUM_OUTPUT_CHANNELS, 7256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks _OUTPUT_SAMPLE_RATE, 7356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks BUFFER_SIZE_IN_MONO_SAMPLES, 747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _FILTER_ENABLED 7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_TRUE, 767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#else 7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FALSE, 787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks _BUILD_TIME_, 8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks _BUILD_VERSION_ 817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project}; 827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* local prototypes */ 847df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT EAS_ParseEvents (S_EAS_DATA *pEASData, S_EAS_STREAM *pStream, EAS_U32 endTime, EAS_INT parseMode); 857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetStreamParameter 887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the specified parameter in the stream. Allows access to 907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * customizable settings within the individual file parsers. 917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pStream - stream handle 9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * param - enumerated parameter (see eas_parser.h) 9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * value - new value 967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 987df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_SetStreamParameter (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_I32 param, EAS_I32 value) 997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 1017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfSetData) 10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pParserModule->pfSetData)(pEASData, pStream->handle, param, value); 10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 1067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 1077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 1097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetStreamParameter 1107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 1117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the specified parameter in the stream. Allows access to 1127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * customizable settings within the individual file parsers. 1137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pStream - stream handle 11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * param - enumerated parameter (see eas_parser.h) 11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pValue - pointer to variable to receive current setting 1187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 1197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 1207df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_GetStreamParameter (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_I32 param, EAS_I32 *pValue) 1217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 1237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfGetData) 12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pParserModule->pfGetData)(pEASData, pStream->handle, param, pValue); 12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 1287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 1297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 1317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_StreamReady() 1327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 1337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * This routine sets common parameters like transpose, volume, etc. 1347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * First, it attempts to use the parser EAS_SetStreamParameter interface. If that 1357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * fails, it attempts to get the synth handle from the parser and 1367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * set the parameter directly on the synth. This eliminates duplicate 1377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * code in the parser. 1387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 1397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 1407df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_BOOL EAS_StreamReady (S_EAS_DATA *pEASData, EAS_HANDLE pStream) 1417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 1447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfState(pEASData, pStream->handle, &state) != EAS_SUCCESS) 14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FALSE; 14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (state < EAS_STATE_OPEN); 1497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 1507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 1517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 1527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_IntSetStrmParam() 1537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 1547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * This routine sets common parameters like transpose, volume, etc. 1557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * First, it attempts to use the parser EAS_SetStreamParameter interface. If that 1567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * fails, it attempts to get the synth handle from the parser and 1577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * set the parameter directly on the synth. This eliminates duplicate 1587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * code in the parser. 1597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 1607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 1617df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_IntSetStrmParam (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_INT param, EAS_I32 value) 1627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; 16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* try to set the parameter using stream interface */ 16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_SetStreamParameter(pEASData, pStream, param, value) == EAS_SUCCESS) 16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get a pointer to the synth object and set it directly */ 17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{740} we are cheating by passing a pointer through this interface */ 17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_SYNTH_HANDLE, (EAS_I32*) &pSynth) != EAS_SUCCESS) 17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pSynth == NULL) 17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (param) 17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef DLS_SYNTHESIZER 18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_DLS_COLLECTION: 18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result = VMSetDLSLib(pSynth, (EAS_DLSLIB_HANDLE) value); 18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks DLSAddRef((S_DLS*) value); 18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMInitializeAllChannels(pEASData->pVoiceMgr, pSynth); 18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 1917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 1927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_EAS_LIBRARY: 19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetEASLib(pSynth, (EAS_SNDLIB_HANDLE) value); 19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_POLYPHONY: 19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetPolyphony(pEASData->pVoiceMgr, pSynth, value); 19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_PRIORITY: 20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetPriority(pEASData->pVoiceMgr, pSynth, value); 20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_TRANSPOSITION: 20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMSetTranposition(pSynth, value); 20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_VOLUME: 20756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMSetVolume(pSynth, (EAS_U16) value); 20856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 20956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 21056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 21156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Invalid paramter %d in call to EAS_IntSetStrmParam", param); */ } 21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 21556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 2167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 2177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 2187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 2197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_IntGetStrmParam() 2207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 2217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * This routine gets common parameters like transpose, volume, etc. 2227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * First, it attempts to use the parser EAS_GetStreamParameter interface. If that 2237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * fails, it attempts to get the synth handle from the parser and 2247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * get the parameter directly on the synth. 2257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 2267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 2277df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_IntGetStrmParam (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_INT param, EAS_I32 *pValue) 2287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; 23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* try to set the parameter */ 23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, param, pValue) == EAS_SUCCESS) 23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get a pointer to the synth object and retrieve data directly */ 23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{740} we are cheating by passing a pointer through this interface */ 23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_SYNTH_HANDLE, (EAS_I32*) &pSynth) != EAS_SUCCESS) 23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pSynth == NULL) 24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (param) 24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_POLYPHONY: 24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMGetPolyphony(pEASData->pVoiceMgr, pSynth, pValue); 24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_PRIORITY: 24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMGetPriority(pEASData->pVoiceMgr, pSynth, pValue); 25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_TRANSPOSITION: 25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMGetTranposition(pSynth, pValue); 25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case PARSER_DATA_NOTE_COUNT: 25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pValue = VMGetNoteCount(pSynth); 25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Invalid paramter %d in call to EAS_IntSetStrmParam", param); */ } 26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 2657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 2667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 2677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 2687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_AllocateStream() 2697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 2707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Purpose: 2717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Allocates a stream handle 2727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 2737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 2747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 2757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 2767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 2777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 2787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 2797df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_INT EAS_AllocateStream (EAS_DATA_HANDLE pEASData) 2807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for static allocation, only one stream allowed */ 28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->staticMemoryModel) 28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[0].handle != NULL) 28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Attempt to open multiple streams in static model\n"); */ } 28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return -1; 29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return 0; 29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* dynamic model */ 29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (streamNum = 0; streamNum < MAX_NUMBER_STREAMS; streamNum++) 29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].handle == NULL) 29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamNum == MAX_NUMBER_STREAMS) 29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Exceeded maximum number of open streams\n"); */ } 30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return -1; 30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return streamNum; 3047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 3057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 3067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 3077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_InitStream() 3087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 3097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Purpose: 3107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Initialize a stream 3117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 3127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 3137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 3147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 3157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 3167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 3177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 3187df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic void EAS_InitStream (S_EAS_STREAM *pStream, EAS_VOID_PTR pParserModule, EAS_VOID_PTR streamHandle) 3197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->pParserModule = pParserModule; 32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->handle = streamHandle; 32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = 0; 32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->frameLength = AUDIO_FRAME_LENGTH; 32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->repeatCount = 0; 32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->volume = DEFAULT_STREAM_VOLUME; 32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags = 0; 3277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 3287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 3297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 3307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Config() 3317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 3327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Purpose: 3337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns a pointer to a structure containing the configuration options 3347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * in this library build. 3357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 3367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 3377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 3387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 3397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 3407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 3417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 3427df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC const S_EAS_LIB_CONFIG *EAS_Config (void) 3437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return &easLibConfig; 3457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 3467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 3477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 3487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Init() 3497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 3507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Purpose: 3517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Initialize the synthesizer library 3527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 3537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 35456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * ppEASData - pointer to data handle variable for this instance 3557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 3567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 3577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 3587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 3597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 3607df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Init (EAS_DATA_HANDLE *ppEASData) 3617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 36256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_DATA_HANDLE pHWInstData; 36356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 36456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_EAS_DATA *pEASData; 36556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT module; 36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL staticMemoryModel; 36756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the memory model */ 36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks staticMemoryModel = EAS_CMStaticMemoryModel(); 37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize the host wrapper interface */ 37256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppEASData = NULL; 37356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWInit(&pHWInstData)) != EAS_SUCCESS) 37456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 37556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 37656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check Configuration Module for S_EAS_DATA allocation */ 37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (staticMemoryModel) 37856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData = EAS_CMEnumData(EAS_CM_EAS_DATA); 37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData = EAS_HWMalloc(pHWInstData, sizeof(S_EAS_DATA)); 38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData) 38256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 38356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Failed to allocate EAS library memory\n"); */ } 38456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MALLOC_FAILED; 38556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 38656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 38756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize some data */ 38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemSet(pEASData, 0, sizeof(S_EAS_DATA)); 38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->staticMemoryModel = (EAS_BOOL8) staticMemoryModel; 39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->hwInstData = pHWInstData; 39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->renderTime = 0; 39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set header search flag */ 39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef FILE_HEADER_SEARCH 39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->searchHeaderFlag = EAS_TRUE; 3967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 3977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initalize parameters */ 39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SetVolume(pEASData, NULL, DEFAULT_VOLUME); 4007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 4017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _METRICS_ENABLED 40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initalize the metrics module */ 40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->pMetricsModule = EAS_CMEnumOptModules(EAS_MODULE_METRICS); 40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsModule != NULL) 40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pEASData->pMetricsModule->pfInit)(pEASData, &pEASData->pMetricsData)) != EAS_SUCCESS) 40756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 40856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld initializing metrics module\n", result); */ } 40956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 41056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 41156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 41256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 41356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 41456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initailize the voice manager & synthesizer */ 41556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = VMInitialize(pEASData)) != EAS_SUCCESS) 41656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 41756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 41856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize mix engine */ 41956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_MixEngineInit(pEASData)) != EAS_SUCCESS) 42056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 42156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld starting up mix engine\n", result); */ } 42256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 42356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 42456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 42556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize effects modules */ 42656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (module = 0; module < NUM_EFFECTS_MODULES; module++) 42756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 42856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->effectsModules[module].effect = EAS_CMEnumFXModules(module); 42956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->effectsModules[module].effect != NULL) 43056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 43156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pEASData->effectsModules[module].effect->pfInit)(pEASData, &pEASData->effectsModules[module].effectData)) != EAS_SUCCESS) 43256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 43356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Initialization of effects module %d returned %d\n", module, result); */ } 43456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 43556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 43656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 43756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize PCM engine */ 44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_PEInit(pEASData)) != EAS_SUCCESS) 44156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 44256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "EAS_PEInit failed with error code %ld\n", result); */ } 44356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 44556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 44656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* return instance data pointer to host */ 44756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppEASData = pEASData; 44856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 44956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 45056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 4517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 4527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 4537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Shutdown() 4547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 4557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Purpose: 4567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Shuts down the library. Deallocates any memory associated with the 4577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * synthesizer (dynamic memory model only) 4587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 4597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 4617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 4627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 4637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 4647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 4657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 4667df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Shutdown (EAS_DATA_HANDLE pEASData) 4677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 46856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HW_DATA_HANDLE hwInstData; 46956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result, reportResult; 47056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT i; 47156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* establish pointers */ 47356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks hwInstData = pEASData->hwInstData; 47456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for NULL handle */ 47656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData) 47756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_HANDLE_INTEGRITY; 47856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 47956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if there are streams open, close them */ 48056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = EAS_SUCCESS; 48156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < MAX_NUMBER_STREAMS; i++) 48256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 48356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[i].pParserModule && pEASData->streams[i].handle) 48456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 48556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*((S_FILE_PARSER_INTERFACE*)(pEASData->streams[i].pParserModule))->pfClose)(pEASData, pEASData->streams[i].handle)) != EAS_SUCCESS) 48656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 48756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld shutting down parser module\n", result); */ } 48856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 48956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 49056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 49156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 49256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 49356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown PCM engine */ 49456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_PEShutdown(pEASData)) != EAS_SUCCESS) 49556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 49656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld shutting down PCM engine\n", result); */ } 49756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 49856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 49956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 50056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown mix engine */ 50256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_MixEngineShutdown(pEASData)) != EAS_SUCCESS) 50356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 50456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld shutting down mix engine\n", result); */ } 50556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 50656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 50756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 50856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 50956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown effects modules */ 51056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0; i < NUM_EFFECTS_MODULES; i++) 51156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 51256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->effectsModules[i].effect) 51356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 51456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pEASData->effectsModules[i].effect->pfShutdown)(pEASData, pEASData->effectsModules[i].effectData)) != EAS_SUCCESS) 51556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 51656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Shutdown of effects module %d returned %d\n", i, result); */ } 51756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 51856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 51956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 52056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 52156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 52256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 52356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown the voice manager & synthesizer */ 52456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMShutdown(pEASData); 52556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 52656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 52756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown the metrics module */ 52856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsModule != NULL) 52956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 53056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pEASData->pMetricsModule->pfShutdown)(pEASData, pEASData->pMetricsData)) != EAS_SUCCESS) 53156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 53256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld shutting down metrics module\n", result); */ } 53356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 53456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 53556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 53656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 53756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 53856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 53956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* release allocated memory */ 54056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->staticMemoryModel) 54156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWFree(hwInstData, pEASData); 54256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 54356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown host wrappers */ 54456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (hwInstData) 54556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 54656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWShutdown(hwInstData)) != EAS_SUCCESS) 54756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 54856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %ld shutting down host wrappers\n", result); */ } 54956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 55056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 55156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 55256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 55356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 55456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return reportResult; 5557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 5567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 5577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef JET_INTERFACE 5587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 5597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_OpenJETStream() 5607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 5617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Private interface for JET to open an SMF stream with an offset 5627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 5637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 5647df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_OpenJETStream (EAS_DATA_HANDLE pEASData, EAS_FILE_HANDLE fileHandle, EAS_I32 offset, EAS_HANDLE *ppStream) 5657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 56656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 56756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR streamHandle; 56856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 56956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 57056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 57156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate a stream */ 57256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((streamNum = EAS_AllocateStream(pEASData)) < 0) 57356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_STREAMS_OPEN; 57456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 57556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check Configuration Module for SMF parser */ 57656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = NULL; 57756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks streamHandle = NULL; 57856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE *) EAS_CMEnumModules(0); 57956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 58056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 58156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 58256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* see if SMF parser recognizes the file */ 58356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfCheckFileType)(pEASData, fileHandle, &streamHandle, offset)) != EAS_SUCCESS) 58456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 58556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "CheckFileType returned error %ld\n", result); */ } 58656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 58756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 58856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 58956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parser recognized the file, return the handle */ 59056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamHandle) 59156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 59256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitStream(&pEASData->streams[streamNum], pParserModule, streamHandle); 59356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = &pEASData->streams[streamNum]; 59456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 59556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 59656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 59756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 5987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 5997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 6007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 6017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 6027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_OpenFile() 6037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 60456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 6057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Opens a file for audio playback. 6067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 6077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 60856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 60956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pHandle - pointer to file handle 61056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 6117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 61256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 6137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 6147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 6157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 6167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 6177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 6187df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_OpenFile (EAS_DATA_HANDLE pEASData, EAS_FILE_LOCATOR locator, EAS_HANDLE *ppStream) 6197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 62056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 62156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE fileHandle; 62256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR streamHandle; 62356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 62456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 62556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT moduleNum; 62656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 62756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open the file */ 62856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWOpenFile(pEASData->hwInstData, locator, &fileHandle, EAS_FILE_READ)) != EAS_SUCCESS) 62956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 63056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 63156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate a stream */ 63256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((streamNum = EAS_AllocateStream(pEASData)) < 0) 63356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_STREAMS_OPEN; 63456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 63556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check Configuration Module for file parsers */ 63656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = NULL; 63756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = NULL; 63856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks streamHandle = NULL; 63956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (moduleNum = 0; ; moduleNum++) 64056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 64156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE *) EAS_CMEnumModules(moduleNum); 64256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 64356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 64456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 64556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* see if this parser recognizes it */ 64656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfCheckFileType)(pEASData, fileHandle, &streamHandle, 0L)) != EAS_SUCCESS) 64756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 64856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "CheckFileType returned error %ld\n", result); */ } 64956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 65056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 65156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parser recognized the file, return the handle */ 65356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamHandle) 65456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 65556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save the parser pointer and file handle */ 65756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitStream(&pEASData->streams[streamNum], pParserModule, streamHandle); 65856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = &pEASData->streams[streamNum]; 65956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 66056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 66156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 66256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* rewind the file for the next parser */ 66356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pEASData->hwInstData, fileHandle, 0L)) != EAS_SUCCESS) 66456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 66556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 66656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 66756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no parser was able to recognize the file, close it and return an error */ 66856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 66956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "No parser recognized the requested file\n"); */ } 67056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 6717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 6727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 6737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef MMAPI_SUPPORT 6747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 6757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_MMAPIToneControl() 6767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 67756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 6787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Opens a ToneControl file for audio playback. 6797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 6807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 68156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 68256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pHandle - pointer to file handle 68356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 6847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 68556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 6867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 6877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 6887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 6897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 6907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 6917df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_MMAPIToneControl (EAS_DATA_HANDLE pEASData, EAS_FILE_LOCATOR locator, EAS_HANDLE *ppStream) 6927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 69356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 69456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE fileHandle; 69556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR streamHandle; 69656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 69756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 69856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 69956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check if the tone control parser is available */ 70056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = NULL; 70156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks streamHandle = NULL; 70256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = EAS_CMEnumOptModules(EAS_MODULE_MMAPI_TONE_CONTROL); 70356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 70456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 70556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_MMAPIToneControl: ToneControl parser not available\n"); */ } 70656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 70756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 70856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 70956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open the file */ 71056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWOpenFile(pEASData->hwInstData, locator, &fileHandle, EAS_FILE_READ)) != EAS_SUCCESS) 71156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 71256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate a stream */ 71456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((streamNum = EAS_AllocateStream(pEASData)) < 0) 71556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_STREAMS_OPEN; 71656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* see if ToneControl parser recognizes it */ 71856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfCheckFileType)(pEASData, fileHandle, &streamHandle, 0L)) != EAS_SUCCESS) 71956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 72056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "CheckFileType returned error %ld\n", result); */ } 72156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 72256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 72356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 72456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parser accepted the file, return the handle */ 72556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamHandle) 72656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 72756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 72856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save the parser pointer and file handle */ 72956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitStream(&pEASData->streams[streamNum], pParserModule, streamHandle); 73056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = &pEASData->streams[streamNum]; 73156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 73256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 73356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 73456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parser did not recognize the file, close it and return an error */ 73556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 73656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "No parser recognized the requested file\n"); */ } 73756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 7387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 7397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 7407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 7417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetWaveFmtChunk 7427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Helper function to retrieve WAVE file fmt chunk for MMAPI 7447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 74556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 74656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pStream - stream handle 74756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pFmtChunk - pointer to variable to receive current setting 7487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 7507df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetWaveFmtChunk (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_VOID_PTR *ppFmtChunk) 7517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 75256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 75356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 value; 7547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 75556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_FORMAT, &value)) != EAS_SUCCESS) 75656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 75756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppFmtChunk = (EAS_VOID_PTR) value; 75856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 7597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 7607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 7617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 7627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 7637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetFileType 7647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the file type (see eas_types.h for enumerations) 7667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 76756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 76856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pStream - stream handle 76956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pFileType - pointer to variable to receive file type 7707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 7727df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetFileType (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_I32 *pFileType) 7737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 77456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady (pEASData, pStream)) 77556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 77656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_FILE_TYPE, pFileType); 7777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 7787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 7797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 7807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Prepare() 7817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 78256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 7837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Prepares the synthesizer to play the file or stream. Parses the first 7847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * frame of data from the file and arms the synthesizer. 7857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 7867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 78756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 78856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 78956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 7907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 79156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 7927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 7937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 7947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 7957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 7977df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Prepare (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 7987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 79956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 80056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 80156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 80256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 80356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 80456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 80556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 80656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 80756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for valid state */ 80856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfState(pEASData, pStream->handle, &state); 80956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 81056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 81156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* prepare the stream */ 81256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (state == EAS_STATE_OPEN) 81356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 81456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 81556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = (*pParserModule->pfPrepare)(pEASData, pStream->handle); 81656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 81756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set volume */ 81856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 81956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_SetVolume(pEASData, pStream, pStream->volume); 82056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 82156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 82256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_VALID_IN_THIS_STATE; 82356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 82456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 82556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 82656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 82756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 8287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 8297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 8307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Render() 8317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 8327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Purpose: 8337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse the Midi data and render PCM audio data. 8347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 8367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * pEASData - buffer for internal EAS data 83756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pOut - output buffer pointer 83856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nNumRequested - requested num samples to generate 83956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pnNumGenerated - actual number of samples generated 8407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 84256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SUCCESS if PCM data was successfully rendered 8437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 8457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 8467df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Render (EAS_DATA_HANDLE pEASData, EAS_PCM *pOut, EAS_I32 numRequested, EAS_I32 *pNumGenerated) 8477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 84856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 84956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 85056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 voicesRendered; 85156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE parserState; 85256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 85356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 85456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* assume no samples generated and reset workload */ 85556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pNumGenerated = 0; 85656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMInitWorkload(pEASData->pVoiceMgr); 85756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 85856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no support for other buffer sizes yet */ 85956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (numRequested != BUFFER_SIZE_IN_MONO_SAMPLES) 86056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 86156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "This library supports only %ld samples in buffer, host requested %ld samples\n", 86256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (EAS_I32) BUFFER_SIZE_IN_MONO_SAMPLES, numRequested); */ } 86356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_BUFFER_SIZE_MISMATCH; 86456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 86556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 86656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 86756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start performance counter */ 86856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 86956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_TOTAL_TIME); 8707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 8717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 87256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* prep the frame buffer, do mix engine prep only if TRUE */ 8737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _SPLIT_ARCHITECTURE 87456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (VMStartFrame(pEASData)) 87556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePrep(pEASData, numRequested); 87656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 87756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* prep the mix engine */ 87856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePrep(pEASData, numRequested); 8797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 8807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 88156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save the output buffer pointer */ 88256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->pOutputAudioBuffer = pOut; 88356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 88456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 88556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 88656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start performance counter */ 88756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 88856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_PARSE_TIME); 8897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 8907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 89156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if we haven't finished parsing from last time, do it now */ 89256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* need to parse another frame of events before we render again */ 89356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (streamNum = 0; streamNum < MAX_NUMBER_STREAMS; streamNum++) 89456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 89556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear the locate flag */ 89656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_LOCATE; 89756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 89856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].pParserModule) 89956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 90056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 90156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* establish pointer to parser module */ 90256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = pEASData->streams[streamNum].pParserModule; 90356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 90456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* handle pause */ 90556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].streamFlags & STREAM_FLAGS_PAUSE) 90656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 90756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfPause) 90856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfPause(pEASData, pEASData->streams[streamNum].handle); 90956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_PAUSE; 91056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 91156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 91256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get current state */ 91356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pEASData->streams[streamNum].handle, &parserState)) != EAS_SUCCESS) 91456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 91556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 91656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* handle resume */ 91756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parserState == EAS_STATE_PAUSED) 91856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 91956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].streamFlags & STREAM_FLAGS_RESUME) 92056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 92156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfResume) 92256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfResume(pEASData, pEASData->streams[streamNum].handle); 92356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_RESUME; 92456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 92556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 92656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 92756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if necessary, parse stream */ 92856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((pEASData->streams[streamNum].streamFlags & STREAM_FLAGS_PARSED) == 0) 92956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseEvents(pEASData, &pEASData->streams[streamNum], pEASData->streams[streamNum].time + pEASData->streams[streamNum].frameLength, eParserModePlay)) != EAS_SUCCESS) 93056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 93156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 93256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for an early abort */ 93356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((pEASData->streams[streamNum].streamFlags) == 0) 93456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 93556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 93656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 93756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop performance counter */ 93856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 93956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_TOTAL_TIME); 9407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 94156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 94256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 94356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 94456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 94556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for repeat */ 94656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].repeatCount) 94756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 94856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 94956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for stopped state */ 95056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pEASData->streams[streamNum].handle, &parserState)) != EAS_SUCCESS) 95156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 95256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parserState == EAS_STATE_STOPPED) 95356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 95456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 95556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* decrement repeat count, unless it is negative */ 95656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].repeatCount > 0) 95756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].repeatCount--; 95856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 95956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the parser */ 96056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfReset)(pEASData, pEASData->streams[streamNum].handle)) != EAS_SUCCESS) 96156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 96256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].time = 0; 96356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 96456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 96556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 96656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 96756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 96856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 96956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop performance counter */ 97056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 97156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_PARSE_TIME); 9727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 9737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 97456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 97556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start the render timer */ 97656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 97756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_RENDER_TIME); 9787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 9797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 98056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* render audio */ 98156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = VMRender(pEASData->pVoiceMgr, BUFFER_SIZE_IN_MONO_SAMPLES, pEASData->pMixBuffer, &voicesRendered)) != EAS_SUCCESS) 98256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 98356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "pfRender function returned error %ld\n", result); */ } 98456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 98556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 9867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 98756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 98856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop the render timer */ 98956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) { 99056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfIncrementCounter)(pEASData->pMetricsData, EAS_PM_FRAME_COUNT, 1); 99156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_RENDER_TIME); 99256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfIncrementCounter)(pEASData->pMetricsData, EAS_PM_TOTAL_VOICE_COUNT, (EAS_U32) voicesRendered); 99356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfRecordMaxValue)(pEASData->pMetricsData, EAS_PM_MAX_VOICES, (EAS_U32) voicesRendered); 99456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 9957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 9967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 99756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks //2 Do we really need frameParsed? 99856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* need to parse another frame of events before we render again */ 99956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (streamNum = 0; streamNum < MAX_NUMBER_STREAMS; streamNum++) 100056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].pParserModule != NULL) 100156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_PARSED; 100256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 100356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 100456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start performance counter */ 100556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 100656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_STREAM_TIME); 10077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 100956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* render PCM audio */ 101056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_PERender(pEASData, numRequested)) != EAS_SUCCESS) 101156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 101256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_PERender returned error %ld\n", result); */ } 101356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 101456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 101556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 101656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 101756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop the stream timer */ 101856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 101956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_STREAM_TIME); 102056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 102156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 102256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 102356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start the post timer */ 102456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 102556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_POST_TIME); 10267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 102856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* for split architecture, send DSP vectors. Do post only if return is TRUE */ 10297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _SPLIT_ARCHITECTURE 103056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (VMEndFrame(pEASData)) 103156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 103256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* now do post-processing */ 103356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePost(pEASData, numRequested); 103456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pNumGenerated = numRequested; 103556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 103656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 103756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* now do post-processing */ 103856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePost(pEASData, numRequested); 103956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pNumGenerated = numRequested; 10407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 104256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 104356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop the post timer */ 104456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 104556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_POST_TIME); 10467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 104856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* advance render time */ 104956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->renderTime += AUDIO_FRAME_LENGTH; 10507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 10517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#if 0 105256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* dump workload for debug */ 105356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pVoiceMgr->workload) 105456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_DETAIL, "Workload = %d\n", pEASData->pVoiceMgr->workload); */ } 105556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 105656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 105756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 105856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop performance counter */ 105956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 106056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 106156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PERF_TIMER temp; 106256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = (*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_TOTAL_TIME); 106356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 106456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if max render time, record the number of voices and time */ 106556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((*pEASData->pMetricsModule->pfRecordMaxValue) 106656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pEASData->pMetricsData, EAS_PM_MAX_CYCLES, (EAS_U32) temp)) 106756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 106856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfRecordValue)(pEASData->pMetricsData, EAS_PM_MAX_CYCLES_VOICES, (EAS_U32) voicesRendered); 106956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfRecordValue)(pEASData->pMetricsData, EAS_PM_MAX_CYCLES_TIME, (EAS_I32) (pEASData->renderTime >> 8)); 107056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 107156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 10727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 10747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef JET_INTERFACE 107556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* let JET to do its thing */ 107656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->jetHandle != NULL) 107756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 107856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = JET_Process(pEASData); 107956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 108056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 108156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 10827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 108456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 10857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 10867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 10877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 10887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetRepeat() 10897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 109056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 10917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the selected stream to repeat. 10927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 10937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 109456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 109556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 109656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * repeatCount - repeat count 109756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 10987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 10997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 11017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Notes: 110356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 0 = no repeat 110456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1 = repeat once, i.e. play through twice 11057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * -1 = repeat forever 11067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 11077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 11087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, pEASData) reserved for future use */ 11097df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetRepeat (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 repeatCount) 11107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 111156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->repeatCount = repeatCount; 111256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 11137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 11147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 11157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 11167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetRepeat() 11177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 111856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 11197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Gets the current repeat count for the selected stream. 11207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 112256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 112356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 112456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pRrepeatCount - pointer to variable to hold repeat count 112556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 11267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 11277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 11297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Notes: 113156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 0 = no repeat 113256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1 = repeat once, i.e. play through twice 11337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * -1 = repeat forever 11347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 11357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 11367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, pEASData) reserved for future use */ 11377df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetRepeat (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pRepeatCount) 11387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 113956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pRepeatCount = pStream->repeatCount; 114056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 11417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 11427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 11437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 11447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetPlaybackRate() 11457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 114656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 11477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the playback rate. 11487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 115056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 115156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 115256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * rate - rate (28-bit fractional amount) 115356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 11547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 11557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 11577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 11597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 11607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, pEASData) reserved for future use */ 11617df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetPlaybackRate (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_U32 rate) 11627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 11637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 116456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check range */ 116556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((rate < (1 << 27)) || (rate > (1 << 29))) 116656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 116756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 116856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate new frame length 116956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 117056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * NOTE: The maximum frame length we can accomodate based on a 117156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * maximum rate of 2.0 (2^28) is 2047 (2^13-1). To accomodate a 117256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * longer frame length or a higher maximum rate, the fixed point 117356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * divide below will need to be adjusted 117456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 117556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->frameLength = (AUDIO_FRAME_LENGTH * (rate >> 8)) >> 20; 117656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 117756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* notify stream of new playback rate */ 117856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SetStreamParameter(pEASData, pStream, PARSER_DATA_PLAYBACK_RATE, (EAS_I32) rate); 117956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 11807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 11817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 11827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 11837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetTransposition) 11847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 118556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 11867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the key tranposition for the synthesizer. Transposes all 11877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * melodic instruments by the specified amount. Range is limited 11887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * to +/-12 semitones. 11897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 119156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 119256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 119356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * transposition - +/-12 semitones 119456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 11957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 11967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 11987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 12007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 12017df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetTransposition (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 transposition) 12027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 12037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 120456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check range */ 120556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((transposition < -12) || (transposition > 12)) 120656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 12077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 120856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 120956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 121056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_TRANSPOSITION, transposition); 12117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 121256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 12147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_ParseEvents() 12157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 12167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Purpose: 12177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse events in the current streams until the desired time is reached. 12187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 12207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * pEASData - buffer for internal EAS data 122156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * endTime - stop parsing if this time is reached 122256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * parseMode - play, locate, or metadata 12237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 122556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SUCCESS if PCM data was successfully rendered 12267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 12287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 12297df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT EAS_ParseEvents (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_U32 endTime, EAS_INT parseMode) 12307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 123156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 123256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 123356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 parserState; 123456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL done; 123556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT yieldCount = YIELD_EVENT_COUNT; 123656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 time = 0; 123756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 123856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* does this parser have a time function? */ 123956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = pStream->pParserModule; 124056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfTime == NULL) 124156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 124256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check state */ 124356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &parserState)) != EAS_SUCCESS) 124456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 124556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if play state, advance time */ 124656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((parserState >= EAS_STATE_READY) && (parserState <= EAS_STATE_PAUSING)) 124756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time += pStream->frameLength; 124856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_TRUE; 124956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 125056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 125156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* assume we're not done, in case we abort out */ 125256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 125356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 125456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags &= ~STREAM_FLAGS_PARSED; 125556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_FALSE; 125656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 125756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 125856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (!done) 125956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 126056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 126156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for stopped state */ 126256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &parserState)) != EAS_SUCCESS) 126356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 126456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parserState > EAS_STATE_PLAY) 126556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 126656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save current time if we're not in play mode */ 126756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parseMode != eParserModePlay) 126856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = time << 8; 126956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_TRUE; 127056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 127156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 127256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 127356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the next event time */ 127456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfTime) 127556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 127656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfTime)(pEASData, pStream->handle, &time)) != EAS_SUCCESS) 127756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 127856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 127956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if next event is within this frame, parse it */ 128056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (time < (endTime >> 8)) 128156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 128256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 128356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the next event */ 128456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfEvent) 128556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfEvent)(pEASData, pStream->handle, parseMode)) != EAS_SUCCESS) 128656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 128756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 128856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 128956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no more events in this frame, advance time */ 129056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 129156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 129256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = endTime; 129356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_TRUE; 129456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 129556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 129656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 129756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for max workload exceeded */ 129856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (VMCheckWorkload(pEASData->pVoiceMgr)) 129956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 130056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop even though we may not have parsed 130156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * all the events in this frame. The parser will try to 130256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * catch up on the next frame. 130356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 130456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 130556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 130656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 130756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* give host a chance for an early abort */ 130856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (--yieldCount == 0) 130956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 131056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWYield(pEASData->hwInstData)) 131156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 131256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks yieldCount = YIELD_EVENT_COUNT; 131356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 131456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 131556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 131656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if no early abort, parsing is complete for this frame */ 131756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (done) 131856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_PARSED; 131956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 132056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 13217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 13227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 13237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 13247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_ParseMetaData() 13257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 132656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 132756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 13297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 133056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 133156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 133256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * playLength - pointer to variable to store the play length (in msecs) 133356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 133556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 13377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 133856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * - resets the parser to the start of the file 13397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 13407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 13417df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_ParseMetaData (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *playLength) 13427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 134356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 134456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 134556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 134656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 134756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 134856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 134956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 135056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 135156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check parser state */ 135256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &state)) != EAS_SUCCESS) 135356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 135456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (state >= EAS_STATE_OPEN) 135556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 135656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 135756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if parser has metadata function, use that */ 135856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfGetMetaData != NULL) 135956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return pParserModule->pfGetMetaData(pEASData, pStream->handle, playLength); 136056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 136156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the parser to the beginning */ 136256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfReset)(pEASData, pStream->handle)) != EAS_SUCCESS) 136356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 136456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 136556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the file to end */ 136656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = 0; 136756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMInitWorkload(pEASData->pVoiceMgr); 136856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseEvents(pEASData, pStream, 0x7fffffff, eParserModeMetaData)) != EAS_SUCCESS) 136956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 137056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 137156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the parser time */ 137256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_GetLocation(pEASData, pStream, playLength)) != EAS_SUCCESS) 137356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 137456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 137556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the parser to the beginning */ 137656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = 0; 137756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pParserModule->pfReset)(pEASData, pStream->handle); 13787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 13797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 13807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 13817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_RegisterMetaDataCallback() 13827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 138356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 138456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Registers a metadata callback function for parsed metadata. 13857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 13867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 138756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 138856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 138956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * cbFunc - pointer to host callback function 139056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * metaDataBuffer - pointer to metadata buffer 139156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * metaDataBufSize - maximum size of the metadata buffer 139256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 139456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 13967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 13977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 13987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 13997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 14007df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_RegisterMetaDataCallback ( 140156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_DATA_HANDLE pEASData, 140256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HANDLE pStream, 140356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_METADATA_CBFUNC cbFunc, 140456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks char *metaDataBuffer, 140556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 metaDataBufSize, 140656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR pUserData) 14077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 140856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_METADATA_CB metadata; 140956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 141056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 141156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 141256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 141356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* register callback function */ 141456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.callback = cbFunc; 141556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.buffer = metaDataBuffer; 141656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.bufferSize = metaDataBufSize; 141756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.pUserData = pUserData; 141856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SetStreamParameter(pEASData, pStream, PARSER_DATA_METADATA_CB, (EAS_I32) &metadata); 14197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 14207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 14217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 14227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetNoteCount () 14237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 14247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the total number of notes played in this stream 14257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 14267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 14277df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetNoteCount (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pNoteCount) 14287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 142956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 143056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 143156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntGetStrmParam(pEASData, pStream, PARSER_DATA_NOTE_COUNT, pNoteCount); 14327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 14337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 14347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 14357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_CloseFile() 14367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 143756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 14387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Closes an audio file or stream. Playback should have either paused or 14397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * completed (EAS_State returns EAS_PAUSED or EAS_STOPPED). 14407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 144256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 144356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 144456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 144656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 14497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 14517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 14527df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_CloseFile (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 14537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 145456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 145556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 14567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 145756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* call the close function */ 145856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 145956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 146056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 14617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 146256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = (*pParserModule->pfClose)(pEASData, pStream->handle); 14637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 146456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear the handle and parser interface pointer */ 146556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->handle = NULL; 146656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->pParserModule = NULL; 146756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 146856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 14697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 14707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 14717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_OpenMIDIStream() 14727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 147356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 14747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Opens a raw MIDI stream allowing the host to route MIDI cable data directly to the synthesizer 14757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 147756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 147856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pHandle - pointer to variable to hold file or stream handle 147956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 148156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 14847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 14867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 14877df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_OpenMIDIStream (EAS_DATA_HANDLE pEASData, EAS_HANDLE *ppStream, EAS_HANDLE streamHandle) 14887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 148956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 149056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_INTERACTIVE_MIDI *pMIDIStream; 149156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 149256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 149356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize some pointers */ 149456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = NULL; 149556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 149656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate a stream */ 149756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((streamNum = EAS_AllocateStream(pEASData)) < 0) 149856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_STREAMS_OPEN; 149956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 150056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check Configuration Module for S_EAS_DATA allocation */ 150156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->staticMemoryModel) 150256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = EAS_CMEnumData(EAS_CM_MIDI_STREAM_DATA); 150356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 150456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = EAS_HWMalloc(pEASData->hwInstData, sizeof(S_INTERACTIVE_MIDI)); 150556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 150656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate dynamic memory */ 150756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pMIDIStream) 150856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 150956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Failed to allocate MIDI stream data\n"); */ } 151056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MALLOC_FAILED; 151156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 151256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 151356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* zero the memory to insure complete initialization */ 151456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemSet(pMIDIStream, 0, sizeof(S_INTERACTIVE_MIDI)); 151556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitStream(&pEASData->streams[streamNum], NULL, pMIDIStream); 151656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 151756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* instantiate a new synthesizer */ 151856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamHandle == NULL) 151956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 152056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = VMInitMIDI(pEASData, &pMIDIStream->pSynth); 152156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 152256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 152356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* use an existing synthesizer */ 152456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 152556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 152656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 value; 152756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_GetStreamParameter(pEASData, streamHandle, PARSER_DATA_SYNTH_HANDLE, &value); 152856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream->pSynth = (S_SYNTH*) value; 152956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMIncRefCount(pMIDIStream->pSynth); 153056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 153156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 153256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 153356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_CloseMIDIStream(pEASData, &pEASData->streams[streamNum]); 153456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 153556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 153656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 153756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize the MIDI stream data */ 153856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitMIDIStream(&pMIDIStream->stream); 153956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 154056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = (EAS_HANDLE) &pEASData->streams[streamNum]; 154156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 154256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 15437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 15447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 15457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_WriteMIDIStream() 15467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 154756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 15487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Send data to the MIDI stream device 15497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 155156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 155256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - stream handle 155356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pBuffer - pointer to buffer 155456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * count - number of bytes to write 155556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 155756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 15607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 15627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 15637df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_WriteMIDIStream (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_U8 *pBuffer, EAS_I32 count) 15647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 156556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_INTERACTIVE_MIDI *pMIDIStream; 156656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 15677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 156856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = (S_INTERACTIVE_MIDI*) pStream->handle; 15697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 157056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (count <= 0) 157156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_PARAMETER_RANGE; 15727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 157356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* send the entire buffer */ 157456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (count--) 157556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 157656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseMIDIStream(pEASData, pMIDIStream->pSynth, &pMIDIStream->stream, *pBuffer++, eParserModePlay)) != EAS_SUCCESS) 157756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 157856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 157956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 15807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 15817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 15827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 15837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_CloseMIDIStream() 15847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 158556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 15867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Closes a raw MIDI stream 15877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 158956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 159056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - stream handle 159156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 159356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 15967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 15987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 15997df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_CloseMIDIStream (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 16007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 160156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_INTERACTIVE_MIDI *pMIDIStream; 16027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 160356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = (S_INTERACTIVE_MIDI*) pStream->handle; 16047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 160556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close synth */ 160656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pMIDIStream->pSynth != NULL) 160756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 160856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMMIDIShutdown(pEASData, pMIDIStream->pSynth); 160956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream->pSynth = NULL; 161056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 16117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 161256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* release allocated memory */ 161356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->staticMemoryModel) 161456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWFree(((S_EAS_DATA*) pEASData)->hwInstData, pMIDIStream); 16157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 161656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->handle = NULL; 161756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 16187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 16197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 16207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 16217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_State() 16227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 162356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 162456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the state of an audio file or stream. 16257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 162756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 162856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 162956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 16307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 163156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 16327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 16347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 16367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 16377df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_State (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_STATE *pState) 16387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 163956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 164056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 164156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 164256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* call the parser to return state */ 164356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 164456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 164556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 164656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 164756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, pState)) != EAS_SUCCESS) 164856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 164956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 165056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if repeat count is set for this parser, mask the stopped state from the application */ 165156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->repeatCount && (*pState == EAS_STATE_STOPPED)) 165256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PLAY; 165356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 165456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if we're not ready or playing, we don't need to hide state from host */ 165556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (*pState > EAS_STATE_PLAY) 165656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 165756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 165856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if stream is about to be paused, report it as paused */ 165956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->streamFlags & STREAM_FLAGS_PAUSE) 166056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 166156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->streamFlags & STREAM_FLAGS_LOCATE) 166256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PAUSED; 166356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 166456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PAUSING; 166556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 166656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 166756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if stream is about to resume, report it as playing */ 166856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->streamFlags & STREAM_FLAGS_RESUME) 166956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PLAY; 167056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 167156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 16727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 16737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 16747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 16757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetPolyphony() 16767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 167756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 16787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the polyphony of the stream. A value of 0 allows the stream 16797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * to use all voices (set by EAS_SetSynthPolyphony). 16807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 168256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 168356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 168456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount - the desired polyphony count 168556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 16867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 16877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 16897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 16917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 16927df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetPolyphony (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 polyphonyCount) 16937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 169456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 169556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 169656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_POLYPHONY, polyphonyCount); 16977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 16987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 16997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 17007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetPolyphony() 17017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 170256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 17037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the current polyphony setting of the stream 17047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 170656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 170756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 170856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPolyphonyCount - pointer to variable to receive polyphony count 170956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 17117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 17137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 17157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 17167df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetPolyphony (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pPolyphonyCount) 17177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 171856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 171956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 172056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntGetStrmParam(pEASData, pStream, PARSER_DATA_POLYPHONY, pPolyphonyCount); 17217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 17227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 17237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 17247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetSynthPolyphony() 17257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 172656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 17277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the polyphony of the synth . Value must be >= 1 and <= the 17287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * maximum number of voices. This function will pin the polyphony 17297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * at those limits 17307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 173256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 173356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * synthNum - synthesizer number (0 = onboard, 1 = DSP) 173456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount - the desired polyphony count 173556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 17377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 17397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 17417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 17427df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetSynthPolyphony (EAS_DATA_HANDLE pEASData, EAS_I32 synthNum, EAS_I32 polyphonyCount) 17437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 174456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetSynthPolyphony(pEASData->pVoiceMgr, synthNum, polyphonyCount); 17457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 17467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 17477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 17487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetSynthPolyphony() 17497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 175056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 17517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the current polyphony setting of the synth 17527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 175456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 175556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * synthNum - synthesizer number (0 = onboard, 1 = DSP) 175656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPolyphonyCount - pointer to variable to receive polyphony count 175756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 17597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 17617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 17637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 17647df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetSynthPolyphony (EAS_DATA_HANDLE pEASData, EAS_I32 synthNum, EAS_I32 *pPolyphonyCount) 17657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 176656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMGetSynthPolyphony(pEASData->pVoiceMgr, synthNum, pPolyphonyCount); 17677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 17687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 17697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 17707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetPriority() 17717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 177256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 17737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the priority of the stream. Determines which stream's voices 17747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * are stolen when there are insufficient voices for all notes. 17757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Value must be in the range of 1-15, lower values are higher 17767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * priority. 17777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 177956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 178056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 178156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount - the desired polyphony count 178256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 17847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 17867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 17887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 17897df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetPriority (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 priority) 17907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 179156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 179256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 179356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_PRIORITY, priority); 17947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 17957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 17967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 17977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetPriority() 17987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 179956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 18007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the current priority setting of the stream 18017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 180356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 180456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 180556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPriority - pointer to variable to receive priority 180656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 18077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 18087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 18107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 18127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 18137df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetPriority (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pPriority) 18147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 181556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 181656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 181756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntGetStrmParam(pEASData, pStream, PARSER_DATA_PRIORITY, pPriority); 18187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 18197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 18207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 18217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetVolume() 18227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 182356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 18247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the master gain for the mix engine in 1dB increments 18257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 182756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 182856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * volume - the desired master gain (100 is max) 182956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 183056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 18317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 18327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 18357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * overrides any previously set master volume from sysex 18367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 18387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 18397df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetVolume (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 volume) 18407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 184156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 gain; 184256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 184356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check range */ 184456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((volume < 0) || (volume > EAS_MAX_VOLUME)) 184556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_PARAMETER_RANGE; 184656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 184756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stream volume */ 184856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream != NULL) 184956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 185056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 gainOffset; 185156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 185256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 185356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 185456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 185556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 185656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get gain offset */ 185756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->volume = (EAS_U8) volume; 185856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_GAIN_OFFSET, &gainOffset); 185956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 186056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks volume += gainOffset; 186156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 186256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set stream volume */ 186356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks gain = EAS_VolumeToGain(volume - STREAM_VOLUME_HEADROOM); 186456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 186556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert to linear scalar */ 186656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_VOLUME, gain); 186756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 186856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 186956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* master volume */ 187056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->masterVolume = (EAS_U8) volume; 18717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#if (NUM_OUTPUT_CHANNELS == 1) 187256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* leave 3dB headroom for mono output */ 187356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks volume -= 3; 18747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 18757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 187656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks gain = EAS_VolumeToGain(volume - STREAM_VOLUME_HEADROOM); 187756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->masterGain = gain; 187856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 18797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 18807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 18817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 18827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetVolume() 18837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 188456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 18857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the master volume for the synthesizer. The default volume setting is 18867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 50. The volume range is 0 to 100; 18877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 188956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 189056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * volume - the desired master volume 189156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 189256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 18937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 18947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 18977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * overrides any previously set master volume from sysex 18987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 19017df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_I32 EAS_GetVolume (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 19027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 190356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream == NULL) 190456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return pEASData->masterVolume; 190556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 190656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 190756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 190856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return pStream->volume; 19097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 19107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 19117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 19127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetMaxLoad() 19137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 191456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 19157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the maximum workload the parsers will do in a single call to 19167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Render. The units are currently arbitrary, but should correlate 19177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * well to the actual CPU cycles consumed. The primary effect is to 19187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * reduce the occasional peaks in CPU cycles consumed when parsing 191956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * dense parts of a MIDI score. 19207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 192256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 192356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * maxLoad - the desired maximum workload 192456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 19267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 19287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 19317df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetMaxLoad (EAS_DATA_HANDLE pEASData, EAS_I32 maxLoad) 19327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 193356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMSetWorkload(pEASData->pVoiceMgr, maxLoad); 193456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 19357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 19367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 19377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 19387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetMaxPCMStreams() 19397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the maximum number of PCM streams allowed in parsers that 19417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * use PCM streaming. 19427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 194456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 194556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 194656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * maxNumStreams - maximum number of PCM streams 19477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 19497df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetMaxPCMStreams (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 maxNumStreams) 19507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 195156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 195256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 195356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_MAX_PCM_STREAMS, maxNumStreams); 19547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 19557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 19567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 19577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Locate() 19587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 195956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 19607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Locate into the file associated with the handle. 19617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 19637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * pEASData - pointer to overall EAS data structure 196456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file handle 196556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * milliseconds - playback offset from start of file in milliseconds 196656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 196856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 19717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * the actual offset will be quantized to the closest update period, typically 19727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * a resolution of 5.9ms. Notes that are started prior to this time will not 19737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * sound. Any notes currently playing will be shut off. 19747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 19777df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Locate (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 milliseconds, EAS_BOOL offset) 19787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 197956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 198056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 198156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 requestedTime; 198256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 198356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 198456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get pointer to parser function table */ 198556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 198656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 198756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 198856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 198956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &state)) != EAS_SUCCESS) 199056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 199156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (state >= EAS_STATE_OPEN) 199256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 199356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 199456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* handle offset and limit to start of file */ 199556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{704} use shift for performance*/ 199656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (offset) 199756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks milliseconds += (EAS_I32) pStream->time >> 8; 199856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (milliseconds < 0) 199956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks milliseconds = 0; 200056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 200156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check to see if the request is different from the current time */ 200256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks requestedTime = (EAS_U32) milliseconds; 200356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (requestedTime == (pStream->time >> 8)) 200456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 200556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 200656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set the locate flag */ 200756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_LOCATE; 200856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 200956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* use the parser locate function, if available */ 201056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfLocate != NULL) 201156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 201256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL parserLocate = EAS_FALSE; 201356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfLocate(pEASData, pStream->handle, (EAS_I32) requestedTime, &parserLocate); 201456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!parserLocate) 201556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 201656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 201756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = requestedTime << 8; 201856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 201956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 202056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 202156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 202256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if we were paused and not going to resume, set pause request flag */ 202356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (((state == EAS_STATE_PAUSING) || (state == EAS_STATE_PAUSED)) && ((pStream->streamFlags & STREAM_FLAGS_RESUME) == 0)) 202456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_PAUSE; 202556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 202656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the synth and parser */ 202756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfReset)(pEASData, pStream->handle)) != EAS_SUCCESS) 202856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 202956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = 0; 203056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 203156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* locating forward, clear parsed flag and parse data until we get to the requested location */ 203256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseEvents(pEASData, pStream, requestedTime << 8, eParserModeLocate)) != EAS_SUCCESS) 203356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 203456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 203556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 20367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 20377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 20387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 20397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetLocation() 20407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 204156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 204256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current playback offset 20437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 204556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 204656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file handle 204756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 20497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * The offset in milliseconds from the start of the current sequence, quantized 20507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * to the nearest update period. Actual resolution is typically 5.9 ms. 20517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 20537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 20557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 20567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, pEASData) reserved for future use */ 20577df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetLocation (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pTime) 20587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 205956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 206056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 20617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 206256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pTime = pStream->time >> 8; 206356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 20647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 20657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 20667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 20677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetRenderTime() 20687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 206956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 207056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current playback offset 20717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 207356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 207456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 20767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Gets the render time clock in msecs. 20777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 20797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 20817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 20827df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetRenderTime (EAS_DATA_HANDLE pEASData, EAS_I32 *pTime) 20837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 208456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pTime = pEASData->renderTime >> 8; 208556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 20867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 20877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 20887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 20897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Pause() 20907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 209156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 20927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Pauses the playback of the data associated with this handle. The audio 20937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * is gracefully ramped down to prevent clicks and pops. It may take several 20947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * buffers of audio before the audio is muted. 20957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 209756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 209856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 209956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 210156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 21047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 21077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 21087df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Pause (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 21097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 211056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 211156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 211256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 211356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 211456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 211556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 211656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 211756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 211856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for valid state */ 211956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfState(pEASData, pStream->handle, &state); 212056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 212156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 212256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((state != EAS_STATE_PLAY) && (state != EAS_STATE_READY) && ((pStream->streamFlags & STREAM_FLAGS_RESUME) == 0)) 212356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 212456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 212556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure parser implements pause */ 212656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfPause == NULL) 212756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 212856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 212956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear resume flag */ 213056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags &= ~STREAM_FLAGS_RESUME; 213156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 213256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set pause flag */ 213356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_PAUSE; 213456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 213556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if 0 213656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* pause the stream */ 213756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfPause) 213856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfPause(pEASData, pStream->handle); 213956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 214056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 214156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 214256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 214356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 214456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 21457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 21467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 21477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 21487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Resume() 21497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 215056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 21517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Resumes the playback of the data associated with this handle. The audio 21527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * is gracefully ramped up to prevent clicks and pops. 21537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 215556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 215656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 215756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 215956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 21627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 21657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 21667df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Resume (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 21677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 216856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 216956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 217056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 217156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 217256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 217356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 217456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 217556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 217656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for valid state */ 217756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfState(pEASData, pStream->handle, &state); 217856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 217956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 218056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((state != EAS_STATE_PAUSED) && (state != EAS_STATE_PAUSING) && ((pStream->streamFlags & STREAM_FLAGS_PAUSE) == 0)) 218156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 218256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 218356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure parser implements this function */ 218456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfResume == NULL) 218556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 218656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 218756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear pause flag */ 218856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags &= ~STREAM_FLAGS_PAUSE; 218956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 219056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set resume flag */ 219156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_RESUME; 219256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 219356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if 0 219456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* resume the stream */ 219556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfResume) 219656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfResume(pEASData, pStream->handle); 219756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 219856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 219956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 220056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 220156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 220256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 22037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 22047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 22057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 22067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetParameter() 22077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 220856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 22097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the parameter of a module. See E_MODULES for a list of modules 22107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * and the header files of the modules for a list of parameters. 22117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 221356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 221456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 221556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * module - enumerated module number 221656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * param - enumerated parameter number 221756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pValue - pointer to variable to receive parameter value 221856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 222056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 22237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 22267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 22277df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetParameter (EAS_DATA_HANDLE pEASData, EAS_I32 module, EAS_I32 param, EAS_I32 *pValue) 22287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 22297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 223056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (module >= NUM_EFFECTS_MODULES) 223156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 223256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 223356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->effectsModules[module].effectData == NULL) 223456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 223556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 223656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->effectsModules[module].effect->pFGetParam) 223756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pEASData->effectsModules[module].effectData, param, pValue); 22387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 22397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 22407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 22417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetParameter() 22427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 224356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 22447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the parameter of a module. See E_MODULES for a list of modules 22457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * and the header files of the modules for a list of parameters. 22467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 224856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 224956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 225056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * module - enumerated module number 225156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * param - enumerated parameter number 225256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * value - new parameter value 225356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 225556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 22587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 22617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 22627df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetParameter (EAS_DATA_HANDLE pEASData, EAS_I32 module, EAS_I32 param, EAS_I32 value) 22637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 22647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 226556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (module >= NUM_EFFECTS_MODULES) 226656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 22677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 226856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->effectsModules[module].effectData == NULL) 226956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 227056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 227156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->effectsModules[module].effect->pFSetParam) 227256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pEASData->effectsModules[module].effectData, param, value); 22737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 22747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 227556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 22767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 22777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_MetricsReport() 22787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 227956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 22807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Displays the current metrics through the metrics interface. 22817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 228356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * p - instance data handle 228456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 228656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 22897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 22917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 22927df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_MetricsReport (EAS_DATA_HANDLE pEASData) 22937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 229456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->pMetricsModule) 229556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 22967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 229756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->pMetricsModule->pfReport)(pEASData->pMetricsData); 22987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 22997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 23007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 23017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_MetricsReset() 23027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 230356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 23047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Resets the metrics. 23057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 230756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * p - instance data handle 230856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 23097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 231056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 23117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 23137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 23167df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_MetricsReset (EAS_DATA_HANDLE pEASData) 23177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 23187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 231956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->pMetricsModule) 232056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 23217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 232256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->pMetricsModule->pfReset)(pEASData->pMetricsData); 23237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 23247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 23257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 23267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 23277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetSoundLibrary() 23287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 232956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 23307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the location of the sound library. 23317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 233356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 233456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSoundLib - pointer to sound library 233556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 23367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 233756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 23387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 23407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 23437df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetSoundLibrary (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_SNDLIB_HANDLE pSndLib) 23447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 234556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream) 234656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 234756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 234856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 234956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_EAS_LIBRARY, (EAS_I32) pSndLib); 235056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 235156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 235256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetGlobalEASLib(pEASData->pVoiceMgr, pSndLib); 23537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 23547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 23557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 23567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetHeaderSearchFlag() 23577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * By default, when EAS_OpenFile is called, the parsers check the 23597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * first few bytes of the file looking for a specific header. Some 23607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * mobile devices may add a header to the start of a file, which 23617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * will prevent the parser from recognizing the file. If the 23627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * searchFlag is set to EAS_TRUE, the parser will search the entire 23637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * file looking for the header. This may enable EAS to recognize 23647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * some files that it would ordinarily reject. The negative is that 23657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * it make take slightly longer to process the EAS_OpenFile request. 23667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 236856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 236956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * searchFlag - search flag (EAS_TRUE or EAS_FALSE) 23707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 23727df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetHeaderSearchFlag (EAS_DATA_HANDLE pEASData, EAS_BOOL searchFlag) 23737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 237456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->searchHeaderFlag = (EAS_BOOL8) searchFlag; 237556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 23767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 23777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 23787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 23797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetPlayMode() 23807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Some file formats support special play modes, such as iMode partial 23827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * play mode. This call can be used to change the play mode. The 23837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * default play mode (usually straight playback) is always zero. 23847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 238656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 238756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 238856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * playMode - play mode (see file parser for specifics) 23897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 23917df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetPlayMode (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 playMode) 23927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 239356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_PLAY_MODE, playMode); 23947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 23957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 23967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef DLS_SYNTHESIZER 23977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 23987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_LoadDLSCollection() 23997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 240056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 24017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the location of the sound library. 24027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 240456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 240556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSoundLib - pointer to sound library 240656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 240856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 24117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 24147df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_LoadDLSCollection (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_FILE_LOCATOR locator) 24157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 241656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE fileHandle; 241756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 241856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_DLSLIB_HANDLE pDLS; 241956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 242056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream != NULL) 242156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 242256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 242356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 242456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 242556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 242656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open the file */ 242756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWOpenFile(pEASData->hwInstData, locator, &fileHandle, EAS_FILE_READ)) != EAS_SUCCESS) 242856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 242956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 243056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the file */ 243156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = DLSParser(pEASData->hwInstData, fileHandle, 0, &pDLS); 243256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 243356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 243456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 243556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 243656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 243756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if a stream pStream is specified, point it to the DLS collection */ 243856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream) 243956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_DLS_COLLECTION, (EAS_I32) pDLS); 244056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 244156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* global DLS load */ 244256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 244356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = VMSetGlobalDLSLib(pEASData, pDLS); 244456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 244556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 244656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 24477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 24487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 24497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 24507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef EXTERNAL_AUDIO 24517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 24527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_RegExtAudioCallback() 24537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 245456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 24557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Registers callback functions for audio events. 24567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 245856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 245956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 246056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * cbProgChgFunc - pointer to host callback function for program change 246156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * cbEventFunc - pointer to host callback functio for note events 246256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 246456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 24677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 24707df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_RegExtAudioCallback (EAS_DATA_HANDLE pEASData, 247156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HANDLE pStream, 247256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR pInstData, 247356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_EXT_PRG_CHG_FUNC cbProgChgFunc, 247456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_EXT_EVENT_FUNC cbEventFunc) 24757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 247656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; 247756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 247856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 247956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 248056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 248156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_SYNTH_HANDLE, (EAS_I32*) &pSynth) != EAS_SUCCESS) 248256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 248356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 248456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pSynth == NULL) 248556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 248656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 248756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMRegExtAudioCallback(pSynth, pInstData, cbProgChgFunc, cbEventFunc); 248856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 24897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 24907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 24917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 24927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetMIDIControllers() 24937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 249456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 24957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the current state of MIDI controllers on the requested channel. 24967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 249856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 249956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 250056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pControl - pointer to structure to receive data 250156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 25027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 250356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 25047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 25067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 25097df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetMIDIControllers (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_U8 channel, S_MIDI_CONTROLLERS *pControl) 25107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 251156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; 251256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 251356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 251456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 251556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 251656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_SYNTH_HANDLE, (EAS_I32*) &pSynth) != EAS_SUCCESS) 251756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 251856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 251956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pSynth == NULL) 252056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 252156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 252256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMGetMIDIControllers(pSynth, channel, pControl); 252356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 25247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 25257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 25267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 25277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _SPLIT_ARCHITECTURE 25287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 25297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetFrameBuffer() 25307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 253156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 25327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the frame buffer pointer passed to the IPC communications functions 25337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 253556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 253656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * locator - file locator 253756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 25387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 253956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 25407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 25427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * May overlay instruments in the GM sound set 25437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 25467df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetFrameBuffer (EAS_DATA_HANDLE pEASData, EAS_FRAME_BUFFER_HANDLE pFrameBuffer) 25477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 254856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pVoiceMgr) 254956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->pVoiceMgr->pFrameBuffer = pFrameBuffer; 255056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 25517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 25527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 25537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 25547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 25557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SearchFile 25567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Search file for specific sequence starting at current file 25587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * position. Returns offset to start of sequence. 25597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 256156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 256256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * fileHandle - file handle 256356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * searchString - pointer to search sequence 256456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * len - length of search sequence 256556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pOffset - pointer to variable to store offset to sequence 25667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns EAS_EOF if end-of-file is reached 25687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 25707df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_RESULT EAS_SearchFile (S_EAS_DATA *pEASData, EAS_FILE_HANDLE fileHandle, const EAS_U8 *searchString, EAS_I32 len, EAS_I32 *pOffset) 25717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 257256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 257356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT index; 257456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 c; 257556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 257656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pOffset = -1; 257756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks index = 0; 257856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (;;) 257956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 258056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_HWGetByte(pEASData->hwInstData, fileHandle, &c); 258156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 258256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 258356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (c == searchString[index]) 258456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 258556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks index++; 258656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (index == 4) 258756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 258856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_HWFilePos(pEASData->hwInstData, fileHandle, pOffset); 258956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 259056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 259156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pOffset -= len; 259256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 259356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 259456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 259556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 259656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks index = 0; 259756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 259856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 25997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 26007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 26017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 2602