diff src/CoreAudio/audio.c @ 63:023b3e4147c0 trunk

[svn] - implement osx_format_is_neutral(), returns TRUE if endianness of the format is neutral, otherwise FALSE if conversion is needed. - only select a conversion strategy if endianness is not neutral
author nenolod
date Sat, 30 Sep 2006 21:53:30 -0700
parents 4a352dd2a91c
children 755a71ca3c92
line wrap: on
line diff
--- a/src/CoreAudio/audio.c	Sat Sep 30 21:40:46 2006 -0700
+++ b/src/CoreAudio/audio.c	Sat Sep 30 21:53:30 2006 -0700
@@ -93,6 +93,25 @@
 	return bitrate;
 }
 
+static gboolean osx_format_is_neutral(AFormat fmt)
+{
+	gboolean ret = FALSE;
+
+	switch (fmt)
+	{
+		case FMT_U16_NE:
+		case FMT_S16_NE:
+		case FMT_U8:
+		case FMT_S8:
+			ret = TRUE;
+			break;
+		default:
+			break;
+	}
+
+	return ret;
+}
+
 static int osx_get_format(AFormat fmt)
 {
 	int format = 0;
@@ -118,7 +137,7 @@
 			break;
 	}
 
-	printf("in: %d, out: %d\n", fmt, format);
+	printf("osx_get_format: in: %d, out: %d\n", fmt, format);
 
 	return format;
 }
@@ -176,7 +195,7 @@
 			break;
 	}
 
-	printf("in: %d, out: %d\n", fmt, format);
+	printf("osx_conv_get_format: in: %d, out: %d\n", fmt, format);
 
 	return format;
 }
@@ -286,11 +305,6 @@
 
 	osx_set_audio_params();
 
-        if (fmt != osx_get_conv_format(fmt))
-	        osx_convert_func = osx_get_convert_func(fmt, osx_get_conv_format(fmt));
-	else
-		osx_convert_func = NULL;
-
 	output.bps = osx_calc_bitrate(output.format.osx, output.frequency,output.channels);
 }
 
@@ -604,6 +618,11 @@
 
 	//printf("format is PCM\n");
 
+	if (osx_format_is_neutral(fmt) == FALSE)
+	        osx_convert_func = osx_get_convert_func(fmt, osx_get_conv_format(fmt));
+	else
+		osx_convert_func = NULL;
+
 	input.format.xmms = fmt;
 	input.frequency = rate;
 	input.channels = nch;