From e567bb25ae2453f17cd5f80d7021005344607d80 Mon Sep 17 00:00:00 2001 From: jkeil Date: Sat, 12 Oct 2002 20:02:01 +0000 Subject: [PATCH] Fix for audio filters on big endian cpus. It's working now on Solaris SPARC & x86 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@7720 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libaf/af_format.c | 16 ++++++++++++---- libaf/af_resample.c | 4 ++-- libao2/afmt.h | 11 +++++++++++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/libaf/af_format.c b/libaf/af_format.c index d12829cacc..c6047b25ab 100644 --- a/libaf/af_format.c +++ b/libaf/af_format.c @@ -28,6 +28,12 @@ #define LE (1<<2) // Little Endian #define END_MASK (1<<2) +#if WORDS_BIGENDIAN // native endian of cpu +#define NE BE +#else +#define NE LE +#endif + // Signed #define US (0<<3) // Un Signed #define SI (1<<3) // SIgned @@ -128,8 +134,8 @@ static af_data_t* play(struct af_instance_s* af, af_data_t* data) la = l->audio; - // Change to little endian - if((cf&END_MASK)!=LE){ + // Change to cpu native endian + if((cf&END_MASK)!=NE){ switch(cf&NBITS_MASK){ case(B16):{ register uint16_t s; @@ -150,6 +156,7 @@ static af_data_t* play(struct af_instance_s* af, af_data_t* data) break; } } + // Change signed/unsigned if((cf&SIGN_MASK) != (lf&SIGN_MASK)){ switch((cf&NBITS_MASK)){ @@ -234,8 +241,9 @@ static af_data_t* play(struct af_instance_s* af, af_data_t* data) break; } } - // Switch to the correct endainess (again the problem with sun?) - if((lf&END_MASK)!=LE){ + + // Switch from cpu native endian to the correct endianess + if((lf&END_MASK)!=NE){ switch(lf&NBITS_MASK){ case(B16):{ register uint16_t s; diff --git a/libaf/af_resample.c b/libaf/af_resample.c index 3d706dce83..acd350afa3 100644 --- a/libaf/af_resample.c +++ b/libaf/af_resample.c @@ -212,11 +212,11 @@ static int control(struct af_instance_s* af, int cmd, void* arg) // Set parameters af->data->nch = n->nch; - af->data->format = AFMT_S16_LE; + af->data->format = AFMT_S16_NE; af->data->bps = 2; if(af->data->format != n->format || af->data->bps != n->bps) rv = AF_FALSE; - n->format = AFMT_S16_LE; + n->format = AFMT_S16_NE; n->bps = 2; // Calculate up and down sampling factors diff --git a/libao2/afmt.h b/libao2/afmt.h index 1772606554..ed2d01027f 100644 --- a/libao2/afmt.h +++ b/libao2/afmt.h @@ -36,3 +36,14 @@ # define AFMT_S32_BE 0x00002000 #endif + +/* native endian formats */ +#ifndef AFMT_S16_NE +# if WORDS_BIGENDIAN +# define AFMT_S16_NE AFMT_S16_BE +# define AFMT_S32_NE AFMT_S32_BE +# else +# define AFMT_S16_NE AFMT_S16_LE +# define AFMT_S32_NE AFMT_S32_LE +# endif +#endif