From owner-svn-ports-head@freebsd.org  Tue Dec  3 04:33:21 2019
Return-Path: <owner-svn-ports-head@freebsd.org>
Delivered-To: svn-ports-head@mailman.nyi.freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1])
 by mailman.nyi.freebsd.org (Postfix) with ESMTP id DE3471C7626;
 Tue,  3 Dec 2019 04:33:21 +0000 (UTC)
 (envelope-from jbeich@FreeBSD.org)
Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org
 [IPv6:2610:1c1:1:606c::19:3])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 server-signature RSA-PSS (4096 bits)
 client-signature RSA-PSS (4096 bits) client-digest SHA256)
 (Client CN "mxrelay.nyi.freebsd.org",
 Issuer "Let's Encrypt Authority X3" (verified OK))
 by mx1.freebsd.org (Postfix) with ESMTPS id 47Rpy95fMqz3MF2;
 Tue,  3 Dec 2019 04:33:21 +0000 (UTC)
 (envelope-from jbeich@FreeBSD.org)
Received: from repo.freebsd.org (repo.freebsd.org
 [IPv6:2610:1c1:1:6068::e6a:0])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
 (Client did not present a certificate)
 by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A5DF6A439;
 Tue,  3 Dec 2019 04:33:21 +0000 (UTC)
 (envelope-from jbeich@FreeBSD.org)
Received: from repo.freebsd.org ([127.0.1.37])
 by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id xB34XLbH054957;
 Tue, 3 Dec 2019 04:33:21 GMT (envelope-from jbeich@FreeBSD.org)
Received: (from jbeich@localhost)
 by repo.freebsd.org (8.15.2/8.15.2/Submit) id xB34XLC6054955;
 Tue, 3 Dec 2019 04:33:21 GMT (envelope-from jbeich@FreeBSD.org)
Message-Id: <201912030433.xB34XLC6054955@repo.freebsd.org>
X-Authentication-Warning: repo.freebsd.org: jbeich set sender to
 jbeich@FreeBSD.org using -f
From: Jan Beich <jbeich@FreeBSD.org>
Date: Tue, 3 Dec 2019 04:33:21 +0000 (UTC)
To: ports-committers@freebsd.org, svn-ports-all@freebsd.org,
 svn-ports-head@freebsd.org
Subject: svn commit: r518907 - head/audio/alsa-plugins/files
X-SVN-Group: ports-head
X-SVN-Commit-Author: jbeich
X-SVN-Commit-Paths: head/audio/alsa-plugins/files
X-SVN-Commit-Revision: 518907
X-SVN-Commit-Repository: ports
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-BeenThere: svn-ports-head@freebsd.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: SVN commit messages for the ports tree for head
 <svn-ports-head.freebsd.org>
List-Unsubscribe: <https://lists.freebsd.org/mailman/options/svn-ports-head>, 
 <mailto:svn-ports-head-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-ports-head/>
List-Post: <mailto:svn-ports-head@freebsd.org>
List-Help: <mailto:svn-ports-head-request@freebsd.org?subject=help>
List-Subscribe: <https://lists.freebsd.org/mailman/listinfo/svn-ports-head>,
 <mailto:svn-ports-head-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Tue, 03 Dec 2019 04:33:21 -0000

Author: jbeich
Date: Tue Dec  3 04:33:21 2019
New Revision: 518907
URL: https://svnweb.freebsd.org/changeset/ports/518907

Log:
  audio/alsa-plugins: move r505839 to the correct file
  
  files/alsa-plugins.patch contains an assortment of FreeBSD-specific
  improvements that may not work on alternative OSS implementations.
  So, restore the ability to exclude the patch for debugging.

Modified:
  head/audio/alsa-plugins/files/alsa-plugins.patch
  head/audio/alsa-plugins/files/patch-oss_pcm__oss.c   (contents, props changed)

Modified: head/audio/alsa-plugins/files/alsa-plugins.patch
==============================================================================
--- head/audio/alsa-plugins/files/alsa-plugins.patch	Tue Dec  3 04:33:06 2019	(r518906)
+++ head/audio/alsa-plugins/files/alsa-plugins.patch	Tue Dec  3 04:33:21 2019	(r518907)
@@ -82,30 +82,50 @@
  	unsigned int frame_bytes;
  } snd_pcm_oss_t;
  
-@@ -49,8 +73,13 @@ static snd_pcm_sframes_t oss_write(snd_pcm_ioplug_t *i
+@@ -49,8 +73,21 @@ static snd_pcm_sframes_t oss_write(snd_pcm_ioplug_t *i
  	buf = (char *)areas->addr + (areas->first + areas->step * offset) / 8;
  	size *= oss->frame_bytes;
  	result = write(oss->fd, buf, size);
+-	if (result <= 0)
+-		return result;
 +#ifdef __FreeBSD__
-+	if (result == -1)
-+		return -errno;
++	if (result == -1) {
++		if (errno == EAGAIN)
++			return 0;
++		else
++			return -errno;
++	}
 +#else
- 	if (result <= 0)
- 		return result;
++	if (result <= 0) {
++		if (result == -EAGAIN)
++			return 0;
++		else
++			return result;
++	}
 +#endif
  	return result / oss->frame_bytes;
  }
  
-@@ -67,14 +96,80 @@ static snd_pcm_sframes_t oss_read(snd_pcm_ioplug_t *io
+@@ -67,14 +104,88 @@ static snd_pcm_sframes_t oss_read(snd_pcm_ioplug_t *io
  	buf = (char *)areas->addr + (areas->first + areas->step * offset) / 8;
  	size *= oss->frame_bytes;
  	result = read(oss->fd, buf, size);
+-	if (result <= 0)
+-		return result;
 +#ifdef __FreeBSD__
-+	if (result == -1)
-+		return -errno;
++	if (result == -1) {
++		if (errno == EAGAIN)
++			return 0;
++		else
++			return -errno;
++	}
 +#else
- 	if (result <= 0)
- 		return result;
++	if (result <= 0) {
++		if (result == -EAGAIN)
++			return 0;
++		else
++			return result;
++	}
 +#endif
  	return result / oss->frame_bytes;
  }
@@ -177,7 +197,7 @@
  	struct count_info info;
  	int ptr;
  
-@@ -85,20 +180,59 @@ static snd_pcm_sframes_t oss_pointer(snd_pcm_ioplug_t 
+@@ -85,20 +196,59 @@ static snd_pcm_sframes_t oss_pointer(snd_pcm_ioplug_t 
  	}
  	ptr = snd_pcm_bytes_to_frames(io->pcm, info.ptr);
  	return ptr;
@@ -237,7 +257,7 @@
  	return 0;
  }
  
-@@ -107,6 +241,10 @@ static int oss_stop(snd_pcm_ioplug_t *io)
+@@ -107,6 +257,10 @@ static int oss_stop(snd_pcm_ioplug_t *io)
  	snd_pcm_oss_t *oss = io->private_data;
  	int tmp = 0;
  
@@ -248,7 +268,7 @@
  	ioctl(oss->fd, SNDCTL_DSP_SETTRIGGER, &tmp);
  	return 0;
  }
-@@ -115,16 +253,25 @@ static int oss_drain(snd_pcm_ioplug_t *io)
+@@ -115,16 +269,44 @@ static int oss_drain(snd_pcm_ioplug_t *io)
  {
  	snd_pcm_oss_t *oss = io->private_data;
  
@@ -261,6 +281,25 @@
  	return 0;
  }
  
++static int oss_delay(snd_pcm_ioplug_t *io, snd_pcm_sframes_t *delayp)
++{
++	snd_pcm_oss_t *oss = io->private_data;
++	int tmp;
++
++	if (oss->fd < 0)
++		return -EBADFD;
++
++	if (io->stream == SND_PCM_STREAM_PLAYBACK) {
++		if (ioctl(oss->fd, SNDCTL_DSP_GETODELAY, &tmp) < 0 || tmp < 0)
++			tmp = 0;
++	} else {
++		tmp = 0;
++	}
++	*delayp = snd_pcm_bytes_to_frames(io->pcm, tmp);
++
++	return (0);
++}
++
 +#ifndef __FreeBSD__
  static int oss_prepare(snd_pcm_ioplug_t *io)
  {
@@ -274,7 +313,7 @@
  	ioctl(oss->fd, SNDCTL_DSP_RESET);
  
  	tmp = io->channels;
-@@ -145,16 +292,75 @@ static int oss_prepare(snd_pcm_ioplug_t *io)
+@@ -145,16 +327,75 @@ static int oss_prepare(snd_pcm_ioplug_t *io)
  	}
  	return 0;
  }
@@ -350,7 +389,7 @@
  	switch (io->format) {
  	case SND_PCM_FORMAT_U8:
  		oss->format = AFMT_U8;
-@@ -166,9 +372,87 @@ static int oss_hw_params(snd_pcm_ioplug_t *io,
+@@ -166,9 +407,93 @@ static int oss_hw_params(snd_pcm_ioplug_t *io,
  		oss->format = AFMT_S16_BE;
  		break;
  	default:
@@ -362,20 +401,26 @@
 +
 +	ioctl(oss->fd, SNDCTL_DSP_RESET);
 +
-+#define blksz_aligned()		((1 << blksz_shift) -			\
-+				((1 << blksz_shift) % oss->frame_bytes))
-+	blksz_shift = 16;
-+	tmp = io->period_size * oss->frame_bytes;
++	/* use a 16ms HW buffer by default */
++	tmp = ((16 * io->rate) / 1000) * oss->frame_bytes;
 +
-+	while (blksz_shift > 4 && blksz_aligned() > tmp)
-+		blksz_shift--;
++	/* round up to nearest power of two */
++	while (tmp & (tmp - 1))
++		tmp += tmp & ~(tmp - 1);
 +
-+	blkcnt = 2;
++	/* get logarithmic value */
++	for (blksz_shift = 0; blksz_shift < 24; blksz_shift++) {
++		if (tmp == (1 << blksz_shift))
++			break;
++	}
++
 +	tmp = io->buffer_size * oss->frame_bytes;
 +
-+	while (blkcnt < 4096 && (blksz_aligned() * blkcnt) < tmp &&
-+	    ((1 << blksz_shift) * blkcnt) < 131072)
-+		blkcnt <<= 1;
++	/* compute HW buffer big enough to hold SW buffer */
++	for (blkcnt = FREEBSD_OSS_BLKCNT_MIN; blkcnt != FREEBSD_OSS_BLKCNT_MAX; blkcnt *= 2) {
++		if ((blkcnt << blksz_shift) >= tmp)
++			break;
++	}
 +
 +	tmp = blksz_shift | (blkcnt << 16);
 +	if (ioctl(oss->fd, SNDCTL_DSP_SETFRAGMENT, &tmp) < 0) {
@@ -438,7 +483,7 @@
  	period_bytes = io->period_size * oss->frame_bytes;
  	oss->period_shift = 0;
  	for (i = 31; i >= 4; i--) {
-@@ -209,6 +493,7 @@ static int oss_hw_params(snd_pcm_ioplug_t *io,
+@@ -209,6 +534,7 @@ static int oss_hw_params(snd_pcm_ioplug_t *io,
  		goto _retry;
  	}
  	oss->fragment_set = 1;
@@ -446,7 +491,7 @@
  
  	if ((flags = fcntl(oss->fd, F_GETFL)) < 0) {
  		err = -errno;
-@@ -229,16 +514,152 @@ static int oss_hw_params(snd_pcm_ioplug_t *io,
+@@ -229,16 +555,152 @@ static int oss_hw_params(snd_pcm_ioplug_t *io,
  	return 0;
  }
  
@@ -601,7 +646,7 @@
  	unsigned int format[5];
  	unsigned int nchannels;
  	unsigned int channel[6];
-@@ -317,6 +738,7 @@ static int oss_hw_constraint(snd_pcm_oss_t *oss)
+@@ -317,6 +779,7 @@ static int oss_hw_constraint(snd_pcm_oss_t *oss)
  		return err;
  
  	return 0;
@@ -609,7 +654,7 @@
  }
  
  
-@@ -324,6 +746,10 @@ static int oss_close(snd_pcm_ioplug_t *io)
+@@ -324,6 +787,10 @@ static int oss_close(snd_pcm_ioplug_t *io)
  {
  	snd_pcm_oss_t *oss = io->private_data;
  
@@ -620,7 +665,7 @@
  	close(oss->fd);
  	free(oss->device);
  	free(oss);
-@@ -337,7 +763,9 @@ static const snd_pcm_ioplug_callback_t oss_playback_ca
+@@ -337,8 +804,11 @@ static const snd_pcm_ioplug_callback_t oss_playback_ca
  	.pointer = oss_pointer,
  	.close = oss_close,
  	.hw_params = oss_hw_params,
@@ -628,9 +673,11 @@
  	.prepare = oss_prepare,
 +#endif
  	.drain = oss_drain,
++	.delay = oss_delay,
  };
  
-@@ -348,7 +776,9 @@ static const snd_pcm_ioplug_callback_t oss_capture_cal
+ static const snd_pcm_ioplug_callback_t oss_capture_callback = {
+@@ -348,8 +818,11 @@ static const snd_pcm_ioplug_callback_t oss_capture_cal
  	.pointer = oss_pointer,
  	.close = oss_close,
  	.hw_params = oss_hw_params,
@@ -638,9 +685,11 @@
  	.prepare = oss_prepare,
 +#endif
  	.drain = oss_drain,
++	.delay = oss_delay,
  };
  
-@@ -360,6 +790,10 @@ SND_PCM_PLUGIN_DEFINE_FUNC(oss)
+ 
+@@ -360,6 +833,10 @@ SND_PCM_PLUGIN_DEFINE_FUNC(oss)
  	int err;
  	snd_pcm_oss_t *oss;
  	

Modified: head/audio/alsa-plugins/files/patch-oss_pcm__oss.c
==============================================================================
--- head/audio/alsa-plugins/files/patch-oss_pcm__oss.c	Tue Dec  3 04:33:06 2019	(r518906)
+++ head/audio/alsa-plugins/files/patch-oss_pcm__oss.c	Tue Dec  3 04:33:21 2019	(r518907)
@@ -10,146 +10,23 @@
 +#include <sys/soundcard.h>
 +#endif
  
- #define ARRAY_SIZE(x)	(sizeof(x) / sizeof(*(x)))
+ typedef struct snd_pcm_oss {
+ 	snd_pcm_ioplug_t io;
+@@ -116,7 +120,7 @@ static int oss_drain(snd_pcm_ioplug_t *io)
+ 	snd_pcm_oss_t *oss = io->private_data;
  
-@@ -74,11 +78,19 @@ static snd_pcm_sframes_t oss_write(snd_pcm_ioplug_t *i
- 	size *= oss->frame_bytes;
- 	result = write(oss->fd, buf, size);
- #ifdef __FreeBSD__
--	if (result == -1)
--		return -errno;
-+	if (result == -1) {
-+		if (errno == EAGAIN)
-+			return 0;
-+		else
-+			return -errno;
-+	}
- #else
--	if (result <= 0)
--		return result;
-+	if (result <= 0) {
-+		if (result == -EAGAIN)
-+			return 0;
-+		else
-+			return result;
-+	}
- #endif
- 	return result / oss->frame_bytes;
- }
-@@ -97,11 +109,19 @@ static snd_pcm_sframes_t oss_read(snd_pcm_ioplug_t *io
- 	size *= oss->frame_bytes;
- 	result = read(oss->fd, buf, size);
- #ifdef __FreeBSD__
--	if (result == -1)
--		return -errno;
-+	if (result == -1) {
-+		if (errno == EAGAIN)
-+			return 0;
-+		else
-+			return -errno;
-+	}
- #else
--	if (result <= 0)
--		return result;
-+	if (result <= 0) {
-+		if (result == -EAGAIN)
-+			return 0;
-+		else
-+			return result;
-+	}
- #endif
- 	return result / oss->frame_bytes;
- }
-@@ -258,10 +278,29 @@ static int oss_drain(snd_pcm_ioplug_t *io)
- #endif
- 
  	if (io->stream == SND_PCM_STREAM_PLAYBACK)
 -		ioctl(oss->fd, SNDCTL_DSP_SYNC);
 +		ioctl(oss->fd, SNDCTL_DSP_SYNC, NULL);
  	return 0;
  }
  
-+static int oss_delay(snd_pcm_ioplug_t *io, snd_pcm_sframes_t *delayp)
-+{
-+	snd_pcm_oss_t *oss = io->private_data;
-+	int tmp;
-+
-+	if (oss->fd < 0)
-+		return -EBADFD;
-+
-+	if (io->stream == SND_PCM_STREAM_PLAYBACK) {
-+		if (ioctl(oss->fd, SNDCTL_DSP_GETODELAY, &tmp) < 0 || tmp < 0)
-+			tmp = 0;
-+	} else {
-+		tmp = 0;
-+	}
-+	*delayp = snd_pcm_bytes_to_frames(io->pcm, tmp);
-+
-+	return (0);
-+}
-+
- #ifndef __FreeBSD__
- static int oss_prepare(snd_pcm_ioplug_t *io)
- {
-@@ -272,7 +311,7 @@ static int oss_prepare(snd_pcm_ioplug_t *io)
- 	fprintf(stderr, "%s()\n", __func__);
- #endif
+@@ -125,7 +129,7 @@ static int oss_prepare(snd_pcm_ioplug_t *io)
+ 	snd_pcm_oss_t *oss = io->private_data;
+ 	int tmp;
  
 -	ioctl(oss->fd, SNDCTL_DSP_RESET);
 +	ioctl(oss->fd, SNDCTL_DSP_RESET, NULL);
  
  	tmp = io->channels;
  	if (ioctl(oss->fd, SNDCTL_DSP_CHANNELS, &tmp) < 0) {
-@@ -380,20 +419,26 @@ static int oss_hw_params(snd_pcm_ioplug_t *io,
- 
- 	ioctl(oss->fd, SNDCTL_DSP_RESET);
- 
--#define blksz_aligned()		((1 << blksz_shift) -			\
--				((1 << blksz_shift) % oss->frame_bytes))
--	blksz_shift = 16;
--	tmp = io->period_size * oss->frame_bytes;
-+	/* use a 16ms HW buffer by default */
-+	tmp = ((16 * io->rate) / 1000) * oss->frame_bytes;
- 
--	while (blksz_shift > 4 && blksz_aligned() > tmp)
--		blksz_shift--;
-+	/* round up to nearest power of two */
-+	while (tmp & (tmp - 1))
-+		tmp += tmp & ~(tmp - 1);
- 
--	blkcnt = 2;
-+	/* get logarithmic value */
-+	for (blksz_shift = 0; blksz_shift < 24; blksz_shift++) {
-+		if (tmp == (1 << blksz_shift))
-+			break;
-+	}
-+
- 	tmp = io->buffer_size * oss->frame_bytes;
- 
--	while (blkcnt < 4096 && (blksz_aligned() * blkcnt) < tmp &&
--	    ((1 << blksz_shift) * blkcnt) < 131072)
--		blkcnt <<= 1;
-+	/* compute HW buffer big enough to hold SW buffer */
-+	for (blkcnt = FREEBSD_OSS_BLKCNT_MIN; blkcnt != FREEBSD_OSS_BLKCNT_MAX; blkcnt *= 2) {
-+		if ((blkcnt << blksz_shift) >= tmp)
-+			break;
-+	}
- 
- 	tmp = blksz_shift | (blkcnt << 16);
- 	if (ioctl(oss->fd, SNDCTL_DSP_SETFRAGMENT, &tmp) < 0) {
-@@ -767,6 +812,7 @@ static const snd_pcm_ioplug_callback_t oss_playback_ca
- 	.prepare = oss_prepare,
- #endif
- 	.drain = oss_drain,
-+	.delay = oss_delay,
- };
- 
- static const snd_pcm_ioplug_callback_t oss_capture_callback = {
-@@ -780,6 +826,7 @@ static const snd_pcm_ioplug_callback_t oss_capture_cal
- 	.prepare = oss_prepare,
- #endif
- 	.drain = oss_drain,
-+	.delay = oss_delay,
- };
- 
-