Skip to contentSkip to conversation

Make mixer emulation a configure option

PATCH New Jan Kiszka 1 participant 1 message Jun 23, 2008

lore
Share & tools
lore

Jan Kiszka

author
#0 lore raw

PATCH 1/1 Make mixer emulation a configure option

QEMU is able to provide software-based mixer emulation (volume control), but so far the user has to comment out the undocumented NOVOL define in the source code. This patch makes the switch controllable via configure.

As malc and I still disagree about the preferred default :), the patch comes in two versions: The first one aims at improving the user experience (by making things work out-off-the-box), the second one is for the case that concerns about noticeable performance regressions of CONFIG_MIXEMU/!NOVOL dominate (I don't see them on common QEMU host platforms, though).

Whatever you finally pick is not that important as long as a patch is applied at all. Keep in mind that more and more targets' sound emulation may rely on full mixer emulation. Right now, Musicpal already does.

---
 audio/mixeng.c          |    2 --
 audio/mixeng_template.h |   10 +++++-----
 configure               |    9 +++++++++
 3 files changed, 14 insertions(+), 7 deletions(-)
audio/mixeng.c +0 -2
Index: b/audio/mixeng.c
===================================================================
@@ -28,8 +28,6 @@
 #define AUDIO_CAP "mixeng"
 #include "audio_int.h"
 
-#define NOVOL
-
 /* 8 bit */
 #define ENDIAN_CONVERSION natural
 #define ENDIAN_CONVERT(v) (v)
audio/mixeng_template.h +5 -5
Index: b/audio/mixeng_template.h
===================================================================
@@ -31,14 +31,14 @@
 #define HALF (IN_MAX >> 1)
 #endif
 
-#ifdef NOVOL
-#define VOL(a, b) a
-#else
+#ifdef CONFIG_MIXEMU
 #ifdef FLOAT_MIXENG
 #define VOL(a, b) ((a) * (b))
 #else
 #define VOL(a, b) ((a) * (b)) >> 32
 #endif
+#else
+#define VOL(a, b) a
 #endif
 
 #define ET glue (ENDIAN_CONVERSION, glue (_, IN_T))
@@ -113,7 +113,7 @@ static void glue (glue (conv_, ET), _to_
 {
     st_sample_t *out = dst;
     IN_T *in = (IN_T *) src;
-#ifndef NOVOL
+#ifdef CONFIG_MIXEMU
     if (vol->mute) {
         mixeng_clear (dst, samples);
         return;
@@ -133,7 +133,7 @@ static void glue (glue (conv_, ET), _to_
 {
     st_sample_t *out = dst;
     IN_T *in = (IN_T *) src;
-#ifndef NOVOL
+#ifdef CONFIG_MIXEMU
     if (vol->mute) {
         mixeng_clear (dst, samples);
         return;
configure +9 -0
Index: b/configure
===================================================================
@@ -114,6 +114,7 @@ build_docs="no"
 uname_release=""
 curses="yes"
 nptl="yes"
+mixemu="yes"
 
 # OS specific
 targetos=`uname -s`
@@ -337,6 +338,8 @@ for opt do
   ;;
   --disable-nptl) nptl="no"
   ;;
+  --disable-mixemu) mixemu="no"
+  ;;
   *) echo "ERROR: unknown option $opt"; show_help="yes"
   ;;
   esac
@@ -428,6 +431,7 @@ echo "  --enable-alsa            enable 
 echo "  --enable-esd             enable EsoundD audio driver"
 echo "  --enable-fmod            enable FMOD audio driver"
 echo "  --enable-dsound          enable DirectSound audio driver"
+echo "  --disable-mixemu         disable mixer emulation"
 echo "  --disable-brlapi         disable BrlAPI"
 echo "  --disable-vnc-tls        disable TLS encryption for VNC server"
 echo "  --disable-curses         disable curses output"
@@ -839,6 +843,7 @@ echo "CoreAudio support $coreaudio"
 echo "ALSA support      $alsa"
 echo "EsounD support    $esd"
 echo "DSound support    $dsound"
+echo "Mixer emulation   $mixemu"
 if test "$fmod" = "yes"; then
     if test -z $fmod_lib || test -z $fmod_inc; then
         echo
@@ -1067,6 +1072,10 @@ if test "$dsound" = "yes" ; then
   echo "CONFIG_DSOUND=yes" >> $config_mak
   echo "#define CONFIG_DSOUND 1" >> $config_h
 fi
+if test "$mixemu" = "yes" ; then
+  echo "CONFIG_MIXEMU=yes" >> $config_mak
+  echo "#define CONFIG_MIXEMU 1" >> $config_h
+fi
 if test "$fmod" = "yes" ; then
   echo "CONFIG_FMOD=yes" >> $config_mak
   echo "CONFIG_FMOD_LIB=$fmod_lib" >> $config_mak

---------------

---
 audio/mixeng.c          |    2 --
 audio/mixeng_template.h |   10 +++++-----
 configure               |    9 +++++++++
 3 files changed, 14 insertions(+), 7 deletions(-)
audio/mixeng.c +0 -2
Index: b/audio/mixeng.c
===================================================================
@@ -28,8 +28,6 @@
 #define AUDIO_CAP "mixeng"
 #include "audio_int.h"
 
-#define NOVOL
-
 /* 8 bit */
 #define ENDIAN_CONVERSION natural
 #define ENDIAN_CONVERT(v) (v)
audio/mixeng_template.h +5 -5
Index: b/audio/mixeng_template.h
===================================================================
@@ -31,14 +31,14 @@
 #define HALF (IN_MAX >> 1)
 #endif
 
-#ifdef NOVOL
-#define VOL(a, b) a
-#else
+#ifdef CONFIG_MIXEMU
 #ifdef FLOAT_MIXENG
 #define VOL(a, b) ((a) * (b))
 #else
 #define VOL(a, b) ((a) * (b)) >> 32
 #endif
+#else
+#define VOL(a, b) a
 #endif
 
 #define ET glue (ENDIAN_CONVERSION, glue (_, IN_T))
@@ -113,7 +113,7 @@ static void glue (glue (conv_, ET), _to_
 {
     st_sample_t *out = dst;
     IN_T *in = (IN_T *) src;
-#ifndef NOVOL
+#ifdef CONFIG_MIXEMU
     if (vol->mute) {
         mixeng_clear (dst, samples);
         return;
@@ -133,7 +133,7 @@ static void glue (glue (conv_, ET), _to_
 {
     st_sample_t *out = dst;
     IN_T *in = (IN_T *) src;
-#ifndef NOVOL
+#ifdef CONFIG_MIXEMU
     if (vol->mute) {
         mixeng_clear (dst, samples);
         return;
configure +9 -0
Index: b/configure
===================================================================
@@ -114,6 +114,7 @@ build_docs="no"
 uname_release=""
 curses="yes"
 nptl="yes"
+mixemu="no"
 
 # OS specific
 targetos=`uname -s`
@@ -337,6 +338,8 @@ for opt do
   ;;
   --disable-nptl) nptl="no"
   ;;
+  --enable-mixemu) mixemu="yes"
+  ;;
   *) echo "ERROR: unknown option $opt"; show_help="yes"
   ;;
   esac
@@ -428,6 +431,7 @@ echo "  --enable-alsa            enable 
 echo "  --enable-esd             enable EsoundD audio driver"
 echo "  --enable-fmod            enable FMOD audio driver"
 echo "  --enable-dsound          enable DirectSound audio driver"
+echo "  --enable-mixemu          enable mixer emulation"
 echo "  --disable-brlapi         disable BrlAPI"
 echo "  --disable-vnc-tls        disable TLS encryption for VNC server"
 echo "  --disable-curses         disable curses output"
@@ -839,6 +843,7 @@ echo "CoreAudio support $coreaudio"
 echo "ALSA support      $alsa"
 echo "EsounD support    $esd"
 echo "DSound support    $dsound"
+echo "Mixer emulation   $mixemu"
 if test "$fmod" = "yes"; then
     if test -z $fmod_lib || test -z $fmod_inc; then
         echo
@@ -1067,6 +1072,10 @@ if test "$dsound" = "yes" ; then
   echo "CONFIG_DSOUND=yes" >> $config_mak
   echo "#define CONFIG_DSOUND 1" >> $config_h
 fi
+if test "$mixemu" = "yes" ; then
+  echo "CONFIG_MIXEMU=yes" >> $config_mak
+  echo "#define CONFIG_MIXEMU 1" >> $config_h
+fi
 if test "$fmod" = "yes" ; then
   echo "CONFIG_FMOD=yes" >> $config_mak
   echo "CONFIG_FMOD_LIB=$fmod_lib" >> $config_mak