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