changeset 10550:77ea2655f7b2

6882240 need support for chinfo relocations on recording
author Garrett D'Amore <gdamore@opensolaris.org>
date Tue, 15 Sep 2009 16:03:59 -0700
parents bb77cedc0815
children 62422ea6e65b
files usr/src/uts/common/io/audio/impl/audio_input.c
diffstat 1 files changed, 13 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/audio/impl/audio_input.c	Tue Sep 15 20:42:12 2009 +0100
+++ b/usr/src/uts/common/io/audio/impl/audio_input.c	Tue Sep 15 16:03:59 2009 -0700
@@ -40,29 +40,25 @@
 void									\
 auimpl_import_##NAME(audio_engine_t *eng, audio_stream_t *sp)		\
 {									\
-	int	nch = eng->e_nchan;					\
-	int32_t *out;							\
-	TYPE	*in;							\
-	int	ch;							\
-	void	*data;							\
-	int	vol;							\
-									\
-	data = sp->s_cnv_src;						\
-	ch = 0;								\
-	in = (void *)(eng->e_data + (eng->e_tidx * eng->e_framesz));	\
-	out = data;							\
-	vol = sp->s_gain_eff;						\
+	int		fragfr = eng->e_fragfr;				\
+	int		nch = eng->e_nchan;				\
+	unsigned	tidx = eng->e_tidx;				\
+	int32_t 	*out = (void *)sp->s_cnv_src;			\
+	TYPE		*in = (void *)eng->e_data;			\
+	int		ch = 0;						\
+	int		vol = sp->s_gain_eff;				\
 									\
 	do {	/* for each channel */					\
-		TYPE *ip;						\
+		TYPE 	*ip;						\
 		int32_t *op;						\
-		int i;							\
+		int 	i;						\
+		int 	incr = eng->e_chincr[ch];			\
 									\
 		/* get value and adjust next channel offset */		\
 		op = out++;						\
-		ip = in++;						\
+		ip = in + eng->e_choffs[ch] + (tidx * incr);		\
 									\
-		i = eng->e_fragfr;					\
+		i = fragfr;						\
 									\
 		do {	/* for each frame */				\
 			int32_t	sample = (TYPE)SWAP(*ip);		\
@@ -72,7 +68,7 @@
 			scaled /= AUDIO_VOL_SCALE;			\
 									\
 			*op = scaled;					\
-			ip += nch;					\
+			ip += incr;					\
 			op += nch;					\
 									\
 		} while (--i);						\