Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Dec 2019 04:33:21 +0000 (UTC)
From:      Jan Beich <jbeich@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r518907 - head/audio/alsa-plugins/files
Message-ID:  <201912030433.xB34XLC6054955@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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,
- };
- 
- 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201912030433.xB34XLC6054955>