diff mbox

[10/10] Enable mixemu by default, add runtime option

Message ID 1334665964-3075-11-git-send-email-marcandre.lureau@redhat.com
State New
Headers show

Commit Message

Marc-André Lureau April 17, 2012, 12:32 p.m. UTC
Without MIXEMU, volume control on the guest doesn't work (except when
volume is applied by guest "emulation", in Win7 for example).

Instead rely on backend volume support, or fallback on mixeng if
backend doesn't support volume control, except if mixemu is disabled
with QEMU_MIXEMU=0.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 audio/audio.c  |   10 +++++++++-
 audio/mixeng.c |    6 ------
 configure      |    8 --------
 hw/hda-audio.c |    4 ----
 4 files changed, 9 insertions(+), 19 deletions(-)

Comments

malc April 17, 2012, 2:01 p.m. UTC | #1
On Tue, 17 Apr 2012, Marc-Andr? Lureau wrote:

> Without MIXEMU, volume control on the guest doesn't work (except when
> volume is applied by guest "emulation", in Win7 for example).
> 
> Instead rely on backend volume support, or fallback on mixeng if
> backend doesn't support volume control, except if mixemu is disabled
> with QEMU_MIXEMU=0.

Patches 1/9 applied, thank you.

[..snip..]
Paolo Bonzini April 23, 2012, 10:31 a.m. UTC | #2
Il 17/04/2012 16:01, malc ha scritto:
> On Tue, 17 Apr 2012, Marc-Andr? Lureau wrote:
> 
>> Without MIXEMU, volume control on the guest doesn't work (except when
>> volume is applied by guest "emulation", in Win7 for example).
>>
>> Instead rely on backend volume support, or fallback on mixeng if
>> backend doesn't support volume control, except if mixemu is disabled
>> with QEMU_MIXEMU=0.
> 
> Patches 1/9 applied, thank you.
> 
> [..snip..]
> 

Hi Marc-André, can you add a note about this feature to
http://wiki.qemu.org/ChangeLog/Next ? I'm confused about the
relationship with --enable-mixemu and the various backends, so I didn't
do it myself.

Paolo
diff mbox

Patch

diff --git a/audio/audio.c b/audio/audio.c
index bd9237e..bb94133 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -70,6 +70,7 @@  static struct {
     int log_to_monitor;
     int try_poll_in;
     int try_poll_out;
+    int mixemu;
 } conf = {
     .fixed_out = { /* DAC fixed settings */
         .enabled = 1,
@@ -100,6 +101,7 @@  static struct {
     .log_to_monitor = 0,
     .try_poll_in = 1,
     .try_poll_out = 1,
+    .mixemu = 1,
 };
 
 static AudioState glob_audio_state;
@@ -1044,7 +1046,7 @@  int audio_pcm_sw_write (SWVoiceOut *sw, void *buf, int size)
     if (swlim) {
         sw->conv (sw->buf, buf, swlim);
 
-        if (!(sw->hw->ctl_caps & VOICE_VOLUME_CAP)) {
+        if (!(sw->hw->ctl_caps & VOICE_VOLUME_CAP) && conf.mixemu) {
             mixeng_volume (sw->buf, swlim, &sw->vol);
         }
     }
@@ -1657,6 +1659,12 @@  static struct audio_option audio_options[] = {
         .valp  = &conf.log_to_monitor,
         .descr = "Print logging messages to monitor instead of stderr"
     },
+    {
+        .name  = "MIXEMU",
+        .tag   = AUD_OPT_BOOL,
+        .valp  = &conf.mixemu,
+        .descr = "Enable mixer emulation (1 - enabled, 0 - disabled)"
+    },
     { /* End of list */ }
 };
 
diff --git a/audio/mixeng.c b/audio/mixeng.c
index 5446be6..0b060e3 100644
--- a/audio/mixeng.c
+++ b/audio/mixeng.c
@@ -336,7 +336,6 @@  void mixeng_clear (struct st_sample *buf, int len)
 
 void mixeng_volume (struct st_sample *buf, int len, struct mixeng_volume *vol)
 {
-#ifdef CONFIG_MIXEMU
     if (vol->mute) {
         mixeng_clear (buf, len);
         return;
@@ -352,9 +351,4 @@  void mixeng_volume (struct st_sample *buf, int len, struct mixeng_volume *vol)
 #endif
         buf += 1;
     }
-#else
-    (void) buf;
-    (void) len;
-    (void) vol;
-#endif
 }
diff --git a/configure b/configure
index 2d62d12..9923887 100755
--- a/configure
+++ b/configure
@@ -177,7 +177,6 @@  darwin_user="no"
 bsd_user="no"
 guest_base=""
 uname_release=""
-mixemu="no"
 aix="no"
 blobs="yes"
 pkgversion=""
@@ -771,8 +770,6 @@  for opt do
   ;;
   --enable-nptl) nptl="yes"
   ;;
-  --enable-mixemu) mixemu="yes"
-  ;;
   --disable-linux-aio) linux_aio="no"
   ;;
   --enable-linux-aio) linux_aio="yes"
@@ -1031,7 +1028,6 @@  echo "  --audio-card-list=LIST   set list of emulated audio cards [$audio_card_l
 echo "                           Available cards: $audio_possible_cards"
 echo "  --block-drv-whitelist=L  set block driver whitelist"
 echo "                           (affects only QEMU, not qemu-img)"
-echo "  --enable-mixemu          enable mixer emulation"
 echo "  --disable-xen            disable xen backend driver support"
 echo "  --enable-xen             enable xen backend driver support"
 echo "  --disable-brlapi         disable BrlAPI"
@@ -2931,7 +2927,6 @@  echo "mingw32 support   $mingw32"
 echo "Audio drivers     $audio_drv_list"
 echo "Extra audio cards $audio_card_list"
 echo "Block whitelist   $block_drv_whitelist"
-echo "Mixer emulation   $mixemu"
 echo "VirtFS support    $virtfs"
 echo "VNC support       $vnc"
 if test "$vnc" = "yes" ; then
@@ -3094,9 +3089,6 @@  if test "$audio_win_int" = "yes" ; then
   echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
 fi
 echo "CONFIG_BDRV_WHITELIST=$block_drv_whitelist" >> $config_host_mak
-if test "$mixemu" = "yes" ; then
-  echo "CONFIG_MIXEMU=y" >> $config_host_mak
-fi
 if test "$vnc" = "yes" ; then
   echo "CONFIG_VNC=y" >> $config_host_mak
 fi
diff --git a/hw/hda-audio.c b/hw/hda-audio.c
index 8995519..75f1402 100644
--- a/hw/hda-audio.c
+++ b/hw/hda-audio.c
@@ -121,15 +121,11 @@  static void hda_codec_parse_fmt(uint32_t format, struct audsettings *as)
 #define QEMU_HDA_AMP_NONE    (0)
 #define QEMU_HDA_AMP_STEPS   0x4a
 
-#ifdef CONFIG_MIXEMU
 #define QEMU_HDA_AMP_CAPS                                               \
     (AC_AMPCAP_MUTE |                                                   \
      (QEMU_HDA_AMP_STEPS << AC_AMPCAP_OFFSET_SHIFT)    |                \
      (QEMU_HDA_AMP_STEPS << AC_AMPCAP_NUM_STEPS_SHIFT) |                \
      (3                  << AC_AMPCAP_STEP_SIZE_SHIFT))
-#else
-#define QEMU_HDA_AMP_CAPS    QEMU_HDA_AMP_NONE
-#endif
 
 /* common: audio output widget */
 static const desc_param common_params_audio_dac[] = {