On Sat, Dec 27, 2008 at 04:44:22PM +0100, Antoine Jacoutot wrote: > On Sat, 27 Dec 2008, Stefan Sperling wrote: > > Currently, I can only use it with OSS, without aucat running. > > It has esd support but if I try to use that for multiplexing > > (with esd running over aucat or standalone), there's no sound > > going in nor out of ekiga. Something seems to be broken there. > > So it's either listen to music, or be able to get phone calls, > > but not both. > > > > An update to the latest version (3.0.1) would also be nice. > > Since I want this, I'd be willing to spend time on that. > > > > ajacoutot@ is the maintainer, so I put him in Cc. > > Jacob already has some patches for updating ekiga to the latest version.
yeah, but I've stalled on the updates, partly beause it's a big project to update all the other p[tw]lib ports, and I can't test some of them. in the meantime, here's a sndio backend for pwlib. you'll have to use aucat, since pwlib uses a separate thread for recording and playback, and it is much easier to let each thread open connections to aucat than to add locks/private stores/etc. make sure you have "echo cancellation" and "silence detection" turned of in Edit->Preferences->Codecs->Audio Codecs. they seem to be over agressive and cause dropouts. -- [email protected] SDF Public Access UNIX System - http://sdf.lonestar.org Index: Makefile =================================================================== RCS file: /home2/cvs/OpenBSD/ports/devel/pwlib/Makefile,v retrieving revision 1.15 diff -u -r1.15 Makefile --- Makefile 8 Sep 2008 17:17:10 -0000 1.15 +++ Makefile 27 Dec 2008 21:40:28 -0000 @@ -6,7 +6,7 @@ V= 1_12_0 DISTNAME= ptlib-v${V} -PKGNAME= pwlib-${V:S/_/./g}p6 +PKGNAME= pwlib-${V:S/_/./g}p7 CATEGORIES= devel EXTRACT_SUFX= -src.tar.gz @@ -25,7 +25,7 @@ MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=h323plus/} -WANTLIB= crypto expat ossaudio sasl2 ssl +WANTLIB= crypto expat ossaudio sndio sasl2 ssl BUILD_DEPENDS= ::devel/bison LIB_DEPENDS= esd.>=2::audio/esound \ @@ -59,6 +59,10 @@ --disable-avc \ --disable-dc \ --disable-odbc + +post-patch: + @mkdir ${WRKSRC}/plugins/sound_libsndio + @cp ${FILESDIR}/{Makefile,sound_libsndio.*} ${WRKSRC}/plugins/sound_libsndio pre-configure: @perl -pi -e 's,!!PREFIX!!,${PREFIX},g' \ Index: files/Makefile =================================================================== RCS file: files/Makefile diff -N files/Makefile --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/Makefile 27 Dec 2008 21:40:28 -0000 @@ -0,0 +1,10 @@ +ifndef PWLIBDIR +PWLIBDIR = $(HOME)/pwlib +endif + +PLUGIN_NAME = libsndio +PLUGIN_FAMILY = device/sound +PLUGIN_LIBS = -lsndio +PLUGIN_SOURCES = sound_libsndio.cxx + +include ../../make/plugins.mak Index: files/sound_libsndio.cxx =================================================================== RCS file: files/sound_libsndio.cxx diff -N files/sound_libsndio.cxx --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/sound_libsndio.cxx 27 Dec 2008 21:40:28 -0000 @@ -0,0 +1,487 @@ +/* + * sound_libsndio.cxx + * + * Sound driver implementation. + * + * Portable Windows Library + * + * Copyright (c) 1993-1998 Equivalence Pty. Ltd. + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.0 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + * the License for the specific language governing rights and limitations + * under the License. + * + * The Original Code is Portable Windows Library. + * + * The Initial Developer of the Original Code is Equivalence Pty. Ltd. + * + * Portions are Copyright (C) 1993 Free Software Foundation, Inc. + * All Rights Reserved. + * + * $Log: sound_libsndio.cxx,v $ + */ + +#pragma implementation "sound_libsndio.h" + +#include "sound_libsndio.h" + +#include <sys/poll.h> + +PCREATE_SOUND_PLUGIN(LIBSNDIO, PSoundChannelLIBSNDIO); + +PSoundChannelLIBSNDIO::PSoundChannelLIBSNDIO() +{ + PSoundChannelLIBSNDIO::Construct(); +} + + +PSoundChannelLIBSNDIO::PSoundChannelLIBSNDIO(const PString & device, + Directions dir, + unsigned numChannels, + unsigned sampleRate, + unsigned bitsPerSample) +{ + Construct(); + Open(device, dir, numChannels, sampleRate, bitsPerSample); +} + + +void PSoundChannelLIBSNDIO::Construct() +{ + os_handle = -1; + hdl = NULL; +} + + +PSoundChannelLIBSNDIO::~PSoundChannelLIBSNDIO() +{ + Close(); +} + + +PStringArray PSoundChannelLIBSNDIO::GetDeviceNames(Directions /*dir*/) +{ + PStringList devices; + + devices.AppendString("libsndio"); + + return devices; +} + + +PString PSoundChannelLIBSNDIO::GetDefaultDevice(Directions dir) +{ + PStringArray devicenames; + devicenames = PSoundChannelLIBSNDIO::GetDeviceNames(dir); + return devicenames[0]; +} + +BOOL PSoundChannelLIBSNDIO::Open(const PString & device, + Directions dir, + unsigned numChannels, + unsigned sampleRate, + unsigned bitsPerSample) +{ + uint mode; + + Close(); + + if (dir == Recorder) + mode = SIO_REC; + else + mode = SIO_PLAY; + + hdl = sio_open(NULL, mode, 0); + if (hdl == NULL) { + printf("sio_open failed\n"); + return FALSE; + } + + mDirection = dir; + mDevice = device; + mSampleRate = sampleRate; + mNumChannels = numChannels; + mBitsPerSample = bitsPerSample; + mBytesPerFrame = (bitsPerSample / 8) * numChannels; + + isInitialised = FALSE; + + return TRUE; +} + +BOOL PSoundChannelLIBSNDIO::Setup() +{ + if (!hdl) { + PTRACE(6, "LIBSNDIO\tSkipping setup of " << mDevice << " as not open"); + return FALSE; + } + + if (isInitialised) { + PTRACE(6, "LIBSNDIO\tSkipping setup of " << mDevice << " as instance already initialised"); + return TRUE; + } + + PTRACE(6, "LIBSNDIO\tInitialising " << mDevice); + + sio_initpar(&par); + + int framesPerFrag = mFragSize / mBytesPerFrame; + par.bufsz = mFragCount * framesPerFrag; + par.round = framesPerFrag; + + par.bits = mBitsPerSample; + par.sig = 1; +#if PBYTE_ORDER == PLITTLE_ENDIAN + par.le = 1; +#else + par.le = 0; +#endif + + if (mDirection == Recorder) + par.rchan = mNumChannels; + else + par.pchan = mNumChannels; + + par.rate = mSampleRate; + + if (!sio_setpar(hdl, &par)) { + printf("sio_setpar failed\n"); + return FALSE; + } + + if (!sio_getpar(hdl, &par)) { + printf("sio_getpar failed\n"); + return FALSE; + } + + mFragSize = par.round * mBytesPerFrame; + mFragCount = par.bufsz / par.round; + + if (!sio_start(hdl)) { + printf("sio_start failed\n"); + return FALSE; + } + + isInitialised = TRUE; + + return TRUE; +} + +BOOL PSoundChannelLIBSNDIO::Close() +{ + if (!hdl) + return TRUE; + + sio_close(hdl); + hdl = NULL; + return PChannel::Close(); +} + +BOOL PSoundChannelLIBSNDIO::IsOpen() const +{ + return (hdl != NULL); +} + +BOOL PSoundChannelLIBSNDIO::Write(const void * buf, PINDEX len) +{ + lastWriteCount = 0; + + if (!Setup() || !hdl) + return FALSE; + + int did, tot = 0; + + while (len > 0) { + did = sio_write(hdl, (void *)buf, len); + if (did == 0) { + printf("sio_write failed\n"); + return FALSE; + } + len -= did; + (char *)buf += did; + tot += did; + } + lastWriteCount += tot; + + return TRUE; +} + +BOOL PSoundChannelLIBSNDIO::Read(void * buf, PINDEX len) +{ + lastReadCount = 0; + + if (!Setup() || !hdl) + return FALSE; + + int did, tot = 0; + + while (len > 0) { + did = sio_read(hdl, buf, len); + if (did == 0) { + printf("sio_read failed\n"); + return FALSE; + } + len -= did; + (char *)buf += did; + tot += did; + } + lastReadCount += tot; + + return TRUE; +} + + +BOOL PSoundChannelLIBSNDIO::SetFormat(unsigned numChannels, + unsigned sampleRate, + unsigned bitsPerSample) +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + PAssert((bitsPerSample == 8) || (bitsPerSample == 16), PInvalidParameter); + PAssert(numChannels >= 1 && numChannels <= 2, PInvalidParameter); + + if (isInitialised) { + if ((numChannels != mNumChannels) || + (sampleRate != mSampleRate) || + (bitsPerSample != mBitsPerSample)) { + PTRACE(6, "LIBSNDIO\tTried to change read/write format without stopping"); + return FALSE; + } + return TRUE; + } + + mNumChannels = numChannels; + mSampleRate = sampleRate; + mBitsPerSample = bitsPerSample; + isInitialised = FALSE; + + return TRUE; +} + + +unsigned PSoundChannelLIBSNDIO::GetChannels() const +{ + return mNumChannels; +} + + +unsigned PSoundChannelLIBSNDIO::GetSampleRate() const +{ + return mSampleRate; +} + + +unsigned PSoundChannelLIBSNDIO::GetSampleSize() const +{ + return mBitsPerSample; +} + + +BOOL PSoundChannelLIBSNDIO::SetBuffers(PINDEX size, PINDEX count) +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + PAssert(size > 0 && count > 0 && count < 65536, PInvalidParameter); + + if (isInitialised) { + if (mFragSize != (unsigned)size || mFragCount != (unsigned)count) { + PTRACE(6, "LIBSNDIO\tTried to change buffers without stopping"); + return FALSE; + } + return TRUE; + } + + mFragSize = size; + mFragCount = count; + isInitialised = FALSE; + + return TRUE; +} + + +BOOL PSoundChannelLIBSNDIO::GetBuffers(PINDEX & size, PINDEX & count) +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + count = mFragCount; + size = mFragSize; + + return TRUE; +} + + +BOOL PSoundChannelLIBSNDIO::PlaySound(const PSound & sound, BOOL wait) +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + if (!Write((const BYTE *)sound, sound.GetSize())) + return FALSE; + + if (wait) + return WaitForPlayCompletion(); + + return TRUE; +} + + +BOOL PSoundChannelLIBSNDIO::PlayFile(const PFilePath & filename, BOOL wait) +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + PFile file(filename, PFile::ReadOnly); + if (!file.IsOpen()) + return FALSE; + + for (;;) { + BYTE buffer[256]; + if (!file.Read(buffer, 256)) + break; + PINDEX len = file.GetLastReadCount(); + if (len == 0) + break; + if (!Write(buffer, len)) + break; + } + + file.Close(); + + if (wait) + return WaitForPlayCompletion(); + + return TRUE; +} + + +BOOL PSoundChannelLIBSNDIO::HasPlayCompleted() +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + return TRUE; +} + + +BOOL PSoundChannelLIBSNDIO::WaitForPlayCompletion() +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + return TRUE; +} + + +BOOL PSoundChannelLIBSNDIO::RecordSound(PSound & sound) +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + return FALSE; +} + + +BOOL PSoundChannelLIBSNDIO::RecordFile(const PFilePath & filename) +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + return FALSE; +} + + +BOOL PSoundChannelLIBSNDIO::StartRecording() +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + return TRUE; +} + + +BOOL PSoundChannelLIBSNDIO::IsRecordBufferFull() +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + struct pollfd pfd; + int events = POLLIN; + sio_pollfd(hdl, &pfd, events); + return ConvertOSError(::poll(&pfd, 1, 0)); +} + + +BOOL PSoundChannelLIBSNDIO::AreAllRecordBuffersFull() +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + struct pollfd pfd; + int events = POLLIN; + sio_pollfd(hdl, &pfd, events); + return ConvertOSError(::poll(&pfd, 1, 0)); +} + + +BOOL PSoundChannelLIBSNDIO::WaitForRecordBufferFull() +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + // return PXSetIOBlock(PXReadBlock, readTimeout); + + struct pollfd pfd; + int events = POLLIN; + sio_pollfd(hdl, &pfd, events); + return ConvertOSError(::poll(&pfd, 1, 1000)); +} + + +BOOL PSoundChannelLIBSNDIO::WaitForAllRecordBuffersFull() +{ + if (!hdl) + return SetErrorValues(NotOpen, EBADF); + + struct pollfd pfd; + int events = POLLIN; + sio_pollfd(hdl, &pfd, events); + return ConvertOSError(::poll(&pfd, 1, 1000)); +} + + +BOOL PSoundChannelLIBSNDIO::Abort() +{ + return TRUE; +} + + +BOOL PSoundChannelLIBSNDIO::SetVolume(unsigned newVal) +{ + if (!hdl) + return FALSE; + + return FALSE; +} + + +BOOL PSoundChannelLIBSNDIO::GetVolume(unsigned &devVol) +{ + if (!hdl) + return FALSE; + + devVol = 0; + return FALSE; +} + + + +// End of file Index: files/sound_libsndio.h =================================================================== RCS file: files/sound_libsndio.h diff -N files/sound_libsndio.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/sound_libsndio.h 27 Dec 2008 21:40:28 -0000 @@ -0,0 +1,66 @@ + +#include <ptlib.h> +#include <ptlib/sound.h> +#include <ptlib/socket.h> + +#include <sndio.h> + +class PSoundChannelLIBSNDIO: public PSoundChannel +{ + public: + PSoundChannelLIBSNDIO(); + void Construct(); + PSoundChannelLIBSNDIO(const PString &device, + PSoundChannel::Directions dir, + unsigned numChannels, + unsigned sampleRate, + unsigned bitsPerSample); + ~PSoundChannelLIBSNDIO(); + static PStringArray GetDeviceNames(PSoundChannel::Directions = Player); + static PString GetDefaultDevice(PSoundChannel::Directions); + BOOL Open(const PString & _device, + Directions _dir, + unsigned _numChannels, + unsigned _sampleRate, + unsigned _bitsPerSample); + BOOL Setup(); + BOOL Close(); + BOOL IsOpen() const; + BOOL Write(const void * buf, PINDEX len); + BOOL Read(void * buf, PINDEX len); + BOOL SetFormat(unsigned numChannels, + unsigned sampleRate, + unsigned bitsPerSample); + unsigned GetChannels() const; + unsigned GetSampleRate() const; + unsigned GetSampleSize() const; + BOOL SetBuffers(PINDEX size, PINDEX count); + BOOL GetBuffers(PINDEX & size, PINDEX & count); + BOOL PlaySound(const PSound & sound, BOOL wait); + BOOL PlayFile(const PFilePath & filename, BOOL wait); + BOOL HasPlayCompleted(); + BOOL WaitForPlayCompletion(); + BOOL RecordSound(PSound & sound); + BOOL RecordFile(const PFilePath & filename); + BOOL StartRecording(); + BOOL IsRecordBufferFull(); + BOOL AreAllRecordBuffersFull(); + BOOL WaitForRecordBufferFull(); + BOOL WaitForAllRecordBuffersFull(); + BOOL Abort(); + BOOL SetVolume(unsigned newVal); + BOOL GetVolume(unsigned &devVol); + + protected: + struct sio_hdl *hdl; + struct sio_par par; + unsigned mNumChannels; + unsigned mSampleRate; + unsigned mBitsPerSample; + unsigned mFragCount; + unsigned mFragSize; + unsigned mBytesPerFrame; + Directions mDirection; + PString mDevice; + BOOL isInitialised; +}; Index: patches/patch-plugins_Makefile_in =================================================================== RCS file: patches/patch-plugins_Makefile_in diff -N patches/patch-plugins_Makefile_in --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-plugins_Makefile_in 27 Dec 2008 21:40:28 -0000 @@ -0,0 +1,19 @@ +$OpenBSD$ +--- plugins/Makefile.in.orig Sat Oct 18 23:00:39 2008 ++++ plugins/Makefile.in Sat Oct 18 23:02:10 2008 +@@ -31,6 +31,15 @@ DEFAULT_SOUND = sound_esd + endif + endif + ++HAS_LIBSNDIO = @HAS_LIBSNDIO@ ++ ++ifeq (1,$(HAS_LIBSNDIO)) ++SUBDIRS += sound_libsndio ++ifeq (,$(DEFAULT_SOUND)) ++DEFAULT_SOUND = sound_libsndio ++endif ++endif ++ + HAS_SUNAUDIO = @HAS_SUNAUDIO@ + + ifeq (1,$(HAS_SUNAUDIO)) Index: patches/patch-plugins_configure =================================================================== RCS file: /home2/cvs/OpenBSD/ports/devel/pwlib/patches/patch-plugins_configure,v retrieving revision 1.3 diff -u -r1.3 patch-plugins_configure --- patches/patch-plugins_configure 29 Apr 2008 11:42:45 -0000 1.3 +++ patches/patch-plugins_configure 27 Dec 2008 21:40:29 -0000 @@ -1,7 +1,27 @@ $OpenBSD: patch-plugins_configure,v 1.3 2008/04/29 11:42:45 ajacoutot Exp $ ---- plugins/configure.orig Fri Oct 19 08:22:33 2007 -+++ plugins/configure Tue Apr 29 09:49:24 2008 -@@ -3479,7 +3479,7 @@ echo "${ECHO_T}$ac_cv_header_sys_soundcard_h" >&6 +--- plugins/configure.orig Thu Oct 18 23:22:33 2007 ++++ plugins/configure Sat Oct 18 23:11:09 2008 +@@ -309,7 +309,7 @@ ac_includes_default="\ + # include <unistd.h> + #endif" + +-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT PWLIBDIR PWINSTDIR INSTALLPREFIX LIBDIR CC CFLAGS ac_ct_CC CPP EGREP HAS_ALSA HAS_ESD HAS_OSS HAS_SUNAUDIO HAS_V4L HAS_V4L2 HAS_BSDVIDEOCAP HAS_AVC1394 HAS_DC1394 DC_CFLAGS LIBOBJS LTLIBOBJS' ++ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT PWLIBDIR PWINSTDIR INSTALLPREFIX LIBDIR CC CFLAGS ac_ct_CC CPP EGREP HAS_ALSA HAS_ESD HAS_LIBSNDIO HAS_OSS HAS_SUNAUDIO HAS_V4L HAS_V4L2 HAS_BSDVIDEOCAP HAS_AVC1394 HAS_DC1394 DC_CFLAGS LIBOBJS LTLIBOBJS' + ac_subst_files='' + + # Initialize some variables set by options. +@@ -3459,6 +3459,10 @@ echo "${ECHO_T}no" >&6 + fi + + ++# for now ... ++HAS_LIBSNDIO=1 ++ ++ + # Check whether --enable-oss or --disable-oss was given. + if test "${enable_oss+set}" = set; then + enableval="$enable_oss" +@@ -3479,7 +3483,7 @@ echo "${ECHO_T}$ac_cv_header_sys_soundcard_h" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking sys/soundcard.h usability" >&5 @@ -10,7 +30,7 @@ cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF -@@ -3487,7 +3487,7 @@ cat confdefs.h >>conftest.$ac_ext +@@ -3487,7 +3491,7 @@ cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default @@ -19,7 +39,7 @@ _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 -@@ -3523,18 +3523,18 @@ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +@@ -3523,18 +3527,18 @@ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? @@ -43,7 +63,7 @@ ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 -@@ -3595,7 +3595,7 @@ _ASBOX +@@ -3595,7 +3599,7 @@ _ASBOX ;; esac echo "$as_me:$LINENO: checking for sys/soundcard.h" >&5 @@ -52,7 +72,7 @@ if test "${ac_cv_header_sys_soundcard_h+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else -@@ -3979,7 +3979,7 @@ if test "${enable_v4l2}z" = "yesz" ; then +@@ -3979,7 +3983,7 @@ if test "${enable_v4l2}z" = "yesz" ; then if test "${OSTYPE}z" = "solaris2.11z"; then VIDEODEV="sys/videodev2.h" else @@ -61,7 +81,7 @@ fi as_ac_Header=`echo "ac_cv_header_$VIDEODEV" | $as_tr_sh` echo "$as_me:$LINENO: checking for $VIDEODEV" >&5 -@@ -4485,8 +4485,8 @@ cat >>conftest.$ac_ext <<_ACEOF +@@ -4485,8 +4489,8 @@ cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <dev/ic/bt8xx.h> _ACEOF @@ -72,3 +92,11 @@ ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 +@@ -6059,6 +6063,7 @@ s,@CPP@,$CPP,;t t + s,@EGREP@,$EGREP,;t t + s,@HAS_ALSA@,$HAS_ALSA,;t t + s,@HAS_ESD@,$HAS_ESD,;t t ++s,@HAS_LIBSNDIO@,$HAS_LIBSNDIO,;t t + s,@HAS_OSS@,$HAS_OSS,;t t + s,@HAS_SUNAUDIO@,$HAS_SUNAUDIO,;t t + s,@HAS_V4L@,$HAS_V4L,;t t Index: pkg/PLIST =================================================================== RCS file: /home2/cvs/OpenBSD/ports/devel/pwlib/pkg/PLIST,v retrieving revision 1.5 diff -u -r1.5 PLIST --- pkg/PLIST 22 May 2008 19:25:32 -0000 1.5 +++ pkg/PLIST 27 Dec 2008 21:40:29 -0000 @@ -175,6 +175,7 @@ lib/pwlib/devices/ lib/pwlib/devices/sound/ lib/pwlib/devices/sound/esd_pwplugin.so +lib/pwlib/devices/sound/libsndio_pwplugin.so lib/pwlib/devices/sound/oss_pwplugin.so lib/pwlib/devices/videoinput/ lib/pwlib/devices/videoinput/bsdvideo_pwplugin.so
