diff src/xs_sidplay1.cc @ 127:ddb513bd2610

Improved audio format support, now supported formats are "queried" from emulator engines. Preparing for NanoSID-support, since it's the worst in this sense.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 14 Jan 2004 21:45:05 +0000
parents fe83646e6baa
children a3f522cbe787
line wrap: on
line diff
--- a/src/xs_sidplay1.cc	Wed Jan 14 03:57:04 2004 +0000
+++ b/src/xs_sidplay1.cc	Wed Jan 14 21:45:05 2004 +0000
@@ -181,7 +181,7 @@
  myPlayer->currEng->getConfig(myPlayer->currConfig);
 
  /* Configure channels and stuff */
- switch (xs_cfg.fmtChannels) {
+ switch (myStatus->audioChannels) {
 
 	case XS_CHN_AUTOPAN:
 		myPlayer->currConfig.channels = SIDEMU_STEREO;
@@ -238,19 +238,48 @@
 
 
  /* Configure rest of the emulation */
- myPlayer->currConfig.bitsPerSample	= xs_cfg.fmtBitsPerSample;
- myPlayer->currConfig.frequency		= xs_cfg.fmtFrequency;
-#ifdef HAVE_UNSIGNEDPCM
- myPlayer->currConfig.sampleFormat	= SIDEMU_UNSIGNED_PCM;
-#else
- myPlayer->currConfig.sampleFormat	= SIDEMU_SIGNED_PCM;
-#endif
  myPlayer->currConfig.mos8580		= xs_cfg.mos8580;
  myPlayer->currConfig.emulateFilter	= xs_cfg.emulateFilters;
  myPlayer->currConfig.filterFs		= xs_cfg.filterFs;
  myPlayer->currConfig.filterFm		= xs_cfg.filterFm;
  myPlayer->currConfig.filterFt		= xs_cfg.filterFt;
 
+ myPlayer->currConfig.bitsPerSample	= myStatus->audioBitsPerSample;
+ myPlayer->currConfig.frequency		= myStatus->audioFrequency;
+
+ switch (myStatus->audioBitsPerSample) {
+ case XS_RES_8BIT:
+	switch (myStatus->audioFormat) {
+	case FMT_U8:
+		myPlayer->currConfig.sampleFormat	= SIDEMU_UNSIGNED_PCM;
+		break;
+
+	case FMT_S8:
+		myPlayer->currConfig.sampleFormat	= SIDEMU_SIGNED_PCM;
+		break;
+	}
+	break;
+
+ case XS_RES_16BIT:
+	switch (myStatus->audioFormat) {
+	case FMT_U16_NE:
+	case FMT_U16_LE:
+	case FMT_U16_BE:
+		myStatus->audioFormat			= FMT_U16_NE;
+		myPlayer->currConfig.sampleFormat       = SIDEMU_UNSIGNED_PCM;
+		break;
+
+	case FMT_S16_NE:
+	case FMT_S16_LE:
+	case FMT_S16_BE:
+		myStatus->audioFormat			= FMT_S16_NE;
+		myPlayer->currConfig.sampleFormat       = SIDEMU_SIGNED_PCM;
+		break;
+	}
+	break;
+ }
+
+
  /* Now set the emulator configuration */
  if (!myPlayer->currEng->setConfig(myPlayer->currConfig))
 	{