SDL.cpp revision b7154f2324c8ae44b820c07c69aaa80a4bb9e418
1b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten/* 2b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * Copyright (C) 2010 The Android Open Source Project 3b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * 4b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * you may not use this file except in compliance with the License. 6b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * You may obtain a copy of the License at 7b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * 8b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * 10b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * Unless required by applicable law or agreed to in writing, software 11b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * See the License for the specific language governing permissions and 14b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten * limitations under the License. 15b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten */ 16b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten 17b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten/* SDL platform implementation */ 18b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten 19b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten#include <assert.h> 20b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten 21b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten#include "sles_allinclusive.h" 22b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten 23b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten#ifdef USE_SDL 24b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten 25b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenstatic void SDLCALL SDL_callback(void *context, Uint8 *stream, int len) 26b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten{ 27b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten assert(len > 0); 28b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten SLOutputMixExtItf OutputMixExt = (SLOutputMixExtItf) context; 29b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten (*OutputMixExt)->FillBuffer(OutputMixExt, stream, (SLuint32) len); 30b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten} 31b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten 32b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kastenvoid SDL_start(SLObjectItf self) 33b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten{ 34b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten assert(self != NULL); 35b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten IObject *this = (IObject *) self; 36b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten assert(SL_OBJECTID_OUTPUTMIX == IObjectToObjectID(this)); 37b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten SLresult result; 38b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten SLOutputMixExtItf OutputMixExt; 39b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten result = (*self)->GetInterface(self, SL_IID_OUTPUTMIXEXT, &OutputMixExt); 40b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten assert(SL_RESULT_SUCCESS == result); 41b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten 42b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten SDL_AudioSpec fmt; 43b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten fmt.freq = 44100; 44b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten fmt.format = AUDIO_S16; 45b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten fmt.channels = 2; 46b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten fmt.samples = 256; 47b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten fmt.callback = SDL_callback; 48b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten // FIXME should be a GetInterface 49b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten // fmt.userdata = &((COutputMix *) this)->mOutputMixExt; 50b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten fmt.userdata = (void *) OutputMixExt; 51b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten 52b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten if (SDL_OpenAudio(&fmt, NULL) < 0) { 53b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten fprintf(stderr, "Unable to open audio: %s\n", SDL_GetError()); 54b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten exit(1); 55b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten } 56b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten SDL_PauseAudio(0); 57b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten} 58b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten 59b7154f2324c8ae44b820c07c69aaa80a4bb9e418Glenn Kasten#endif // USE_SDL 60