17df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 27df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * File: 47df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * eas_main.c 57df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 67df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Contents and purpose: 77df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * The entry point and high-level functions for the EAS Synthesizer test 87df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * harness. 956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Copyright Sonic Network Inc. 2004 117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 137df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * you may not use this file except in compliance with the License. 147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * You may obtain a copy of the License at 157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 197df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * See the License for the specific language governing permissions and 227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * limitations under the License. 237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Revision Control: 267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * $Revision: 775 $ 277df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * $Date: 2007-07-20 10:11:11 -0700 (Fri, 20 Jul 2007) $ 287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 307df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 317df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifdef _lint 327df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "lint_stdlib.h" 337df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#else 347df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <stdio.h> 357df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <string.h> 367df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <stdlib.h> 377df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include <time.h> 387df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 397df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 407df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas.h" 417df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_wave.h" 427df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#include "eas_report.h" 437df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 447df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* determines how many EAS buffers to fill a host buffer */ 4556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks#define NUM_BUFFERS 8 467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 477df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* default file to play if no filename is specified on the command line */ 487df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic const char defaultTestFile[] = "test.mid"; 497df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 507df30109963092559d3760c0661a020f9daf1030The Android Open Source ProjectEAS_I32 polyphony; 517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* prototypes for helper functions */ 537df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic void StrCopy(char *dest, const char *src, EAS_I32 size); 547df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_BOOL ChangeFileExt(char *str, const char *ext, EAS_I32 size); 557df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT PlayFile (EAS_DATA_HANDLE easData, const char* filename, const char* outputFile, const S_EAS_LIB_CONFIG *pLibConfig, void *buffer, EAS_I32 bufferSize); 567df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_BOOL EASLibraryCheck (const S_EAS_LIB_CONFIG *pLibConfig); 577df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 587df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/* main is defined after playfile to avoid the need for two passes through lint */ 597df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * PlayFile() 627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 6356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * This function plays the file requested by filename 6556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 6656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 6756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 687df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 697df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 707df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 717df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 737df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_RESULT PlayFile (EAS_DATA_HANDLE easData, const char* filename, const char* outputFile, const S_EAS_LIB_CONFIG *pLibConfig, void *buffer, EAS_I32 bufferSize) 747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 7556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_HANDLE handle; 7656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result, reportResult; 7756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 count; 7856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_STATE state; 7956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 playTime; 8056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks char waveFilename[256]; 8156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks WAVE_FILE *wFile; 8256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_INT i; 8356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_PCM *p; 8456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_FILE file; 8556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 8656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* determine the name of the output file */ 8756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks wFile = NULL; 8856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (outputFile == NULL) 8956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 9056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks StrCopy(waveFilename, filename, sizeof(waveFilename)); 9156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!ChangeFileExt(waveFilename, "wav", sizeof(waveFilename))) 9256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 9356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error in output filename %s\n", waveFilename); */ } 9456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 9556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 9656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks outputFile = waveFilename; 9756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 9856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 9956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* call EAS library to open file */ 10056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file.path = filename; 10156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks file.fd = 0; 10256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((reportResult = EAS_OpenFile(easData, &file, &handle)) != EAS_SUCCESS) 10356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 10456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_OpenFile returned %ld\n", reportResult); */ } 10556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return reportResult; 10656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 10756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 10856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* prepare to play the file */ 10956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_Prepare(easData, handle)) != EAS_SUCCESS) 11056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 11156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_Prepare returned %ld\n", result); */ } 11256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 11356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 11456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 11556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get play length */ 11656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_ParseMetaData(easData, handle, &playTime)) != EAS_SUCCESS) 11756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 11856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_ParseMetaData returned %ld\n", result); */ } 11956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 12056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 12156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_ReportEx(_EAS_SEVERITY_NOFILTER, 0xe624f4d9, 0x00000005 , playTime / 1000, playTime % 1000); 12256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 12356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 12456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 12556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* create the output file */ 12656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks wFile = WaveFileCreate(outputFile, pLibConfig->numChannels, pLibConfig->sampleRate, sizeof(EAS_PCM) * 8); 12756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!wFile) 12856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 12956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Unable to create output file %s\n", waveFilename); */ } 13056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = EAS_FAILURE; 13156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 13256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 13356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 13456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* rendering loop */ 13556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks while (reportResult == EAS_SUCCESS) 13656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 13756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 13856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* we may render several buffers here to fill one host buffer */ 13956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 0, p = buffer; i < NUM_BUFFERS; i++, p+= pLibConfig->mixBufferSize * pLibConfig->numChannels) 14056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 14156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 14256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the current time */ 14356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_GetLocation(easData, handle, &playTime)) != EAS_SUCCESS) 14456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 14556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_GetLocation returned %d\n",result); */ } 14656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 14756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 14856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 14956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 15056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_DETAIL, "Parser time: %d.%03d\n", playTime / 1000, playTime % 1000); */ } 15156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 15256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* render a buffer of audio */ 15356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_Render(easData, p, pLibConfig->mixBufferSize, &count)) != EAS_SUCCESS) 15456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 15556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_Render returned %d\n",result); */ } 15656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 15756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 15856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 15956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 16056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 16156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (result == EAS_SUCCESS) 16256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 16356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* write it to the wave file */ 16456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (WaveFileWrite(wFile, buffer, bufferSize) != bufferSize) 16556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 16656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "WaveFileWrite failed\n"); */ } 16756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = EAS_FAILURE; 16856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 16956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 17056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 17156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 17256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 17356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check stream state */ 17456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_State(easData, handle, &state)) != EAS_SUCCESS) 17556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 17656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_State returned %d\n", result); */ } 17756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks reportResult = result; 17856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 17956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* is playback complete */ 18156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((state == EAS_STATE_STOPPED) || (state == EAS_STATE_ERROR)) 18256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 18356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 18456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 18556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 18656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close the output file */ 18756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (wFile) 18856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 18956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!WaveFileClose(wFile)) 19056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 19156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error closing wave file %s\n", waveFilename); */ } 19256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 19356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_FAILURE; 19456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 19556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 19656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 19756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close the input file */ 19856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_CloseFile(easData,handle)) != EAS_SUCCESS) 19956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 20056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "EAS_Close returned %ld\n", result); */ } 20156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (reportResult == EAS_SUCCESS) 20256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks result = EAS_FAILURE; 20356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 20456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 20556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return reportResult; 2067df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} /* end PlayFile */ 2077df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 2087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 2097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * main() 2107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 2117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Purpose: The entry point for the EAS sample application 21256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 21356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 21456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 2157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 2167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 2177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 2187df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 2197df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectint main( int argc, char **argv ) 2207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 22156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_DATA_HANDLE easData; 22256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks const S_EAS_LIB_CONFIG *pLibConfig; 22356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks void *buffer; 22456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_RESULT result, playResult; 22556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_I32 bufferSize; 22656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int i; 22756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int temp; 22856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks FILE *debugFile; 22956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks char *outputFile = NULL; 23056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* set the error reporting level */ 23256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SetDebugLevel(_EAS_SEVERITY_INFO); 23356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks debugFile = NULL; 23456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 23556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* process command-line arguments */ 23656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 1; i < argc; i++) 23756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 23856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for switch */ 23956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (argv[i][0] == '-') 24056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 24156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks switch (argv[i][1]) 24256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 24356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case 'd': 24456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks temp = argv[i][2]; 24556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((temp >= '0') || (temp <= '9')) 24656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SetDebugLevel(temp); 24756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 24856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Invalid debug level %d\n", temp); */ } 24956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 25056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case 'f': 25156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((debugFile = fopen(&argv[i][2],"w")) == NULL) 25256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_WARNING, "Unable to create debug file %s\n", &argv[i][2]); */ } 25356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 25456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks EAS_SetDebugFile(debugFile, EAS_TRUE); 25556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 25656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case 'o': 25756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks outputFile = &argv[i][2]; 25856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 25956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks case 'p': 26056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks polyphony = atoi(&argv[i][2]); 26156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (polyphony < 1) 26256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks polyphony = 1; 26356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "Polyphony set to %d\n", polyphony); */ } 26456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 26556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks default: 26656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 26756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 26856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks continue; 26956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 27056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 27156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 27256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* assume success */ 27356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks playResult = EAS_SUCCESS; 27456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 27556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* get the library configuration */ 27656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pLibConfig = EAS_Config(); 27756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!EASLibraryCheck(pLibConfig)) 27856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return -1; 27956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (polyphony > pLibConfig->maxVoices) 28056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks polyphony = pLibConfig->maxVoices; 28156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 28256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* calculate buffer size */ 28356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks bufferSize = pLibConfig->mixBufferSize * pLibConfig->numChannels * (EAS_I32)sizeof(EAS_PCM) * NUM_BUFFERS; 28456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 28556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* allocate output buffer memory */ 28656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks buffer = malloc((EAS_U32)bufferSize); 28756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!buffer) 28856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 28956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Error allocating memory for audio buffer\n"); */ } 29056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FAILURE; 29156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 29256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 29356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* initialize the EAS library */ 29456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks polyphony = pLibConfig->maxVoices; 29556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_Init(&easData)) != EAS_SUCCESS) 29656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 29756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "EAS_Init returned %ld - aborting!\n", result); */ } 29856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks free(buffer); 29956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 30056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 30156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 30256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* 30356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Some debugging environments don't allow for passed parameters. 30456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * In this case, just play the default MIDI file "test.mid" 30556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks */ 30656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (argc < 2) 30756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 30856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "Playing '%s'\n", defaultTestFile); */ } 30956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((playResult = PlayFile(easData, defaultTestFile, NULL, pLibConfig, buffer, bufferSize)) != EAS_SUCCESS) 31056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 31156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %d playing file %s\n", playResult, defaultTestFile); */ } 31256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 31356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 31456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* iterate through the list of files to be played */ 31556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks else 31656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 31756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks for (i = 1; i < argc; i++) 31856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 31956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check for switch */ 32056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (argv[i][0] != '-') 32156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 32256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 32356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "Playing '%s'\n", argv[i]); */ } 32456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((playResult = PlayFile(easData, argv[i], outputFile, pLibConfig, buffer, bufferSize)) != EAS_SUCCESS) 32556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 32656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_ERROR, "Error %d playing file %s\n", playResult, argv[i]); */ } 32756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks break; 32856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 32956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 33056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 33156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 33256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 33356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* shutdown the EAS library */ 33456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((result = EAS_Shutdown(easData)) != EAS_SUCCESS) 33556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 33656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "EAS_Shutdown returned %ld\n", result); */ } 33756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 33856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 33956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* free the output buffer */ 34056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks free(buffer); 34156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 34256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* close the debug file */ 34356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (debugFile) 34456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks fclose(debugFile); 34556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 34656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* play errors take precedence over shutdown errors */ 34756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (playResult != EAS_SUCCESS) 34856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return playResult; 34956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return result; 3507df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} /* end main */ 3517df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 3527df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 3537df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * StrCopy() 3547df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 35556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 3567df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Safe string copy 35756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 35856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 35956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 3607df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 3617df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 3627df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 3637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 3647df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic void StrCopy(char *dest, const char *src, EAS_I32 size) 3657df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 36656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks int len; 3677df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 36856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks strncpy(dest, src, (size_t) size-1); 36956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks len = (int) strlen(src); 37056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (len < size) 37156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks dest[len] = 0; 3727df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} /* end StrCopy */ 3737df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 3747df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 3757df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * ChangeFileExt() 3767df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 37756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 3787df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Changes the file extension of a filename 37956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 38056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Inputs: 38156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 3827df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 3837df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 3847df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 3857df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 3867df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_BOOL ChangeFileExt(char *str, const char *ext, EAS_I32 size) 3877df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 38856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks char *p; 38956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 39056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* find the extension, if any */ 39156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p = strrchr(str,'.'); 39256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (!p) 39356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 39456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((EAS_I32)(strlen(str) + 5) > size) 39556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FALSE; 39656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks strcat(str,"."); 39756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks strcat(str,ext); 39856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 39956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 40056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 40156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* make sure there's room for the extension */ 40256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks p++; 40356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks *p = 0; 40456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if ((EAS_I32)(strlen(str) + 4) > size) 40556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FALSE; 40656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks strcat(str,ext); 40756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 4087df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} /* end ChangeFileExt */ 4097df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 4107df30109963092559d3760c0661a020f9daf1030The Android Open Source Project/*---------------------------------------------------------------------------- 4117df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * EASLibraryCheck() 4127df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 41356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * Purpose: 4147df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Displays the library version and checks it against the header 4157df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * file used to build this code. 4167df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 4177df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Inputs: 41856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * pLibConfig - library configuration retrieved from the library 41956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks * 4207df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Outputs: 4217df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * returns EAS_TRUE if matched 4227df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 4237df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * Side Effects: 4247df30109963092559d3760c0661a020f9daf1030The Android Open Source Project * 4257df30109963092559d3760c0661a020f9daf1030The Android Open Source Project *---------------------------------------------------------------------------- 4267df30109963092559d3760c0661a020f9daf1030The Android Open Source Project*/ 4277df30109963092559d3760c0661a020f9daf1030The Android Open Source Projectstatic EAS_BOOL EASLibraryCheck (const S_EAS_LIB_CONFIG *pLibConfig) 4287df30109963092559d3760c0661a020f9daf1030The Android Open Source Project{ 4297df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 43056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* display the library version */ 43156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "EAS Library Version %d.%d.%d.%d\n", 43256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pLibConfig->libVersion >> 24, 43356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pLibConfig->libVersion >> 16) & 0x0f, 43456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (pLibConfig->libVersion >> 8) & 0x0f, 43556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks pLibConfig->libVersion & 0x0f); */ } 43656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 43756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* display some info about the library build */ 43856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pLibConfig->checkedVersion) 43956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tChecked library\n"); */ } 44056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tMaximum polyphony: %d\n", pLibConfig->maxVoices); */ } 44156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tNumber of channels: %d\n", pLibConfig->numChannels); */ } 44256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tSample rate: %d\n", pLibConfig->sampleRate); */ } 44356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tMix buffer size: %d\n", pLibConfig->mixBufferSize); */ } 44456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (pLibConfig->filterEnabled) 44556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tFilter enabled\n"); */ } 4467df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#ifndef _WIN32_WCE 44756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tLibrary Build Timestamp: %s", ctime((time_t*)&pLibConfig->buildTimeStamp)); */ } 4487df30109963092559d3760c0661a020f9daf1030The Android Open Source Project#endif 44956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_INFO, "\tLibrary Build ID: %s\n", pLibConfig->buildGUID); */ } 45056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks 45156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /* check it against the header file used to build this code */ 45256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks /*lint -e{778} constant expression used for display purposes may evaluate to zero */ 45356c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks if (LIB_VERSION != pLibConfig->libVersion) 45456c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { 45556c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks { /* dpp: EAS_ReportEx(_EAS_SEVERITY_FATAL, "Library version does not match header files. EAS Header Version %d.%d.%d.%d\n", 45656c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks LIB_VERSION >> 24, 45756c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (LIB_VERSION >> 16) & 0x0f, 45856c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks (LIB_VERSION >> 8) & 0x0f, 45956c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks LIB_VERSION & 0x0f); */ } 46056c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_FALSE; 46156c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks } 46256c99cd2c2c1e6ab038dac5fced5b92ccf11ff6cDave Sparks return EAS_TRUE; 4637df30109963092559d3760c0661a020f9daf1030The Android Open Source Project} /* end EASLibraryCheck */ 4647df30109963092559d3760c0661a020f9daf1030The Android Open Source Project 465