summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjmcneill <jmcneill@pkgsrc.org>2015-11-19 02:31:47 +0000
committerjmcneill <jmcneill@pkgsrc.org>2015-11-19 02:31:47 +0000
commit563b51201c369f83a452be62b41cda4dc9d77899 (patch)
tree733fcd73639a84052b3fd5efb0d1ee2a89b1c54c
parent91deb2489d026ed8e14a2b016f928896e18337e5 (diff)
downloadpkgsrc-563b51201c369f83a452be62b41cda4dc9d77899.tar.gz
Fix audio device detection for NetBSD.
-rw-r--r--multimedia/kodi/Makefile4
-rw-r--r--multimedia/kodi/distinfo4
-rw-r--r--multimedia/kodi/patches/patch-xbmc_cores_AudioEngine_Sinks_AESinkOSS.cpp105
3 files changed, 103 insertions, 10 deletions
diff --git a/multimedia/kodi/Makefile b/multimedia/kodi/Makefile
index bc44ce678ab..793f98e4e8b 100644
--- a/multimedia/kodi/Makefile
+++ b/multimedia/kodi/Makefile
@@ -1,7 +1,7 @@
-# $NetBSD: Makefile,v 1.3 2015/11/18 14:19:52 ryoon Exp $
+# $NetBSD: Makefile,v 1.4 2015/11/19 02:31:47 jmcneill Exp $
PKGNAME= kodi-15.2
-PKGREVISION= 1
+PKGREVISION= 2
DISTNAME= 15.2-Isengard
CATEGORIES= multimedia
MASTER_SITES= http://mirrors.kodi.tv/releases/source/
diff --git a/multimedia/kodi/distinfo b/multimedia/kodi/distinfo
index c567399c275..ba100f36785 100644
--- a/multimedia/kodi/distinfo
+++ b/multimedia/kodi/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.7 2015/11/18 23:27:23 jmcneill Exp $
+$NetBSD: distinfo,v 1.8 2015/11/19 02:31:47 jmcneill Exp $
SHA1 (15.2-Isengard.tar.gz) = 4acb4a60eadc7289f873cff5add31693b9520cba
RMD160 (15.2-Isengard.tar.gz) = d81d3f15783b2b69920ea85d7e04f01872f2d85f
@@ -19,7 +19,7 @@ SHA1 (patch-xbmc_addons_Addon.cpp) = 9060723ebba93311eb6f4657bae73d9589b96a77
SHA1 (patch-xbmc_addons_AddonDll.h) = 77905da081d2436c383328421e1ab9316fb5939d
SHA1 (patch-xbmc_addons_AddonManager.cpp) = 10c583ed0c2c8eabef34ea4497a845765ce53c79
SHA1 (patch-xbmc_cores_AudioEngine_AESinkFactory.cpp) = 5437865b90130d7a0dc780fc1d542e6cfc8cc309
-SHA1 (patch-xbmc_cores_AudioEngine_Sinks_AESinkOSS.cpp) = 729a9fa7ebc317e0e14aa5685baf33eaebb4444d
+SHA1 (patch-xbmc_cores_AudioEngine_Sinks_AESinkOSS.cpp) = eb359844589ca8575fe0c1841506d715513ea092
SHA1 (patch-xbmc_cores_DllLoader_exports_emu__msvcrt.cpp) = 650a107afbf5bb78eb971592e66bea7fc7c115b9
SHA1 (patch-xbmc_cores_DllLoader_exports_emu__msvcrt.h) = 6047438509663af2826bd5e6c181d9018f86b27c
SHA1 (patch-xbmc_cores_DllLoader_exports_util_EmuFileWrapper.h) = a4d62050c1efb96a0b1e6ccb2d9529f6ae3a1135
diff --git a/multimedia/kodi/patches/patch-xbmc_cores_AudioEngine_Sinks_AESinkOSS.cpp b/multimedia/kodi/patches/patch-xbmc_cores_AudioEngine_Sinks_AESinkOSS.cpp
index 5bf888602cd..3d38a94be51 100644
--- a/multimedia/kodi/patches/patch-xbmc_cores_AudioEngine_Sinks_AESinkOSS.cpp
+++ b/multimedia/kodi/patches/patch-xbmc_cores_AudioEngine_Sinks_AESinkOSS.cpp
@@ -1,13 +1,106 @@
-$NetBSD: patch-xbmc_cores_AudioEngine_Sinks_AESinkOSS.cpp,v 1.1 2015/11/17 14:56:07 jmcneill Exp $
+$NetBSD: patch-xbmc_cores_AudioEngine_Sinks_AESinkOSS.cpp,v 1.2 2015/11/19 02:31:47 jmcneill Exp $
--- xbmc/cores/AudioEngine/Sinks/AESinkOSS.cpp.orig 2015-10-19 06:31:15.000000000 +0000
+++ xbmc/cores/AudioEngine/Sinks/AESinkOSS.cpp
-@@ -30,7 +30,7 @@
- #include <sys/ioctl.h>
- #include <sys/fcntl.h>
+@@ -32,6 +32,9 @@
--#if defined(OSS4) || defined(TARGET_FREEBSD)
-+#if defined(OSS4) || defined(TARGET_FREEBSD) || defined(TARGET_NETBSD)
+ #if defined(OSS4) || defined(TARGET_FREEBSD)
#include <sys/soundcard.h>
++#elif defined(TARGET_NETBSD)
++ #include <sys/soundcard.h>
++ #include <sys/audioio.h>
#else
#include <linux/soundcard.h>
+ #endif
+@@ -41,7 +44,7 @@
+ static enum AEChannel OSSChannelMap[9] =
+ {AE_CH_FL, AE_CH_FR, AE_CH_BL, AE_CH_BR, AE_CH_FC, AE_CH_LFE, AE_CH_SL, AE_CH_SR, AE_CH_NULL};
+
+-#if defined(SNDCTL_SYSINFO) && defined(SNDCTL_CARDINFO)
++#if defined(SNDCTL_SYSINFO) && (defined(SNDCTL_CARDINFO) || defined(TARGET_NETBSD))
+ static int OSSSampleRateList[] =
+ {
+ 5512,
+@@ -84,6 +87,9 @@ std::string CAESinkOSS::GetDeviceUse(con
+
+ if (device.find_first_of('/') != 0)
+ return "/dev/dsp_multich";
++#elif defined(TARGET_NETBSD)
++ if (device.find_first_of('/') != 0)
++ return "/dev/sound";
+ #else
+ if (device.find_first_of('/') != 0)
+ return "/dev/dsp";
+@@ -422,6 +428,65 @@ void CAESinkOSS::Drain()
+
+ void CAESinkOSS::EnumerateDevicesEx(AEDeviceInfoList &list, bool force)
+ {
++#if defined(TARGET_NETBSD)
++ for (int i = 0; i < 32; i++)
++ {
++ std::stringstream audioctlpath;
++ std::stringstream devicepath;
++ std::stringstream devicename;
++ CAEDeviceInfo info;
++ audio_device_t adev;
++
++ audioctlpath << "/dev/audioctl" << i;
++ int audioctlfd = open(audioctlpath.str().c_str(), O_RDONLY, 0);
++ if (audioctlfd == -1)
++ {
++ if (errno == ENOENT)
++ break;
++ else
++ continue;
++ }
++
++ if (ioctl(audioctlfd, AUDIO_GETDEV, &adev) == -1)
++ {
++ close(audioctlfd);
++ continue;
++ }
++
++ devicepath << "/dev/sound" << i;
++ info.m_deviceName = devicepath.str();
++ devicename << adev.name;
++ if (strlen(adev.version) > 0)
++ devicename << " " << adev.version;
++ info.m_displayName = devicename.str();
++
++ info.m_dataFormats.push_back(AE_FMT_S16NE);
++ info.m_deviceType = AE_DEVTYPE_PCM;
++
++ oss_audioinfo ainfo;
++ memset(&ainfo, 0, sizeof(ainfo));
++ ainfo.dev = i;
++ if (ioctl(audioctlfd, SNDCTL_AUDIOINFO, &ainfo) != -1) {
++#if 0
++ if (ainfo.oformats & AFMT_S32_LE)
++ info.m_dataFormats.push_back(AE_FMT_S32LE);
++ if (ainfo.oformats & AFMT_S16_LE)
++ info.m_dataFormats.push_back(AE_FMT_S16LE);
++#endif
++ for (int j = 0;
++ j < ainfo.max_channels && AE_CH_NULL != OSSChannelMap[j];
++ ++j)
++ info.m_channels += OSSChannelMap[j];
++
++ for (int *rate = OSSSampleRateList; *rate != 0; ++rate)
++ if (*rate >= ainfo.min_rate && *rate <= ainfo.max_rate)
++ info.m_sampleRates.push_back(*rate);
++ }
++ list.push_back(info);
++
++ close(audioctlfd);
++ }
++#else
+ int mixerfd;
+ const char * mixerdev = "/dev/mixer";
+
+@@ -505,5 +570,6 @@ void CAESinkOSS::EnumerateDevicesEx(AEDe
+ }
+ #endif
+ close(mixerfd);
++#endif
+ }
+