[PATCH] Sample generation on big endian platforms was broken.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Has not worked since commit 3d1fa924906996463ac33cba5b5143f762d913cf

Signed-off-by: Kenneth Johansson <kenneth@xxxxxxxxxxxx>
---
 test/pcm.c |   24 ++++++++++++++----------
 1 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/test/pcm.c b/test/pcm.c
index ee27422..9b8a923 100644
--- a/test/pcm.c
+++ b/test/pcm.c
@@ -34,14 +34,11 @@ static void generate_sine(const
snd_pcm_channel_area_t *areas,
 	static double max_phase = 2. * M_PI;
 	double phase = *_phase;
 	double step = max_phase*freq/(double)rate;
-	double res;
+	int res;
 	unsigned char *samples[channels], *tmp;
 	int steps[channels];
-	unsigned int chn, byte;
-	union {
-		int i;
-		unsigned char c[4];
-	} ires;
+	unsigned int chn;
+
 	unsigned int maxval = (1 << (snd_pcm_format_width(format) - 1)) - 1;
 	int bps = snd_pcm_format_width(format) / 8;  /* bytes per sample */
 	
@@ -62,11 +59,18 @@ static void generate_sine(const
snd_pcm_channel_area_t *areas,
 	/* fill the channel areas */
 	while (count-- > 0) {
 		res = sin(phase) * maxval;
-		ires.i = res;
-		tmp = ires.c;
 		for (chn = 0; chn < channels; chn++) {
-			for (byte = 0; byte < (unsigned int)bps; byte++)
-				*(samples[chn] + byte) = tmp[byte];
+			/* Generate data in native endian format */
+			switch(bps){
+			case 1:
+				*(samples[chn]) = res;
+				break;
+			case 2:
+				*(short*)(samples[chn]) = res;
+				break;
+			case 4:
+				*(int*)(samples[chn]) = res;
+			}
 			samples[chn] += steps[chn];
 		}
 		phase += step;
-- 
1.6.1.GIT



_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Pulse Audio]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux