Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 27 May 2017 08:28:51 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r318980 - in stable/9/sys: dev/sound/pcm tools/sound
Message-ID:  <201705270828.v4R8SpKR093172@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Sat May 27 08:28:51 2017
New Revision: 318980
URL: https://svnweb.freebsd.org/changeset/base/318980

Log:
  MFC r318820:
  Increase the allowed maximum number of audio channels from 31 to 127
  in the PCM feeder mixer. Without this change a value of 32 channels is
  treated like zero, due to using a mask of 0x1f, causing a kernel
  assert when trying to playback bitperfect 32-channel audio. Also
  update the AWK script which is generating the division tables to
  handle more than 18 channels. This commit complements r282650.

Modified:
  stable/9/sys/dev/sound/pcm/feeder_mixer.c
  stable/9/sys/tools/sound/snd_fxdiv_gen.awk
Directory Properties:
  stable/9/sys/   (props changed)

Modified: stable/9/sys/dev/sound/pcm/feeder_mixer.c
==============================================================================
--- stable/9/sys/dev/sound/pcm/feeder_mixer.c	Sat May 27 08:27:11 2017	(r318979)
+++ stable/9/sys/dev/sound/pcm/feeder_mixer.c	Sat May 27 08:28:51 2017	(r318980)
@@ -131,10 +131,10 @@ static struct feed_mixer_info feed_mixer
 				  sizeof(feed_mixer_info_tab[0])))
 
 #define FEEDMIXER_DATA(i, c)	((void *)				\
-				 ((uintptr_t)((((i) & 0x1f) << 5) |	\
-				 ((c) & 0x1f))))
-#define FEEDMIXER_INFOIDX(d)	((uint32_t)((uintptr_t)(d) >> 5) & 0x1f)
-#define FEEDMIXER_CHANNELS(d)	((uint32_t)((uintptr_t)(d)) & 0x1f)
+				 ((uintptr_t)((((i) & 0x1f) << 7) |	\
+				 ((c) & 0x7f))))
+#define FEEDMIXER_INFOIDX(d)	((uint32_t)((uintptr_t)(d) >> 7) & 0x1f)
+#define FEEDMIXER_CHANNELS(d)	((uint32_t)((uintptr_t)(d)) & 0x7f)
 
 static int
 feed_mixer_init(struct pcm_feeder *f)

Modified: stable/9/sys/tools/sound/snd_fxdiv_gen.awk
==============================================================================
--- stable/9/sys/tools/sound/snd_fxdiv_gen.awk	Sat May 27 08:27:11 2017	(r318979)
+++ stable/9/sys/tools/sound/snd_fxdiv_gen.awk	Sat May 27 08:28:51 2017	(r318980)
@@ -74,7 +74,7 @@ BEGIN {
 	FXSHIFT = 16;
 	FXONE   = shl(1, FXSHIFT);
 
-	SND_CHN_MAX = 18;
+	SND_CHN_MAX = 127;
 
 	PCM_8_BPS  = 1;
 	PCM_16_BPS = 2;
@@ -103,9 +103,9 @@ BEGIN {
 	printf("/*\n");
 	printf(" * Fast unsigned 32bit integer division and rounding, accurate for\n");
 	printf(" * x = 1 - %d. This table should be enough to handle possible\n", FXONE);
-	printf(" * division for 1 - 72 (more can be generated though..).\n");
+	printf(" * division for 1 - 508 (more can be generated though..).\n");
 	printf(" *\n");
-	printf(" * 72 = SND_CHN_MAX * PCM_32_BPS, which is why....\n");
+	printf(" * 508 = SND_CHN_MAX * PCM_32_BPS, which is why....\n");
 	printf(" */\n\n");
 
 	printf("static const uint32_t snd_fxdiv_table[][2] = {\n");



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