diff options
author | jmcneill <jmcneill@pkgsrc.org> | 2015-11-19 02:31:47 +0000 |
---|---|---|
committer | jmcneill <jmcneill@pkgsrc.org> | 2015-11-19 02:31:47 +0000 |
commit | 563b51201c369f83a452be62b41cda4dc9d77899 (patch) | |
tree | 733fcd73639a84052b3fd5efb0d1ee2a89b1c54c /multimedia | |
parent | 91deb2489d026ed8e14a2b016f928896e18337e5 (diff) | |
download | pkgsrc-563b51201c369f83a452be62b41cda4dc9d77899.tar.gz |
Fix audio device detection for NetBSD.
Diffstat (limited to 'multimedia')
-rw-r--r-- | multimedia/kodi/Makefile | 4 | ||||
-rw-r--r-- | multimedia/kodi/distinfo | 4 | ||||
-rw-r--r-- | multimedia/kodi/patches/patch-xbmc_cores_AudioEngine_Sinks_AESinkOSS.cpp | 105 |
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 + } + |