From nobody@FreeBSD.org  Thu Mar 26 00:11:10 2009
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id CB8D110657C1
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 26 Mar 2009 00:11:10 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id AE7FC8FC14
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 26 Mar 2009 00:11:10 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.3/8.14.3) with ESMTP id n2Q0BA9S046579
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 26 Mar 2009 00:11:10 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id n2Q0BAfe046578;
	Thu, 26 Mar 2009 00:11:10 GMT
	(envelope-from nobody)
Message-Id: <200903260011.n2Q0BAfe046578@www.freebsd.org>
Date: Thu, 26 Mar 2009 00:11:10 GMT
From: Emil Smolenski <am@raisa.eu.org>
To: freebsd-gnats-submit@FreeBSD.org
Subject: [PATCH] kmix (multimedia/kdemultimedia4) incorrectly binds to mixer devices
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         133078
>Category:       ports
>Synopsis:       [PATCH] kmix (multimedia/kdemultimedia4) incorrectly binds to mixer devices
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    kde
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Mar 26 00:20:01 UTC 2009
>Closed-Date:    Sat Feb 13 16:12:42 UTC 2010
>Last-Modified:  Sat Feb 13 23:42:23 UTC 2010
>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:
Responsible-Changed-From-To: freebsd-ports-bugs->kde 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Thu Mar 26 00:20:15 UTC 2009 
Responsible-Changed-Why:  
Over to maintainer (via the GNATS Auto Assign Tool) 

http://www.freebsd.org/cgi/query-pr.cgi?pr=133078 

From: Max Brazhnikov <makc@issp.ac.ru>
To: bug-followup@freebsd.org, am@raisa.eu.org
Cc:  
Subject: Re: ports/133078: [PATCH] kmix (multimedia/kdemultimedia4) incorrectly binds to mixer devices
Date: Thu, 2 Apr 2009 12:31:41 +0300

 Hi Emil,
 
 Looks it's not FreeBSD specific, shouldn't this go directly upstream?
 
 Max

From: "Emil Smolenski" <am@raisa.eu.org>
To: "Max Brazhnikov" <makc@issp.ac.ru>, bug-followup@freebsd.org
Cc:  
Subject: Re: ports/133078: [PATCH] kmix (multimedia/kdemultimedia4)
 incorrectly binds to mixer devices
Date: Fri, 03 Apr 2009 03:15:39 +0200

 On Thu, 02 Apr 2009 11:31:41 +0200, Max Brazhnikov <makc@issp.ac.ru> wrote:
 
 Hi,
 
 > Looks it's not FreeBSD specific, shouldn't this go directly upstream?
 
   Maybe.
 
   I'm sure it is OSS specific. I know nothing about mixers in other  
 OSS-based systems. Perhaps in other systems /dev/mixer is always  
 /dev/mixer0. If somewhere there is /dev/mixer _instead_ of /dev/mixer0  
 (there is no /dev/mixer0 device), this patch would broke these systems.
   If such systems don't exist, I don't see any reason to bind to /dev/mixer  
 instead of /dev/mixer0 directly[1] (and it should go upstream).
 
 [1]:
 case 0:
    return QString("/dev/mixer");
    break;
 default:
    QString devname("/dev/mixer");
    devname += ('0'+devnum);
    return devname;
 
 -- 
 am
State-Changed-From-To: open->closed 
State-Changed-By: miwi 
State-Changed-When: Sat Feb 13 16:12:40 UTC 2010 
State-Changed-Why:  
should be fixed long time ago. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=133078 

From: "Emil Smolenski" <am@raisa.eu.org>
To: miwi@freebsd.org
Cc: bug-followup@freebsd.org, kde@freebsd.org
Subject: Re: ports/133078: [PATCH] kmix (multimedia/kdemultimedia4)
 incorrectly binds to mixer devices
Date: Sat, 13 Feb 2010 22:51:14 +0100

 On Sat, 13 Feb 2010 17:12:41 +0100, <miwi@freebsd.org> wrote:
 
 > Synopsis: [PATCH] kmix (multimedia/kdemultimedia4) incorrectly binds to  
 > mixer devices
 >
 > State-Changed-From-To: open->closed
 > State-Changed-By: miwi
 > State-Changed-When: Sat Feb 13 16:12:40 UTC 2010
 > State-Changed-Why:
 
 > should be fixed long time ago.
 
   No. Unfortunately it is still broken. This code from "kmix/mixer_oss.cpp"  
 file hasn't changed:
 
    switch (devnum) {
    case 0:
      return QString("/dev/mixer");
      break;
 
    default:
      QString devname("/dev/mixer");
      devname += ('0'+devnum);
      return devname;
 
 
 % pkg_info -xI kdem
 kdemultimedia-4.3.5 KDE Multimedia applications
 
 % lsof -c kmix -a /dev/mixer /dev/mixer*
 COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
 kmix    21289 ameel   10u  VCHR   0,34      0t0   34 /dev/mixer1
 kmix    21289 ameel   12u  VCHR   0,34      0t0   34 /dev/mixer1
                                                       ^^^^^^^^^^^
 
 Kmix still binds to the same mixer twice. There is no possibility to  
 control mixer0 from kmix when hw.snd.default_unit is set to 1. The switch  
 construction above is obviously wrong.
 
 Also, all mixer devices have still the same name (meaningless "OSS Audio  
 Mixer"). My patch still applies (with small offset).
 
 > http://www.freebsd.org/cgi/query-pr.cgi?pr=133078
 
 
 -- 
 am
>Unformatted:
