aboutsummaryrefslogtreecommitdiff
path: root/sdl.cpp
diff options
context:
space:
mode:
authorLudvig Strigeus2002-04-14 18:13:08 +0000
committerLudvig Strigeus2002-04-14 18:13:08 +0000
commitac62a7cb2e17a86350681366d768a99db3b9845d (patch)
tree48a6f9eca1242f7ebf03f05835372811a4048f7a /sdl.cpp
parenta5e3dbb85dad96d8ffb6205e07d12ff8396ba5c7 (diff)
downloadscummvm-rg350-ac62a7cb2e17a86350681366d768a99db3b9845d.tar.gz
scummvm-rg350-ac62a7cb2e17a86350681366d768a99db3b9845d.tar.bz2
scummvm-rg350-ac62a7cb2e17a86350681366d768a99db3b9845d.zip
wrote new mixer class,
cleaned up sound header files, integrated mixer into scummvm & simon svn-id: r3937
Diffstat (limited to 'sdl.cpp')
-rw-r--r--sdl.cpp75
1 files changed, 32 insertions, 43 deletions
diff --git a/sdl.cpp b/sdl.cpp
index eb4460c59e..af3997c37b 100644
--- a/sdl.cpp
+++ b/sdl.cpp
@@ -1,5 +1,6 @@
#include "stdafx.h"
#include "scumm.h"
+#include "mididrv.h"
#include "SDL_thread.h"
#include "gameDetector.h"
@@ -16,7 +17,7 @@ public:
// Set the size of the video bitmap.
// Typically, 320x200
- void init_size(uint w, uint h, byte sound);
+ void init_size(uint w, uint h);
// Draw a bitmap to screen.
// The screen will not be updated to reflect the new bitmap
@@ -51,13 +52,13 @@ public:
bool poll_event(Event *event);
// Set function that generates samples
- void set_sound_proc(void *param, SoundProc *proc);
+ void set_sound_proc(void *param, SoundProc *proc, byte sound);
// Quit
void quit();
// Set a parameter
- uint32 set_param(int param, uint32 value);
+ uint32 property(int param, uint32 value);
static OSystem *create(int gfx_mode, bool full_screen);
@@ -108,9 +109,6 @@ private:
int scaling;
- SoundProc *_sound_proc;
- void *_sound_param;
-
struct MousePos {
int16 x,y,w,h;
};
@@ -197,14 +195,6 @@ void OSystem_SDL::set_palette(const byte *colors, uint start, uint num) {
SDL_SetColors(sdl_screen, base, start, num);
}
-void OSystem_SDL::fill_sound(void *userdata, Uint8 * stream, int len) {
- OSystem_SDL *os = (OSystem_SDL*)userdata;
- if (os->_sound_proc)
- os->_sound_proc(os->_sound_param, (int16*)stream, len>>1);
- else
- memset(stream, 0x0, len);
-}
-
void OSystem_SDL::load_gfx_mode() {
force_full = true;
scaling = 1;
@@ -307,24 +297,10 @@ void OSystem_SDL::unload_gfx_mode() {
}
}
-void OSystem_SDL::init_size(uint w, uint h, byte sound) {
- SDL_AudioSpec desired;
-
+void OSystem_SDL::init_size(uint w, uint h) {
if (w != SCREEN_WIDTH && h != SCREEN_HEIGHT)
error("320x200 is the only game resolution supported");
- /* init sound */
- if (sound != SOUND_NONE) {
- desired.freq = SAMPLES_PER_SEC;
- desired.format = sound==SOUND_8BIT ? AUDIO_U8 : AUDIO_S16SYS;
- desired.channels = 1;
- desired.samples = 2048;
- desired.callback = fill_sound;
- desired.userdata = this;
- SDL_OpenAudio(&desired, NULL);
- SDL_PauseAudio(0);
- }
-
/* allocate palette, it needs to be persistent across
* driver changes, so i'll alloc it here */
_cur_pal = (SDL_Color*)calloc(sizeof(SDL_Color), 256);
@@ -668,7 +644,7 @@ bool OSystem_SDL::poll_event(Event *event) {
/* internal keypress? */
if (b == KBD_ALT && ev.key.keysym.sym==SDLK_RETURN) {
- set_param(PARAM_TOGGLE_FULLSCREEN, 0);
+ property(PROP_TOGGLE_FULLSCREEN, 0);
break;
}
@@ -679,7 +655,7 @@ bool OSystem_SDL::poll_event(Event *event) {
if (b == (KBD_CTRL|KBD_ALT) &&
ev.key.keysym.sym>='1' && ev.key.keysym.sym<='6') {
- set_param(PARAM_HOTSWAP_GFX_MODE, ev.key.keysym.sym - '1');
+ property(PROP_SET_GFX_MODE, ev.key.keysym.sym - '1');
break;
}
@@ -733,9 +709,19 @@ bool OSystem_SDL::poll_event(Event *event) {
}
}
-void OSystem_SDL::set_sound_proc(void *param, SoundProc *proc) {
- _sound_proc = proc;
- _sound_param = param;
+void OSystem_SDL::set_sound_proc(void *param, SoundProc *proc, byte format) {
+ SDL_AudioSpec desired;
+
+ /* only one format supported at the moment */
+
+ desired.freq = SAMPLES_PER_SEC;
+ desired.format = AUDIO_S16SYS;
+ desired.channels = 1;
+ desired.samples = 2048;
+ desired.callback = proc;
+ desired.userdata = param;
+ SDL_OpenAudio(&desired, NULL);
+ SDL_PauseAudio(0);
}
@@ -806,10 +792,10 @@ void OSystem_SDL::hotswap_gfx_mode() {
OSystem_SDL::update_screen();
}
-uint32 OSystem_SDL::set_param(int param, uint32 value) {
+uint32 OSystem_SDL::property(int param, uint32 value) {
switch(param) {
- case PARAM_TOGGLE_FULLSCREEN:
+ case PROP_TOGGLE_FULLSCREEN:
_full_screen ^= true;
if (!SDL_WM_ToggleFullScreen(sdl_hwscreen)) {
@@ -818,11 +804,11 @@ uint32 OSystem_SDL::set_param(int param, uint32 value) {
}
return 1;
- case PARAM_WINDOW_CAPTION:
+ case PROP_SET_WINDOW_CAPTION:
SDL_WM_SetCaption((char*)value, (char*)value);
return 1;
- case PARAM_OPEN_CD:
+ case PROP_OPEN_CD:
if (SDL_InitSubSystem(SDL_INIT_CDROM) == -1)
cdrom = NULL;
else {
@@ -834,7 +820,7 @@ uint32 OSystem_SDL::set_param(int param, uint32 value) {
}
break;
- case PARAM_HOTSWAP_GFX_MODE:
+ case PROP_SET_GFX_MODE:
if (value >= 6)
return 0;
@@ -843,9 +829,12 @@ uint32 OSystem_SDL::set_param(int param, uint32 value) {
return 1;
- case PARAM_SHOW_DEFAULT_CURSOR:
+ case PROP_SHOW_DEFAULT_CURSOR:
SDL_ShowCursor(value ? SDL_ENABLE : SDL_DISABLE);
break;
+
+ case PROP_GET_SAMPLE_RATE:
+ return SAMPLES_PER_SEC;
}
return 0;
@@ -1027,7 +1016,7 @@ void OSystem_SDL::undraw_mouse() {
class OSystem_NULL : public OSystem {
public:
void set_palette(const byte *colors, uint start, uint num) {}
- void init_size(uint w, uint h, byte sound);
+ void init_size(uint w, uint h);
void copy_rect(const byte *buf, int pitch, int x, int y, int w, int h) {}
void update_screen() {}
bool show_mouse(bool visible) { return false; }
@@ -1038,9 +1027,9 @@ public:
void delay_msecs(uint msecs);
void *create_thread(ThreadProc *proc, void *param) { return NULL; }
bool poll_event(Event *event) { return false; }
- void set_sound_proc(void *param, SoundProc *proc) {}
+ void set_sound_proc(void *param, SoundProc *proc, byte sound) {}
void quit() { exit(1); }
- uint32 set_param(int param, uint32 value) { return 0; }
+ uint32 property(int param, uint32 value) { return 0; }
static OSystem *create(int gfx_mode, bool full_screen);
private: