Changed sound driver parameter type to bx_param_enum_c.
TODO: Add sound driver selection per service (waveout, wavein, midiout).
This commit is contained in:
parent
66ee9dce05
commit
3135e6a4eb
@ -2,7 +2,7 @@
|
||||
// $Id$
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2002-2014 The Bochs Project
|
||||
// Copyright (C) 2002-2015 The Bochs Project
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
@ -1505,11 +1505,14 @@ void bx_init_options()
|
||||
soundlow->set_enabled(BX_SUPPORT_SOUNDLOW);
|
||||
|
||||
#if BX_SUPPORT_SOUNDLOW
|
||||
new bx_param_string_c(soundlow,
|
||||
bx_param_enum_c *driver = new bx_param_enum_c(soundlow,
|
||||
"driver",
|
||||
"Sound driver",
|
||||
"This is the lowlevel driver to use for emulated sound devices",
|
||||
"default", BX_PATHNAME_LEN);
|
||||
sound_driver_names,
|
||||
BX_SOUNDDRV_DUMMY,
|
||||
BX_SOUNDDRV_DUMMY);
|
||||
driver->set_by_name(BX_SOUND_LOWLEVEL_NAME);
|
||||
new bx_param_filename_c(soundlow,
|
||||
"waveout",
|
||||
"Wave output device",
|
||||
@ -2882,7 +2885,9 @@ static int parse_line_formatted(const char *context, int num_params, char *param
|
||||
} else if (!strcmp(params[0], "sound")) {
|
||||
#if BX_SUPPORT_SOUNDLOW
|
||||
for (i=1; i<num_params; i++) {
|
||||
if (bx_parse_param_from_list(context, params[i], (bx_list_c*) SIM->get_param(BXPN_SOUNDLOW)) < 0) {
|
||||
if (!strcmp(params[i], "driver=default")) {
|
||||
SIM->get_param_enum(BXPN_SOUND_DRIVER)->set_by_name(BX_SOUND_LOWLEVEL_NAME);
|
||||
} else if (bx_parse_param_from_list(context, params[i], (bx_list_c*) SIM->get_param(BXPN_SOUNDLOW)) < 0) {
|
||||
BX_ERROR(("%s: unknown parameter for sound ignored.", context));
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
// $Id$
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2002-2014 The Bochs Project
|
||||
// Copyright (C) 2002-2015 The Bochs Project
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
@ -503,7 +503,28 @@ int floppy_type_n_sectors[] = { -1, 80*2*15, 80*2*18, 80*2*36, 80*2*9, 40*2*9, 4
|
||||
const char *media_status_names[] = { "ejected", "inserted", NULL };
|
||||
const char *bochs_bootdisk_names[] = { "none", "floppy", "disk","cdrom", "network", NULL };
|
||||
|
||||
const char *hdimage_mode_names[] = {
|
||||
const char *sound_driver_names[] = {
|
||||
"dummy",
|
||||
#if BX_HAVE_ALSASOUND
|
||||
"alsa",
|
||||
#endif
|
||||
#if (defined(linux) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__))
|
||||
"oss",
|
||||
#endif
|
||||
#if defined(macintosh)
|
||||
"osx",
|
||||
#endif
|
||||
#if BX_WITH_SDL || BX_WITH_SDL2
|
||||
"sdl",
|
||||
#endif
|
||||
#if defined(WIN32)
|
||||
"win",
|
||||
#endif
|
||||
"file",
|
||||
NULL
|
||||
};
|
||||
|
||||
const char *hdimage_mode_names[] = {
|
||||
"flat",
|
||||
"concat",
|
||||
"external",
|
||||
|
@ -2,7 +2,7 @@
|
||||
// $Id$
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2001-2014 The Bochs Project
|
||||
// Copyright (C) 2001-2015 The Bochs Project
|
||||
//
|
||||
// This library is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU Lesser General Public
|
||||
@ -593,12 +593,33 @@ enum {
|
||||
#define BX_CLOCK_TIME0_LOCAL 1
|
||||
#define BX_CLOCK_TIME0_UTC 2
|
||||
|
||||
enum {
|
||||
BX_SOUNDDRV_DUMMY,
|
||||
#if BX_HAVE_ALSASOUND
|
||||
BX_SOUNDDRV_ALSA,
|
||||
#endif
|
||||
#if (defined(linux) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__))
|
||||
BX_SOUNDDRV_OSS,
|
||||
#endif
|
||||
#if defined(macintosh)
|
||||
BX_SOUNDDRV_OSX,
|
||||
#endif
|
||||
#if BX_WITH_SDL || BX_WITH_SDL2
|
||||
BX_SOUNDDRV_SDL,
|
||||
#endif
|
||||
#if defined(WIN32)
|
||||
BX_SOUNDDRV_WIN,
|
||||
#endif
|
||||
BX_SOUNDDRV_FILE
|
||||
};
|
||||
|
||||
BOCHSAPI extern const char *floppy_devtype_names[];
|
||||
BOCHSAPI extern const char *floppy_type_names[];
|
||||
BOCHSAPI extern int floppy_type_n_sectors[];
|
||||
BOCHSAPI extern const char *media_status_names[];
|
||||
BOCHSAPI extern const char *bochs_bootdisk_names[];
|
||||
BOCHSAPI extern const char *hdimage_mode_names[];
|
||||
BOCHSAPI extern const char *sound_driver_names[];
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// base class simulator interface, contains just virtual functions.
|
||||
|
@ -79,13 +79,13 @@ bx_soundmod_ctl_c::~bx_soundmod_ctl_c()
|
||||
|
||||
void bx_soundmod_ctl_c::init()
|
||||
{
|
||||
bx_param_enum_c *driver = SIM->get_param_enum(BXPN_SOUND_DRIVER);
|
||||
int ret;
|
||||
const char *driver = SIM->get_param_string(BXPN_SOUND_DRIVER)->getptr();
|
||||
const char *pwaveout = SIM->get_param_string(BXPN_SOUND_WAVEOUT)->getptr();
|
||||
const char *wavein = SIM->get_param_string(BXPN_SOUND_WAVEIN)->getptr();
|
||||
const char *pwavein = SIM->get_param_string(BXPN_SOUND_WAVEIN)->getptr();
|
||||
|
||||
if (get_driver(driver) != NULL) {
|
||||
if (!strlen(wavein)) {
|
||||
if (get_driver(driver->get()) != NULL) {
|
||||
if (!strlen(pwavein)) {
|
||||
SIM->get_param_string(BXPN_SOUND_WAVEIN)->set(pwaveout);
|
||||
}
|
||||
waveout = soundmod[0].module->get_waveout();
|
||||
@ -95,22 +95,18 @@ void bx_soundmod_ctl_c::init()
|
||||
BX_PANIC(("Could not open wave output device"));
|
||||
}
|
||||
} else {
|
||||
BX_PANIC(("no waveout support in sound driver '%s'", driver));
|
||||
BX_PANIC(("no waveout support in sound driver '%s'", driver->get_selected());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bx_sound_lowlevel_c* bx_soundmod_ctl_c::get_driver(const char *name)
|
||||
bx_sound_lowlevel_c* bx_soundmod_ctl_c::get_driver(int driver_id)
|
||||
{
|
||||
static const char default_name[] = BX_SOUND_LOWLEVEL_NAME;
|
||||
bx_sound_lowlevel_c *driver = NULL;
|
||||
unsigned i;
|
||||
|
||||
if (strcmp(name, "default") == 0) {
|
||||
name = default_name;
|
||||
}
|
||||
for (i = 0; i < n_sound_drivers; i++) {
|
||||
if (!strcmp(name, soundmod[i].name)) {
|
||||
if (driver_id == soundmod[i].drv_id)) {
|
||||
return soundmod[i].module;
|
||||
}
|
||||
}
|
||||
@ -118,36 +114,37 @@ bx_sound_lowlevel_c* bx_soundmod_ctl_c::get_driver(const char *name)
|
||||
BX_PANIC(("Too many sound drivers!"));
|
||||
return NULL;
|
||||
}
|
||||
if (strcmp(name, "dummy") == 0) {
|
||||
if (driver_id == BX_SOUNDDRV_DUMMY) {
|
||||
driver = new bx_sound_lowlevel_c();
|
||||
} else if (!strcmp(name, "file")) {
|
||||
} else if (driver_id == BX_SOUNDDRV_FILE) {
|
||||
driver = new bx_sound_file_c();
|
||||
#if BX_HAVE_ALSASOUND
|
||||
} else if (!strcmp(name, "alsa")) {
|
||||
} else if (driver_id == BX_SOUNDDRV_ALSA) {
|
||||
driver = new bx_sound_alsa_c();
|
||||
#endif
|
||||
#if BX_WITH_SDL || BX_WITH_SDL2
|
||||
} else if (!strcmp(name, "sdl")) {
|
||||
} else if (driver_id == BX_SOUNDDRV_SDL) {
|
||||
driver = new bx_sound_sdl_c();
|
||||
#endif
|
||||
#if (defined(linux) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__))
|
||||
} else if (!strcmp(name, "oss")) {
|
||||
} else if (driver_id == BX_SOUNDDRV_OSS) {
|
||||
driver = new bx_sound_oss_c();
|
||||
#endif
|
||||
#if defined(macintosh)
|
||||
} else if (!strcmp(name, "osx")) {
|
||||
} else if (driver_id == BX_SOUNDDRV_OSX) {
|
||||
driver = new bx_sound_osx_c();
|
||||
#endif
|
||||
#if defined(WIN32)
|
||||
} else if (!strcmp(name, "win")) {
|
||||
} else if (driver_id == BX_SOUNDDRV_WIN) {
|
||||
driver = new bx_sound_windows_c();
|
||||
#endif
|
||||
} else {
|
||||
BX_PANIC(("unknown lowlevel sound driver '%s'", name));
|
||||
BX_PANIC(("unknown lowlevel sound driver id %d", driver_id));
|
||||
}
|
||||
if (driver != NULL) {
|
||||
BX_INFO(("Installed sound driver '%s' at index #%d", name, i));
|
||||
strcpy(soundmod[i].name, name);
|
||||
BX_INFO(("Installed sound driver '%s' at index #%d",
|
||||
sound_driver_names[driver_id], i));
|
||||
soundmod[i].drv_id = driver_id;
|
||||
soundmod[i].module = driver;
|
||||
n_sound_drivers++;
|
||||
}
|
||||
@ -160,8 +157,8 @@ bx_soundlow_waveout_c* bx_soundmod_ctl_c::get_waveout(const char *driver)
|
||||
|
||||
if (!strcmp(driver, "default")) {
|
||||
module = soundmod[0].module;
|
||||
} else {
|
||||
module = get_driver(driver);
|
||||
} else if (!strcmp(driver, "file")) {
|
||||
module = get_driver(BX_SOUNDDRV_FILE);
|
||||
}
|
||||
if (module != NULL) {
|
||||
return module->get_waveout();
|
||||
@ -176,8 +173,6 @@ bx_soundlow_wavein_c* bx_soundmod_ctl_c::get_wavein(const char *driver)
|
||||
|
||||
if (!strcmp(driver, "default")) {
|
||||
module = soundmod[0].module;
|
||||
} else {
|
||||
module = get_driver(driver);
|
||||
}
|
||||
if (module != NULL) {
|
||||
return module->get_wavein();
|
||||
@ -192,8 +187,8 @@ bx_soundlow_midiout_c* bx_soundmod_ctl_c::get_midiout(const char *driver)
|
||||
|
||||
if (!strcmp(driver, "default")) {
|
||||
module = soundmod[0].module;
|
||||
} else {
|
||||
module = get_driver(driver);
|
||||
} else if (!strcmp(driver, "file")) {
|
||||
module = get_driver(BX_SOUNDDRV_FILE);
|
||||
}
|
||||
if (module != NULL) {
|
||||
return module->get_midiout();
|
||||
|
@ -36,10 +36,10 @@ public:
|
||||
virtual bx_soundlow_midiout_c* get_midiout(const char *driver);
|
||||
|
||||
private:
|
||||
bx_sound_lowlevel_c* get_driver(const char *name);
|
||||
bx_sound_lowlevel_c* get_driver(int driver_id);
|
||||
|
||||
struct {
|
||||
char name[8];
|
||||
int drv_id;
|
||||
bx_sound_lowlevel_c *module;
|
||||
} soundmod[BX_MAX_SOUND_DRIVERS];
|
||||
unsigned n_sound_drivers;
|
||||
|
Loading…
x
Reference in New Issue
Block a user