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) 633a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX { 634a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX /* Closing the opened file as stream allocation failed */ 635a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 63656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_STREAMS_OPEN; 637a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX } 63856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check Configuration Module for file parsers */ 63956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = NULL; 64056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = NULL; 64156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks streamHandle = NULL; 64256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (moduleNum = 0; ; moduleNum++) 64356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 64456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE *) EAS_CMEnumModules(moduleNum); 64556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 64656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 64756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 64856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* see if this parser recognizes it */ 64956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfCheckFileType)(pEASData, fileHandle, &streamHandle, 0L)) != EAS_SUCCESS) 65056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 651a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX /* Closing the opened file as file type check failed */ 652a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 653a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX 65456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "CheckFileType returned error %ld\n", result); */ } 65556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 65656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 65756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 65856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parser recognized the file, return the handle */ 65956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamHandle) 66056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 66156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 66256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save the parser pointer and file handle */ 66356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitStream(&pEASData->streams[streamNum], pParserModule, streamHandle); 66456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = &pEASData->streams[streamNum]; 66556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 66656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 66756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 66856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* rewind the file for the next parser */ 66956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWFileSeek(pEASData->hwInstData, fileHandle, 0L)) != EAS_SUCCESS) 670a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX { 671a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX /* Closing the opened file as file seek failed */ 672a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 673a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX 67456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 675a965c0d917b2b2ef9dbd1c773098e3de079be4fdgbhakteX } 67656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 67756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 67856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no parser was able to recognize the file, close it and return an error */ 67956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 68056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "No parser recognized the requested file\n"); */ } 68156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 6827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 6837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 6847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef MMAPI_SUPPORT 6857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 6867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_MMAPIToneControl() 6877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 68856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 6897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Opens a ToneControl file for audio playback. 6907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 6917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 69256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 69356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pHandle - pointer to file handle 69456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 6957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 69656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 6977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 6987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 6997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 7007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 7027df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_MMAPIToneControl (EAS_DATA_HANDLE pEASData, EAS_FILE_LOCATOR locator, EAS_HANDLE *ppStream) 7037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 70456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 70556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE fileHandle; 70656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR streamHandle; 70756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 70856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 70956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 71056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check if the tone control parser is available */ 71156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = NULL; 71256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks streamHandle = NULL; 71356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = EAS_CMEnumOptModules(EAS_MODULE_MMAPI_TONE_CONTROL); 71456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 71556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 71656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_MMAPIToneControl: ToneControl parser not available\n"); */ } 71756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 71856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 71956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 72056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open the file */ 72156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWOpenFile(pEASData->hwInstData, locator, &fileHandle, EAS_FILE_READ)) != EAS_SUCCESS) 72256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 72356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 72456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate a stream */ 72556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((streamNum = EAS_AllocateStream(pEASData)) < 0) 72656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_STREAMS_OPEN; 72756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 72856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* see if ToneControl parser recognizes it */ 72956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfCheckFileType)(pEASData, fileHandle, &streamHandle, 0L)) != EAS_SUCCESS) 73056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 73156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "CheckFileType returned error %ld\n", result); */ } 73256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 73356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 73456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 73556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parser accepted the file, return the handle */ 73656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamHandle) 73756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 73856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 73956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save the parser pointer and file handle */ 74056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitStream(&pEASData->streams[streamNum], pParserModule, streamHandle); 74156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = &pEASData->streams[streamNum]; 74256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 74356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 74456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 74556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parser did not recognize the file, close it and return an error */ 74656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 74756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "No parser recognized the requested file\n"); */ } 74856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_UNRECOGNIZED_FORMAT; 7497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 7507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 7517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 7527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetWaveFmtChunk 7537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Helper function to retrieve WAVE file fmt chunk for MMAPI 7557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 75656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 75756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pStream - stream handle 75856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pFmtChunk - pointer to variable to receive current setting 7597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 7617df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetWaveFmtChunk (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_VOID_PTR *ppFmtChunk) 7627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 76356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 76456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 value; 7657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 76656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_FORMAT, &value)) != EAS_SUCCESS) 76756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 76856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppFmtChunk = (EAS_VOID_PTR) value; 76956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 7707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 7717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 7727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 7737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 7747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetFileType 7757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the file type (see eas_types.h for enumerations) 7777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 77856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 77956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pStream - stream handle 78056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pFileType - pointer to variable to receive file type 7817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 7827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 7837df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetFileType (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_I32 *pFileType) 7847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 78556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady (pEASData, pStream)) 78656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 78756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_FILE_TYPE, pFileType); 7887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 7897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 7907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 7917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Prepare() 7927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 79356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 7947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Prepares the synthesizer to play the file or stream. Parses the first 7957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * frame of data from the file and arms the synthesizer. 7967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 7977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 79856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 79956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 80056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 8017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 80256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 8037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 8057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 8077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 8087df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Prepare (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 8097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 81056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 81156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 81256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 81356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 81456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 81556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 81656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 81756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 81856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for valid state */ 81956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfState(pEASData, pStream->handle, &state); 82056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 82156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 82256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* prepare the stream */ 82356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (state == EAS_STATE_OPEN) 82456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 82556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 82656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = (*pParserModule->pfPrepare)(pEASData, pStream->handle); 82756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 82856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set volume */ 82956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 83056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_SetVolume(pEASData, pStream, pStream->volume); 83156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 83256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 83356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_VALID_IN_THIS_STATE; 83456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 83556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 83656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 83756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 83856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 8397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 8407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 8417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Render() 8427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 8437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Purpose: 8447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse the Midi data and render PCM audio data. 8457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 8477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * pEASData - buffer for internal EAS data 84856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pOut - output buffer pointer 84956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * nNumRequested - requested num samples to generate 85056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pnNumGenerated - actual number of samples generated 8517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 85356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SUCCESS if PCM data was successfully rendered 8547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 8557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 8567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 8577df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Render (EAS_DATA_HANDLE pEASData, EAS_PCM *pOut, EAS_I32 numRequested, EAS_I32 *pNumGenerated) 8587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 85956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 86056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 86156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 voicesRendered; 86256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE parserState; 86356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 86456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 86556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* assume no samples generated and reset workload */ 86656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pNumGenerated = 0; 86756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMInitWorkload(pEASData->pVoiceMgr); 86856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 86956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no support for other buffer sizes yet */ 87056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (numRequested != BUFFER_SIZE_IN_MONO_SAMPLES) 87156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 87256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "This library supports only %ld samples in buffer, host requested %ld samples\n", 87356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (EAS_I32) BUFFER_SIZE_IN_MONO_SAMPLES, numRequested); */ } 87456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_BUFFER_SIZE_MISMATCH; 87556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 87656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 87756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 87856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start performance counter */ 87956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 88056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_TOTAL_TIME); 8817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 8827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 88356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* prep the frame buffer, do mix engine prep only if TRUE */ 8847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _SPLIT_ARCHITECTURE 88556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (VMStartFrame(pEASData)) 88656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePrep(pEASData, numRequested); 88756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 88856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* prep the mix engine */ 88956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePrep(pEASData, numRequested); 8907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 8917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 89256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save the output buffer pointer */ 89356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->pOutputAudioBuffer = pOut; 89456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 89556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 89656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 89756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start performance counter */ 89856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 89956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_PARSE_TIME); 9007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 9017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 90256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if we haven't finished parsing from last time, do it now */ 90356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* need to parse another frame of events before we render again */ 90456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (streamNum = 0; streamNum < MAX_NUMBER_STREAMS; streamNum++) 90556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 90656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear the locate flag */ 90756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_LOCATE; 90856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 90956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].pParserModule) 91056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 91156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 91256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* establish pointer to parser module */ 91356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = pEASData->streams[streamNum].pParserModule; 91456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 91556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* handle pause */ 91656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].streamFlags & STREAM_FLAGS_PAUSE) 91756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 91856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfPause) 91956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfPause(pEASData, pEASData->streams[streamNum].handle); 92056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_PAUSE; 92156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 92256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 92356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get current state */ 92456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pEASData->streams[streamNum].handle, &parserState)) != EAS_SUCCESS) 92556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 92656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 92756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* handle resume */ 92856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parserState == EAS_STATE_PAUSED) 92956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 93056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].streamFlags & STREAM_FLAGS_RESUME) 93156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 93256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfResume) 93356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfResume(pEASData, pEASData->streams[streamNum].handle); 93456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_RESUME; 93556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 93656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 93756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 93856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if necessary, parse stream */ 93956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((pEASData->streams[streamNum].streamFlags & STREAM_FLAGS_PARSED) == 0) 94056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseEvents(pEASData, &pEASData->streams[streamNum], pEASData->streams[streamNum].time + pEASData->streams[streamNum].frameLength, eParserModePlay)) != EAS_SUCCESS) 94156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 94256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 94356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for an early abort */ 94456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((pEASData->streams[streamNum].streamFlags) == 0) 94556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 94656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 94756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 94856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop performance counter */ 94956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 95056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_TOTAL_TIME); 9517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 95256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 95356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 95456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 95556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 95656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for repeat */ 95756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].repeatCount) 95856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 95956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 96056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for stopped state */ 96156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pEASData->streams[streamNum].handle, &parserState)) != EAS_SUCCESS) 96256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 96356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parserState == EAS_STATE_STOPPED) 96456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 96556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 96656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* decrement repeat count, unless it is negative */ 96756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].repeatCount > 0) 96856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].repeatCount--; 96956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 97056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the parser */ 97156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfReset)(pEASData, pEASData->streams[streamNum].handle)) != EAS_SUCCESS) 97256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 97356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].time = 0; 97456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 97556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 97656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 97756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 97856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 97956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 98056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop performance counter */ 98156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 98256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_PARSE_TIME); 9837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 9847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 98556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 98656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start the render timer */ 98756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 98856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_RENDER_TIME); 9897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 9907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 99156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* render audio */ 99256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = VMRender(pEASData->pVoiceMgr, BUFFER_SIZE_IN_MONO_SAMPLES, pEASData->pMixBuffer, &voicesRendered)) != EAS_SUCCESS) 99356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 99456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "pfRender function returned error %ld\n", result); */ } 99556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 99656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 9977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 99856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 99956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop the render timer */ 100056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) { 100156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfIncrementCounter)(pEASData->pMetricsData, EAS_PM_FRAME_COUNT, 1); 100256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_RENDER_TIME); 100356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfIncrementCounter)(pEASData->pMetricsData, EAS_PM_TOTAL_VOICE_COUNT, (EAS_U32) voicesRendered); 100456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfRecordMaxValue)(pEASData->pMetricsData, EAS_PM_MAX_VOICES, (EAS_U32) voicesRendered); 100556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 10067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 100856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks //2 Do we really need frameParsed? 100956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* need to parse another frame of events before we render again */ 101056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (streamNum = 0; streamNum < MAX_NUMBER_STREAMS; streamNum++) 101156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->streams[streamNum].pParserModule != NULL) 101256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->streams[streamNum].streamFlags &= ~STREAM_FLAGS_PARSED; 101356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 101456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 101556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start performance counter */ 101656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 101756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_STREAM_TIME); 10187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 102056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* render PCM audio */ 102156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_PERender(pEASData, numRequested)) != EAS_SUCCESS) 102256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 102356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_PERender returned error %ld\n", result); */ } 102456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 102556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 102656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 102756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 102856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop the stream timer */ 102956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 103056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_STREAM_TIME); 103156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 103256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 103356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 103456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* start the post timer */ 103556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 103656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfStartTimer)(pEASData->pMetricsData, EAS_PM_POST_TIME); 10377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 103956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* for split architecture, send DSP vectors. Do post only if return is TRUE */ 10407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _SPLIT_ARCHITECTURE 104156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (VMEndFrame(pEASData)) 104256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 104356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* now do post-processing */ 104456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePost(pEASData, numRequested); 104556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pNumGenerated = numRequested; 104656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 104756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#else 104856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* now do post-processing */ 104956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_MixEnginePost(pEASData, numRequested); 105056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pNumGenerated = numRequested; 10517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 105356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 105456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop the post timer */ 105556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 105656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (void)(*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_POST_TIME); 10577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 105956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* advance render time */ 106056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->renderTime += AUDIO_FRAME_LENGTH; 10617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 10627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#if 0 106356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* dump workload for debug */ 106456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pVoiceMgr->workload) 106556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_DETAIL, "Workload = %d\n", pEASData->pVoiceMgr->workload); */ } 106656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 106756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 106856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 106956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop performance counter */ 107056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pMetricsData) 107156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 107256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks PERF_TIMER temp; 107356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = (*pEASData->pMetricsModule->pfStopTimer)(pEASData->pMetricsData, EAS_PM_TOTAL_TIME); 107456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 107556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if max render time, record the number of voices and time */ 107656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((*pEASData->pMetricsModule->pfRecordMaxValue) 107756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pEASData->pMetricsData, EAS_PM_MAX_CYCLES, (EAS_U32) temp)) 107856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 107956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfRecordValue)(pEASData->pMetricsData, EAS_PM_MAX_CYCLES_VOICES, (EAS_U32) voicesRendered); 108056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (*pEASData->pMetricsModule->pfRecordValue)(pEASData->pMetricsData, EAS_PM_MAX_CYCLES_TIME, (EAS_I32) (pEASData->renderTime >> 8)); 108156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 108256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 10837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 10857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef JET_INTERFACE 108656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* let JET to do its thing */ 108756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->jetHandle != NULL) 108856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 108956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = JET_Process(pEASData); 109056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 109156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 109256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 10937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 10947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 109556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 10967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 10977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 10987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 10997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetRepeat() 11007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 110156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 11027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the selected stream to repeat. 11037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 110556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 110656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 110756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * repeatCount - repeat count 110856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 11097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 11107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 11127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Notes: 111456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 0 = no repeat 111556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1 = repeat once, i.e. play through twice 11167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * -1 = repeat forever 11177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 11187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 11197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, pEASData) reserved for future use */ 11207df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetRepeat (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 repeatCount) 11217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 112256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->repeatCount = repeatCount; 112356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 11247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 11257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 11267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 11277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetRepeat() 11287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 112956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 11307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Gets the current repeat count for the selected stream. 11317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 113356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 113456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 113556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pRrepeatCount - pointer to variable to hold repeat count 113656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 11377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 11387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 11407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Notes: 114256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 0 = no repeat 114356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 1 = repeat once, i.e. play through twice 11447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * -1 = repeat forever 11457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 11467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 11477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, pEASData) reserved for future use */ 11487df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetRepeat (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pRepeatCount) 11497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 115056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pRepeatCount = pStream->repeatCount; 115156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 11527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 11537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 11547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 11557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetPlaybackRate() 11567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 115756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 11587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the playback rate. 11597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 116156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 116256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 116356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * rate - rate (28-bit fractional amount) 116456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 11657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 11667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 11687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 11697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 11707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 11717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, pEASData) reserved for future use */ 11727df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetPlaybackRate (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_U32 rate) 11737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 11747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 117556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check range */ 117656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((rate < (1 << 27)) || (rate > (1 << 29))) 117756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 117856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 117956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate new frame length 118056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 118156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * NOTE: The maximum frame length we can accomodate based on a 118256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * maximum rate of 2.0 (2^28) is 2047 (2^13-1). To accomodate a 118356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * longer frame length or a higher maximum rate, the fixed point 118456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * divide below will need to be adjusted 118556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 118656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->frameLength = (AUDIO_FRAME_LENGTH * (rate >> 8)) >> 20; 118756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 118856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* notify stream of new playback rate */ 118956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SetStreamParameter(pEASData, pStream, PARSER_DATA_PLAYBACK_RATE, (EAS_I32) rate); 119056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 11917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 11927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 11937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 11947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetTransposition) 11957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 119656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 11977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the key tranposition for the synthesizer. Transposes all 11987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * melodic instruments by the specified amount. Range is limited 11997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * to +/-12 semitones. 12007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 120256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 120356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - handle to stream 120456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * transposition - +/-12 semitones 120556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 12067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 12077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 12097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 12117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 12127df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetTransposition (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 transposition) 12137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 12147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 121556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check range */ 121656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((transposition < -12) || (transposition > 12)) 121756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 12187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 121956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 122056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 122156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_TRANSPOSITION, transposition); 12227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 122356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 12257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_ParseEvents() 12267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 12277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Purpose: 12287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Parse events in the current streams until the desired time is reached. 12297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 12317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * pEASData - buffer for internal EAS data 123256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * endTime - stop parsing if this time is reached 123356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * parseMode - play, locate, or metadata 12347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 123656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * EAS_SUCCESS if PCM data was successfully rendered 12377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 12387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 12397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 12407df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT EAS_ParseEvents (S_EAS_DATA *pEASData, EAS_HANDLE pStream, EAS_U32 endTime, EAS_INT parseMode) 12417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 124256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 124356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 124456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 parserState; 124556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL done; 124656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT yieldCount = YIELD_EVENT_COUNT; 124756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 time = 0; 124856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 124956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* does this parser have a time function? */ 125056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = pStream->pParserModule; 125156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfTime == NULL) 125256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 125356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check state */ 125456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &parserState)) != EAS_SUCCESS) 125556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 125656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if play state, advance time */ 125756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((parserState >= EAS_STATE_READY) && (parserState <= EAS_STATE_PAUSING)) 125856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time += pStream->frameLength; 125956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_TRUE; 126056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 126156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 126256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* assume we're not done, in case we abort out */ 126356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 126456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 126556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags &= ~STREAM_FLAGS_PARSED; 126656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_FALSE; 126756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 126856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 126956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (!done) 127056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 127156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 127256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for stopped state */ 127356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &parserState)) != EAS_SUCCESS) 127456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 127556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parserState > EAS_STATE_PLAY) 127656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 127756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* save current time if we're not in play mode */ 127856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (parseMode != eParserModePlay) 127956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = time << 8; 128056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_TRUE; 128156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 128256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 128356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 128456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the next event time */ 128556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfTime) 128656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 128756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfTime)(pEASData, pStream->handle, &time)) != EAS_SUCCESS) 128856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 128956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 129056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if next event is within this frame, parse it */ 129156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (time < (endTime >> 8)) 129256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 129356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 129456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the next event */ 129556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfEvent) 129656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfEvent)(pEASData, pStream->handle, parseMode)) != EAS_SUCCESS) 129756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 129856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 129956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 130056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* no more events in this frame, advance time */ 130156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 130256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 130356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = endTime; 130456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks done = EAS_TRUE; 130556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 130656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 130756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 130856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for max workload exceeded */ 130956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (VMCheckWorkload(pEASData->pVoiceMgr)) 131056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 131156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stop even though we may not have parsed 131256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * all the events in this frame. The parser will try to 131356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * catch up on the next frame. 131456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 131556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 131656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 131756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 131856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* give host a chance for an early abort */ 131956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (--yieldCount == 0) 132056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 132156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_HWYield(pEASData->hwInstData)) 132256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 132356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks yieldCount = YIELD_EVENT_COUNT; 132456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 132556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 132656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 132756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if no early abort, parsing is complete for this frame */ 132856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (done) 132956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_PARSED; 133056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 133156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 13327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 13337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 13347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 13357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_ParseMetaData() 13367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 133756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 133856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 13407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 134156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 134256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 134356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * playLength - pointer to variable to store the play length (in msecs) 134456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 134656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 13477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 13487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 134956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * - resets the parser to the start of the file 13507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 13517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 13527df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_ParseMetaData (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *playLength) 13537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 135456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 135556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 135656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 135756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 135856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 135956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 136056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 136156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 136256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check parser state */ 136356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &state)) != EAS_SUCCESS) 136456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 136556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (state >= EAS_STATE_OPEN) 136656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 136756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 136856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if parser has metadata function, use that */ 136956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfGetMetaData != NULL) 137056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return pParserModule->pfGetMetaData(pEASData, pStream->handle, playLength); 137156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 137256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the parser to the beginning */ 137356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfReset)(pEASData, pStream->handle)) != EAS_SUCCESS) 137456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 137556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 137656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the file to end */ 137756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = 0; 137856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMInitWorkload(pEASData->pVoiceMgr); 137956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseEvents(pEASData, pStream, 0x7fffffff, eParserModeMetaData)) != EAS_SUCCESS) 138056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 138156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 138256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the parser time */ 138356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_GetLocation(pEASData, pStream, playLength)) != EAS_SUCCESS) 138456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 138556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 138656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the parser to the beginning */ 138756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = 0; 138856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pParserModule->pfReset)(pEASData, pStream->handle); 13897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 13907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 13917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 13927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_RegisterMetaDataCallback() 13937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 139456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 139556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Registers a metadata callback function for parsed metadata. 13967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 13977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 139856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 139956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 140056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * cbFunc - pointer to host callback function 140156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * metaDataBuffer - pointer to metadata buffer 140256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * metaDataBufSize - maximum size of the metadata buffer 140356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 140556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 14087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 14107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 14117df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_RegisterMetaDataCallback ( 141256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_DATA_HANDLE pEASData, 141356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HANDLE pStream, 141456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_METADATA_CBFUNC cbFunc, 141556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks char *metaDataBuffer, 141656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 metaDataBufSize, 141756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR pUserData) 14187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 141956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_METADATA_CB metadata; 142056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 142156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 142256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 142356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 142456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* register callback function */ 142556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.callback = cbFunc; 142656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.buffer = metaDataBuffer; 142756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.bufferSize = metaDataBufSize; 142856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks metadata.pUserData = pUserData; 142956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SetStreamParameter(pEASData, pStream, PARSER_DATA_METADATA_CB, (EAS_I32) &metadata); 14307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 14317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 14327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 14337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetNoteCount () 14347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 14357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the total number of notes played in this stream 14367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 14377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 14387df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetNoteCount (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pNoteCount) 14397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 144056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 144156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 144256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntGetStrmParam(pEASData, pStream, PARSER_DATA_NOTE_COUNT, pNoteCount); 14437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 14447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 14457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 14467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_CloseFile() 14477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 144856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 14497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Closes an audio file or stream. Playback should have either paused or 14507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * completed (EAS_State returns EAS_PAUSED or EAS_STOPPED). 14517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 145356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 145456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 145556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 145756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 14607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 14627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 14637df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_CloseFile (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 14647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 146556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 146656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 14677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 146856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* call the close function */ 146956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 147056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 147156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 14727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 147356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = (*pParserModule->pfClose)(pEASData, pStream->handle); 14747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 147556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear the handle and parser interface pointer */ 147656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->handle = NULL; 147756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->pParserModule = NULL; 147856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 147956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 14807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 14817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 14827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_OpenMIDIStream() 14837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 148456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 14857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Opens a raw MIDI stream allowing the host to route MIDI cable data directly to the synthesizer 14867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 148856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 148956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pHandle - pointer to variable to hold file or stream handle 149056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 149256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 14937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 14957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 14967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 14977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 14987df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_OpenMIDIStream (EAS_DATA_HANDLE pEASData, EAS_HANDLE *ppStream, EAS_HANDLE streamHandle) 14997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 150056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 150156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_INTERACTIVE_MIDI *pMIDIStream; 150256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT streamNum; 150356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 150456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize some pointers */ 150556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = NULL; 150656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 150756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate a stream */ 150856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((streamNum = EAS_AllocateStream(pEASData)) < 0) 150956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MAX_STREAMS_OPEN; 151056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 151156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check Configuration Module for S_EAS_DATA allocation */ 151256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->staticMemoryModel) 151356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = EAS_CMEnumData(EAS_CM_MIDI_STREAM_DATA); 151456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 151556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = EAS_HWMalloc(pEASData->hwInstData, sizeof(S_INTERACTIVE_MIDI)); 151656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 151756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate dynamic memory */ 151856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pMIDIStream) 151956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 152056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Failed to allocate MIDI stream data\n"); */ } 152156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_MALLOC_FAILED; 152256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 152356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 152456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* zero the memory to insure complete initialization */ 152556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWMemSet(pMIDIStream, 0, sizeof(S_INTERACTIVE_MIDI)); 152656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitStream(&pEASData->streams[streamNum], NULL, pMIDIStream); 152756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 152856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* instantiate a new synthesizer */ 152956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (streamHandle == NULL) 153056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 153156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = VMInitMIDI(pEASData, &pMIDIStream->pSynth); 153256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 153356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 153456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* use an existing synthesizer */ 153556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 153656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 153756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 value; 153856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_GetStreamParameter(pEASData, streamHandle, PARSER_DATA_SYNTH_HANDLE, &value); 153956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream->pSynth = (S_SYNTH*) value; 154056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMIncRefCount(pMIDIStream->pSynth); 154156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 154256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 154356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 154456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_CloseMIDIStream(pEASData, &pEASData->streams[streamNum]); 154556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 154656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 154756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 154856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize the MIDI stream data */ 154956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_InitMIDIStream(&pMIDIStream->stream); 155056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 155156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *ppStream = (EAS_HANDLE) &pEASData->streams[streamNum]; 155256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 155356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks} 15547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 15557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 15567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_WriteMIDIStream() 15577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 155856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 15597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Send data to the MIDI stream device 15607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 156256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 156356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - stream handle 156456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pBuffer - pointer to buffer 156556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * count - number of bytes to write 156656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 156856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 15697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 15717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 15737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 15747df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_WriteMIDIStream (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_U8 *pBuffer, EAS_I32 count) 15757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 157656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_INTERACTIVE_MIDI *pMIDIStream; 157756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 15787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 157956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = (S_INTERACTIVE_MIDI*) pStream->handle; 15807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 158156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (count <= 0) 158256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_PARAMETER_RANGE; 15837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 158456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* send the entire buffer */ 158556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (count--) 158656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 158756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseMIDIStream(pEASData, pMIDIStream->pSynth, &pMIDIStream->stream, *pBuffer++, eParserModePlay)) != EAS_SUCCESS) 158856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 158956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 159056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 15917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 15927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 15937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 15947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_CloseMIDIStream() 15957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 159656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 15977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Closes a raw MIDI stream 15987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 15997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 160056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 160156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - stream handle 160256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 16037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 160456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 16057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 16077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 16097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 16107df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_CloseMIDIStream (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 16117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 161256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_INTERACTIVE_MIDI *pMIDIStream; 16137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 161456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream = (S_INTERACTIVE_MIDI*) pStream->handle; 16157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 161656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close synth */ 161756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pMIDIStream->pSynth != NULL) 161856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 161956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMMIDIShutdown(pEASData, pMIDIStream->pSynth); 162056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pMIDIStream->pSynth = NULL; 162156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 16227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 162356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* release allocated memory */ 162456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->staticMemoryModel) 162556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWFree(((S_EAS_DATA*) pEASData)->hwInstData, pMIDIStream); 16267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 162756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->handle = NULL; 162856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 16297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 16307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 16317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 16327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_State() 16337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 163456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 163556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the state of an audio file or stream. 16367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 163856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 163956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 164056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 16417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 164256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 16437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 16457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 16477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 16487df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_State (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_STATE *pState) 16497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 165056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 165156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 165256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 165356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* call the parser to return state */ 165456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 165556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 165656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 165756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 165856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, pState)) != EAS_SUCCESS) 165956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 166056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 166156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if repeat count is set for this parser, mask the stopped state from the application */ 166256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->repeatCount && (*pState == EAS_STATE_STOPPED)) 166356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PLAY; 166456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16653e2bd1f02bee702639966852fc0456d84023865fMarco Nelissen /* if we're not paused or pausing, we don't need to hide state from host */ 16663e2bd1f02bee702639966852fc0456d84023865fMarco Nelissen if (*pState != EAS_STATE_PAUSED && *pState != EAS_STATE_PAUSING) 166756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 166856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 166956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if stream is about to be paused, report it as paused */ 167056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->streamFlags & STREAM_FLAGS_PAUSE) 167156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 167256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->streamFlags & STREAM_FLAGS_LOCATE) 167356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PAUSED; 167456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 167556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PAUSING; 167656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 167756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 167856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if stream is about to resume, report it as playing */ 167956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream->streamFlags & STREAM_FLAGS_RESUME) 168056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pState = EAS_STATE_PLAY; 168156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 168256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 16837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 16847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 16857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 16867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetPolyphony() 16877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 168856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 16897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the polyphony of the stream. A value of 0 allows the stream 16907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * to use all voices (set by EAS_SetSynthPolyphony). 16917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 169356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 169456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 169556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount - the desired polyphony count 169656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 16977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 16987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 16997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 17007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 17027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 17037df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetPolyphony (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 polyphonyCount) 17047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 170556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 170656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 170756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_POLYPHONY, polyphonyCount); 17087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 17097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 17107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 17117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetPolyphony() 17127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 171356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 17147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the current polyphony setting of the stream 17157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 171756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 171856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 171956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPolyphonyCount - pointer to variable to receive polyphony count 172056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 17227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 17247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 17267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 17277df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetPolyphony (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pPolyphonyCount) 17287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 172956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 173056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 173156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntGetStrmParam(pEASData, pStream, PARSER_DATA_POLYPHONY, pPolyphonyCount); 17327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 17337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 17347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 17357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetSynthPolyphony() 17367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 173756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 17387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the polyphony of the synth . Value must be >= 1 and <= the 17397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * maximum number of voices. This function will pin the polyphony 17407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * at those limits 17417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 174356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 174456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * synthNum - synthesizer number (0 = onboard, 1 = DSP) 174556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount - the desired polyphony count 174656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 17487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 17507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 17527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 17537df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetSynthPolyphony (EAS_DATA_HANDLE pEASData, EAS_I32 synthNum, EAS_I32 polyphonyCount) 17547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 175556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetSynthPolyphony(pEASData->pVoiceMgr, synthNum, polyphonyCount); 17567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 17577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 17587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 17597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetSynthPolyphony() 17607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 176156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 17627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the current polyphony setting of the synth 17637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 176556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 176656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * synthNum - synthesizer number (0 = onboard, 1 = DSP) 176756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPolyphonyCount - pointer to variable to receive polyphony count 176856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 17707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 17727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 17747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 17757df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetSynthPolyphony (EAS_DATA_HANDLE pEASData, EAS_I32 synthNum, EAS_I32 *pPolyphonyCount) 17767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 177756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMGetSynthPolyphony(pEASData->pVoiceMgr, synthNum, pPolyphonyCount); 17787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 17797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 17807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 17817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetPriority() 17827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 178356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 17847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the priority of the stream. Determines which stream's voices 17857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * are stolen when there are insufficient voices for all notes. 17867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Value must be in the range of 1-15, lower values are higher 17877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * priority. 17887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 179056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 179156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 179256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * polyphonyCount - the desired polyphony count 179356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 17947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 17957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 17977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 17987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 17997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 18007df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetPriority (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 priority) 18017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 180256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 180356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 180456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_PRIORITY, priority); 18057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 18067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 18077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 18087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetPriority() 18097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 181056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 18117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the current priority setting of the stream 18127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 181456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 181556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 181656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pPriority - pointer to variable to receive priority 181756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 18187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 18197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 18217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 18237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 18247df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetPriority (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pPriority) 18257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 182656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 182756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 182856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntGetStrmParam(pEASData, pStream, PARSER_DATA_PRIORITY, pPriority); 18297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 18307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 18317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 18327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetVolume() 18337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 183456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 18357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the master gain for the mix engine in 1dB increments 18367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 183856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 183956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * volume - the desired master gain (100 is max) 184056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 184156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 18427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 18437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 18467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * overrides any previously set master volume from sysex 18477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 18497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 18507df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetVolume (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 volume) 18517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 185256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I16 gain; 185356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 185456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check range */ 185556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((volume < 0) || (volume > EAS_MAX_VOLUME)) 185656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_PARAMETER_RANGE; 185756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 185856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* stream volume */ 185956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream != NULL) 186056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 186156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 gainOffset; 186256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 186356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 186456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 186556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 186656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 186756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get gain offset */ 186856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->volume = (EAS_U8) volume; 186956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_GAIN_OFFSET, &gainOffset); 187056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 187156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks volume += gainOffset; 187256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 187356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set stream volume */ 187456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks gain = EAS_VolumeToGain(volume - STREAM_VOLUME_HEADROOM); 187556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 187656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* convert to linear scalar */ 187756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_VOLUME, gain); 187856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 187956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 188056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* master volume */ 188156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->masterVolume = (EAS_U8) volume; 18827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#if (NUM_OUTPUT_CHANNELS == 1) 188356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* leave 3dB headroom for mono output */ 188456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks volume -= 3; 18857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 18867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 188756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks gain = EAS_VolumeToGain(volume - STREAM_VOLUME_HEADROOM); 188856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->masterGain = gain; 188956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 18907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 18917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 18927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 18937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetVolume() 18947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 189556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 18967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the master volume for the synthesizer. The default volume setting is 18977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 50. The volume range is 0 to 100; 18987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 18997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 190056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 190156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * volume - the desired master volume 190256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 190356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 19057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 19087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * overrides any previously set master volume from sysex 19097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 19127df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_I32 EAS_GetVolume (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 19137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 191456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream == NULL) 191556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return pEASData->masterVolume; 191656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 191756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 191856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 191956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return pStream->volume; 19207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 19217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 19227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 19237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetMaxLoad() 19247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 192556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 19267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the maximum workload the parsers will do in a single call to 19277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Render. The units are currently arbitrary, but should correlate 19287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * well to the actual CPU cycles consumed. The primary effect is to 19297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * reduce the occasional peaks in CPU cycles consumed when parsing 193056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * dense parts of a MIDI score. 19317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 193356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - handle to data for this instance 193456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * maxLoad - the desired maximum workload 193556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 19377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 19397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 19427df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetMaxLoad (EAS_DATA_HANDLE pEASData, EAS_I32 maxLoad) 19437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 194456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMSetWorkload(pEASData->pVoiceMgr, maxLoad); 194556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 19467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 19477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 19487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 19497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetMaxPCMStreams() 19507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the maximum number of PCM streams allowed in parsers that 19527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * use PCM streaming. 19537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 195556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 195656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * streamHandle - handle returned by EAS_OpenFile 195756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * maxNumStreams - maximum number of PCM streams 19587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 19607df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetMaxPCMStreams (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 maxNumStreams) 19617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 196256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 196356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 196456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_MAX_PCM_STREAMS, maxNumStreams); 19657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 19667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 19677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 19687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Locate() 19697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 197056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 19717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Locate into the file associated with the handle. 19727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 19747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * pEASData - pointer to overall EAS data structure 197556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file handle 197656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * milliseconds - playback offset from start of file in milliseconds 197756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 197956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 19807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 19827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * the actual offset will be quantized to the closest update period, typically 19837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * a resolution of 5.9ms. Notes that are started prior to this time will not 19847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * sound. Any notes currently playing will be shut off. 19857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 19867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 19877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 19887df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Locate (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 milliseconds, EAS_BOOL offset) 19897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 199056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 199156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 199256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U32 requestedTime; 199356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 199456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 199556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get pointer to parser function table */ 199656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 199756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 199856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 199956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 200056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfState)(pEASData, pStream->handle, &state)) != EAS_SUCCESS) 200156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 200256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (state >= EAS_STATE_OPEN) 200356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 200456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 200556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* handle offset and limit to start of file */ 200656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{704} use shift for performance*/ 200756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (offset) 200856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks milliseconds += (EAS_I32) pStream->time >> 8; 200956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (milliseconds < 0) 201056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks milliseconds = 0; 201156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 201256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check to see if the request is different from the current time */ 201356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks requestedTime = (EAS_U32) milliseconds; 201456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (requestedTime == (pStream->time >> 8)) 201556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 201656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 201756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set the locate flag */ 201856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_LOCATE; 201956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 202056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* use the parser locate function, if available */ 202156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfLocate != NULL) 202256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 202356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_BOOL parserLocate = EAS_FALSE; 202456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfLocate(pEASData, pStream->handle, (EAS_I32) requestedTime, &parserLocate); 202556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!parserLocate) 202656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 202756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 202856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = requestedTime << 8; 202956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 203056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 203156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 203256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 203356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if we were paused and not going to resume, set pause request flag */ 203456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (((state == EAS_STATE_PAUSING) || (state == EAS_STATE_PAUSED)) && ((pStream->streamFlags & STREAM_FLAGS_RESUME) == 0)) 203556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_PAUSE; 203656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 203756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* reset the synth and parser */ 203856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = (*pParserModule->pfReset)(pEASData, pStream->handle)) != EAS_SUCCESS) 203956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 204056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->time = 0; 204156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 204256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* locating forward, clear parsed flag and parse data until we get to the requested location */ 204356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseEvents(pEASData, pStream, requestedTime << 8, eParserModeLocate)) != EAS_SUCCESS) 204456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 204556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 204656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 20477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 20487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 20497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 20507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetLocation() 20517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 205256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 205356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current playback offset 20547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 205656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 205756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file handle 205856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 20607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * The offset in milliseconds from the start of the current sequence, quantized 20617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * to the nearest update period. Actual resolution is typically 5.9 ms. 20627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 20647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 20667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 20677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*lint -esym(715, pEASData) reserved for future use */ 20687df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetLocation (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 *pTime) 20697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 207056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 207156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 20727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 207356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pTime = pStream->time >> 8; 207456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 20757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 20767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 20777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 20787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetRenderTime() 20797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 208056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 208156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Returns the current playback offset 20827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 208456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 208556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 20867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 20877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Gets the render time clock in msecs. 20887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 20907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 20917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 20927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 20937df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetRenderTime (EAS_DATA_HANDLE pEASData, EAS_I32 *pTime) 20947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 209556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pTime = pEASData->renderTime >> 8; 209656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 20977df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 20987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 20997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 21007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Pause() 21017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 210256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 21037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Pauses the playback of the data associated with this handle. The audio 21047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * is gracefully ramped down to prevent clicks and pops. It may take several 21057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * buffers of audio before the audio is muted. 21067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 210856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 210956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 211056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 211256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 21157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 21187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 21197df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Pause (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 21207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 212156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 212256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 212356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 212456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 212556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 212656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 212756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 212856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 212956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for valid state */ 213056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfState(pEASData, pStream->handle, &state); 213156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 213256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 213356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((state != EAS_STATE_PLAY) && (state != EAS_STATE_READY) && ((pStream->streamFlags & STREAM_FLAGS_RESUME) == 0)) 213456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 213556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 213656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure parser implements pause */ 213756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfPause == NULL) 213856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 213956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 214056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear resume flag */ 214156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags &= ~STREAM_FLAGS_RESUME; 214256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 214356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set pause flag */ 214456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_PAUSE; 214556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 214656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if 0 214756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* pause the stream */ 214856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfPause) 214956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfPause(pEASData, pStream->handle); 215056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 215156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 215256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 215356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 215456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 215556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 21567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 21577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 21587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 21597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_Resume() 21607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 216156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 21627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Resumes the playback of the data associated with this handle. The audio 21637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * is gracefully ramped up to prevent clicks and pops. 21647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 216656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 216756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 216856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 217056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 21737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 21757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 21767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 21777df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_Resume (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream) 21787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 217956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_FILE_PARSER_INTERFACE *pParserModule; 218056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 218156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 218256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 218356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pParserModule = (S_FILE_PARSER_INTERFACE*) pStream->pParserModule; 218456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule == NULL) 218556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_FEATURE_NOT_AVAILABLE; 218656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 218756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for valid state */ 218856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfState(pEASData, pStream->handle, &state); 218956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 219056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 219156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((state != EAS_STATE_PAUSED) && (state != EAS_STATE_PAUSING) && ((pStream->streamFlags & STREAM_FLAGS_PAUSE) == 0)) 219256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 219356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 219456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure parser implements this function */ 219556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfResume == NULL) 219656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 219756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 219856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* clear pause flag */ 219956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags &= ~STREAM_FLAGS_PAUSE; 220056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 220156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set resume flag */ 220256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pStream->streamFlags |= STREAM_FLAGS_RESUME; 220356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 220456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#if 0 220556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* resume the stream */ 220656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pParserModule->pfResume) 220756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = pParserModule->pfResume(pEASData, pStream->handle); 220856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 220956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_ERROR_NOT_IMPLEMENTED; 221056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#endif 221156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 221256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 221356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 22147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 22157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 22167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 22177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetParameter() 22187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 221956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 22207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the parameter of a module. See E_MODULES for a list of modules 22217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * and the header files of the modules for a list of parameters. 22227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 222456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 222556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 222656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * module - enumerated module number 222756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * param - enumerated parameter number 222856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pValue - pointer to variable to receive parameter value 222956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 223156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 22347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 22377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 22387df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetParameter (EAS_DATA_HANDLE pEASData, EAS_I32 module, EAS_I32 param, EAS_I32 *pValue) 22397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 22407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 224156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (module >= NUM_EFFECTS_MODULES) 224256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 224356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 224456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->effectsModules[module].effectData == NULL) 224556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 224656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 224756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->effectsModules[module].effect->pFGetParam) 224856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pEASData->effectsModules[module].effectData, param, pValue); 22497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 22507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 22517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 22527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetParameter() 22537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 225456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 22557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Set the parameter of a module. See E_MODULES for a list of modules 22567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * and the header files of the modules for a list of parameters. 22577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 225956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * psEASData - pointer to overall EAS data structure 226056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 226156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * module - enumerated module number 226256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * param - enumerated parameter number 226356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * value - new parameter value 226456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 226656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 22697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 22727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 22737df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetParameter (EAS_DATA_HANDLE pEASData, EAS_I32 module, EAS_I32 param, EAS_I32 value) 22747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 22757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 227656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (module >= NUM_EFFECTS_MODULES) 227756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 22787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 227956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->effectsModules[module].effectData == NULL) 228056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 228156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 228256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->effectsModules[module].effect->pFSetParam) 228356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pEASData->effectsModules[module].effectData, param, value); 22847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 22857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 228656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#ifdef _METRICS_ENABLED 22877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 22887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_MetricsReport() 22897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 229056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 22917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Displays the current metrics through the metrics interface. 22927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 229456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * p - instance data handle 229556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 229756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 22987df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 22997df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 23007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 23037df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_MetricsReport (EAS_DATA_HANDLE pEASData) 23047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 230556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->pMetricsModule) 230656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 23077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 230856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->pMetricsModule->pfReport)(pEASData->pMetricsData); 23097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 23107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 23117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 23127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_MetricsReset() 23137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 231456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 23157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Resets the metrics. 23167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 231856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * p - instance data handle 231956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 23207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 232156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 23227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 23247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 23277df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_MetricsReset (EAS_DATA_HANDLE pEASData) 23287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 23297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 233056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!pEASData->pMetricsModule) 233156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_MODULE; 23327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 233356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return (*pEASData->pMetricsModule->pfReset)(pEASData->pMetricsData); 23347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 23357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 23367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 23377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 23387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetSoundLibrary() 23397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 234056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 23417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the location of the sound library. 23427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 234456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 234556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSoundLib - pointer to sound library 234656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 23477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 234856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 23497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 23517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 23547df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetSoundLibrary (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_SNDLIB_HANDLE pSndLib) 23557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 235656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream) 235756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 235856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 235956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 236056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_EAS_LIBRARY, (EAS_I32) pSndLib); 236156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 236256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 236356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return VMSetGlobalEASLib(pEASData->pVoiceMgr, pSndLib); 23647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 23657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 23667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 23677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetHeaderSearchFlag() 23687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * By default, when EAS_OpenFile is called, the parsers check the 23707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * first few bytes of the file looking for a specific header. Some 23717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * mobile devices may add a header to the start of a file, which 23727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * will prevent the parser from recognizing the file. If the 23737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * searchFlag is set to EAS_TRUE, the parser will search the entire 23747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * file looking for the header. This may enable EAS to recognize 23757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * some files that it would ordinarily reject. The negative is that 23767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * it make take slightly longer to process the EAS_OpenFile request. 23777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 237956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 238056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * searchFlag - search flag (EAS_TRUE or EAS_FALSE) 23817df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 23837df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetHeaderSearchFlag (EAS_DATA_HANDLE pEASData, EAS_BOOL searchFlag) 23847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 238556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->searchHeaderFlag = (EAS_BOOL8) searchFlag; 238656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 23877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 23887df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 23897df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 23907df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetPlayMode() 23917df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 23927df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Some file formats support special play modes, such as iMode partial 23937df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * play mode. This call can be used to change the play mode. The 23947df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * default play mode (usually straight playback) is always zero. 23957df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 23967df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 239756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 239856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 239956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * playMode - play mode (see file parser for specifics) 24007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 24027df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetPlayMode (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_I32 playMode) 24037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 240456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_PLAY_MODE, playMode); 24057df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 24067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 24077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef DLS_SYNTHESIZER 24087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 24097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_LoadDLSCollection() 24107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 241156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 24127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the location of the sound library. 24137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 241556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 241656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pSoundLib - pointer to sound library 241756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 241956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 24227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 24257df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_LoadDLSCollection (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_FILE_LOCATOR locator) 24267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 242756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE_HANDLE fileHandle; 242856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 242956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_DLSLIB_HANDLE pDLS; 243056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 243156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream != NULL) 243256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 243356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 243456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 243556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 243656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 243756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* open the file */ 243856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_HWOpenFile(pEASData->hwInstData, locator, &fileHandle, EAS_FILE_READ)) != EAS_SUCCESS) 243956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 244056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 244156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* parse the file */ 244256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = DLSParser(pEASData->hwInstData, fileHandle, 0, &pDLS); 244356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HWCloseFile(pEASData->hwInstData, fileHandle); 244456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 244556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 244656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 244756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 244856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* if a stream pStream is specified, point it to the DLS collection */ 244956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pStream) 245056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_IntSetStrmParam(pEASData, pStream, PARSER_DATA_DLS_COLLECTION, (EAS_I32) pDLS); 245156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 245256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* global DLS load */ 245356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 245456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = VMSetGlobalDLSLib(pEASData, pDLS); 245556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 245656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 245756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 24587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 24597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 24607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 24617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef EXTERNAL_AUDIO 24627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 24637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_RegExtAudioCallback() 24647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 246556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 24667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Registers callback functions for audio events. 24677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 246956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 247056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 247156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * cbProgChgFunc - pointer to host callback function for program change 247256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * cbEventFunc - pointer to host callback functio for note events 247356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 247556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 24767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 24787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 24797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 24807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 24817df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_RegExtAudioCallback (EAS_DATA_HANDLE pEASData, 248256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HANDLE pStream, 248356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_VOID_PTR pInstData, 248456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_EXT_PRG_CHG_FUNC cbProgChgFunc, 248556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_EXT_EVENT_FUNC cbEventFunc) 24867df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 248756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; 248856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 248956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 249056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 249156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 249256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_SYNTH_HANDLE, (EAS_I32*) &pSynth) != EAS_SUCCESS) 249356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 249456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 249556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pSynth == NULL) 249656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 249756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 249856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMRegExtAudioCallback(pSynth, pInstData, cbProgChgFunc, cbEventFunc); 249956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 25007df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 25017df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 25027df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 25037df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_GetMIDIControllers() 25047df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 250556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 25067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns the current state of MIDI controllers on the requested channel. 25077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 250956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to overall EAS data structure 251056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * handle - file or stream handle 251156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pControl - pointer to structure to receive data 251256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 25137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 251456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 25157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 25177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 25207df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_GetMIDIControllers (EAS_DATA_HANDLE pEASData, EAS_HANDLE pStream, EAS_U8 channel, S_MIDI_CONTROLLERS *pControl) 25217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 252256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks S_SYNTH *pSynth; 252356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 252456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EAS_StreamReady(pEASData, pStream)) 252556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_NOT_VALID_IN_THIS_STATE; 252656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 252756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (EAS_GetStreamParameter(pEASData, pStream, PARSER_DATA_SYNTH_HANDLE, (EAS_I32*) &pSynth) != EAS_SUCCESS) 252856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 252956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 253056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pSynth == NULL) 253156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_ERROR_INVALID_PARAMETER; 253256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 253356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks VMGetMIDIControllers(pSynth, channel, pControl); 253456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 25357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 25367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 25377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 25387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _SPLIT_ARCHITECTURE 25397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 25407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SetFrameBuffer() 25417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 254256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 25437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Sets the frame buffer pointer passed to the IPC communications functions 25447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25457df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 254656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - instance data handle 254756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * locator - file locator 254856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 25497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 255056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 25517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 25537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * May overlay instruments in the GM sound set 25547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25557df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 25577df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_PUBLIC EAS_RESULT EAS_SetFrameBuffer (EAS_DATA_HANDLE pEASData, EAS_FRAME_BUFFER_HANDLE pFrameBuffer) 25587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 255956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pEASData->pVoiceMgr) 256056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pEASData->pVoiceMgr->pFrameBuffer = pFrameBuffer; 256156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 25627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 25637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 25647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 25657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 25667df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EAS_SearchFile 25677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Search file for specific sequence starting at current file 25697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * position. Returns offset to start of sequence. 25707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 257256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pEASData - pointer to EAS persistent data object 257356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * fileHandle - file handle 257456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * searchString - pointer to search sequence 257556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * len - length of search sequence 257656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pOffset - pointer to variable to store offset to sequence 25777df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 25787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Returns EAS_EOF if end-of-file is reached 25797df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 25807df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 25817df30109963092559d3760c0661a020f9daf1030The 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) 25827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 258356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result; 258456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT index; 258556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_U8 c; 258656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 258756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pOffset = -1; 258856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks index = 0; 258956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (;;) 259056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 259156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_HWGetByte(pEASData->hwInstData, fileHandle, &c); 259256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 259356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 259456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (c == searchString[index]) 259556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 259656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks index++; 259756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (index == 4) 259856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 259956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_HWFilePos(pEASData->hwInstData, fileHandle, pOffset); 260056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result != EAS_SUCCESS) 260156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 260256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *pOffset -= len; 260356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 260456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 260556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 260656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 260756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks index = 0; 260856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 260956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_SUCCESS; 26107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} 26117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 26127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 2613