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