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>