Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Sep 2005 20:34:45 +0800
From:      Ariff Abdullah <skywizard@MyBSD.org.my>
To:        lofi@freebsd.org
Cc:        freebsd-multimedia@freebsd.org
Subject:   Re: As promised: Soft volume mixer controller
Message-ID:  <20050914203445.2f8c1ae6.skywizard@MyBSD.org.my>
In-Reply-To: <20050914201600.383df2ce.skywizard@MyBSD.org.my>
References:  <20050913075835.5f055747.skywizard@MyBSD.org.my> <200509140359.33175.lofi@freebsd.org> <20050914101228.4b688886.skywizard@MyBSD.org.my> <200509141241.22914.lofi@freebsd.org> <20050914201600.383df2ce.skywizard@MyBSD.org.my>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 14 Sep 2005 20:16:00 +0800
Ariff Abdullah <skywizard@MyBSD.org.my> wrote:
> +				MIXER_READ(SOUND_MIXER_PCM), (caddr_t)&vol, -1, NULL) !=
> 0)
> +			device_printf(c->dev, "Soft Volume: Failed to read default
> value\n");
> +		CHN_LOCK(c);
> +		chn_setvolume(c, vol & 0x7f, (vol >> 8) & 0x7f);
> +	}
>  
>  	return 0;
>  }
> 
> --- channel.c.diff END ---
> 
> --
> 
Ooopsss... long lines was accidentaly wrapped. Again:

--- channel.c.diff BEGIN ---
--- sys/dev/sound/pcm/channel.c.orig	Wed Sep 14 19:47:43 2005
+++ sys/dev/sound/pcm/channel.c	Wed Sep 14 19:48:04 2005
@@ -884,6 +884,7 @@
 		chn_lockdestroy(c);
 
 		return ret;
+#if 0
 	} else if (c->direction == PCMDIR_PLAY &&
 			c->parentsnddev && (c->parentsnddev->flags & SD_F_SOFTVOL) &&
 			c->parentsnddev->mixer_dev) {
@@ -899,6 +900,7 @@
 		CHN_LOCK(c);
 		chn_setvolume(c, vol & 0x7f, (vol >> 8) & 0x7f);
 		CHN_UNLOCK(c);
+#endif
 	}
 
 	return 0;
@@ -1331,7 +1333,8 @@
 	c->feederflags &= ~(1 << FEEDER_VOLUME);
 	if (c->direction == PCMDIR_PLAY &&
 			!(c->flags & (CHN_F_VIRTUAL|CHN_F_HAS_SLAVE)) &&
-			c->parentsnddev && (c->parentsnddev->flags & SD_F_SOFTVOL))
+			c->parentsnddev && (c->parentsnddev->flags & SD_F_SOFTVOL) &&
+			c->parentsnddev->mixer_dev)
 		c->feederflags |= 1 << FEEDER_VOLUME;
 	flags = c->feederflags;
 	fmtlist = chn_getcaps(c)->fmtlist;
@@ -1396,6 +1399,17 @@
 	}
 
 	sndbuf_setfmt(c->bufhard, hwfmt);
+
+	if ((flags & (1 << FEEDER_VOLUME))) {
+		int vol = 100 | (100 << 8);
+
+		CHN_UNLOCK(c);
+		if (mixer_ioctl(c->parentsnddev->mixer_dev,
+				MIXER_READ(SOUND_MIXER_PCM), (caddr_t)&vol, -1, NULL) != 0)
+			device_printf(c->dev, "Soft Volume: Failed to read default value\n");
+		CHN_LOCK(c);
+		chn_setvolume(c, vol & 0x7f, (vol >> 8) & 0x7f);
+	}
 
 	return 0;
 }

--- channel.c.diff END ---


--

Ariff Abdullah
MyBSD

http://www.MyBSD.org.my (IPv6/IPv4)
http://staff.MyBSD.org.my (IPv6/IPv4)
http://tomoyo.MyBSD.org.my (IPv6/IPv4)



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