Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Mar 2009 00:11:10 GMT
From:      Emil Smolenski <am@raisa.eu.org>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/133078: [PATCH] kmix (multimedia/kdemultimedia4) incorrectly binds to mixer devices
Message-ID:  <200903260011.n2Q0BAfe046578@www.freebsd.org>
Resent-Message-ID: <200903260020.n2Q0K1ah013569@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         133078
>Category:       ports
>Synopsis:       [PATCH] kmix (multimedia/kdemultimedia4) incorrectly binds to mixer devices
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Mar 26 00:20:01 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     Emil Smolenski
>Release:        7.2-PRERELEASE
>Organization:
>Environment:
FreeBSD 7.2-PRERELEASE #23: Mon Mar 23 18:40:53 CET 2009 root@ameel.kamienna:/usr/obj/usr/src/sys/BOLT i386
>Description:
1. Kmix from the kdemultimedia-4.2.1_1 port treats /dev/mixer as /dev/mixer0. In FreeBSD /dev/mixer is a link to one of the "real" /dev/mixer* devices. When /dev/mixer points to /dev/mixer1, there are in fact two mixer1 devices in kmix.

2. All mixer devices have the same name (meaningless "OSS Audio Mixer") in kmix. It prevents setting master channel correctly in kmix.

>How-To-Repeat:
1. Have at least two soundcards.
2. # sysctl hw.snd.default_unit=1
3. Run DBUS, HAL etc.
4. Run KDE 4 and kmix.
5. Try to change volume of the first (mixer0) soundcard using kmix. It will not be possible.
6. Check # lsof -c kmix -a /dev/mixer /dev/mixer*
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
kmix    86651 ameel   10u  VCHR   0,35      0t0   35 /dev/mixer1
kmix    86651 ameel   12u  VCHR   0,35      0t0   35 /dev/mixer1
kmix    86651 ameel   13u  VCHR   0,36      0t0   36 /dev/mixer2
>Fix:
The attached patch (place it in multimedia/kdemultimedia4/files/) fixes two things:

1. causes kmix to bind to /dev/mixer0 instead of /dev/mixer. Lsof output looks better:
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
kmix    95964 ameel   10u  VCHR   0,33      0t0   33 /dev/mixer0
kmix    95964 ameel   12u  VCHR   0,35      0t0   35 /dev/mixer1
kmix    95964 ameel   13u  VCHR   0,36      0t0   36 /dev/mixer2

2. sets better names for mixer devices (takes names from HAL or simply enumerates them).

After applying the patch kmix looses its settings (but not volume settings of course). That is normal.


Patch attached with submission follows:

--- ../kmix/mixer_oss.cpp.orig	2009-02-26 15:19:06.000000000 +0100
+++ ../kmix/mixer_oss.cpp	2009-03-25 18:49:33.454177963 +0100
@@ -30,6 +30,8 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 
+#include <solid/device.h>
+
 // Since we're guaranteed an OSS setup here, let's make life easier
 #if !defined(__NetBSD__) && !defined(__OpenBSD__)
 	#include <sys/soundcard.h>
@@ -173,9 +175,18 @@
         }
       else
 #endif
-
-        m_mixerName = "OSS Audio Mixer";
-
+      {
+        if (_udi.isEmpty()) {
+          QString genname("OSS Audio Mixer ");
+          int devnum = m_devnum;
+          genname += ('0'+devnum);
+          m_mixerName = genname;
+        } else {
+          Solid::Device device(_udi);
+          QString devname(device.product());
+          m_mixerName = devname;
+        }
+      }
       m_isOpen = true;
       return 0;
 }
@@ -192,16 +203,9 @@
 
 QString Mixer_OSS::deviceName(int devnum)
 {
-  switch (devnum) {
-  case 0:
-    return QString("/dev/mixer");
-    break;
-
-  default:
     QString devname("/dev/mixer");
     devname += ('0'+devnum);
     return devname;
-  }
 }
 
 QString Mixer_OSS::deviceNameDevfs(int devnum)


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903260011.n2Q0BAfe046578>