Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/alexmarsev/libbs2b.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorboris_mikhaylov <boris_mikhaylov@bc0edfbe-c936-4687-b64d-f70bc3985e72>2009-03-17 14:04:34 +0300
committerboris_mikhaylov <boris_mikhaylov@bc0edfbe-c936-4687-b64d-f70bc3985e72>2009-03-17 14:04:34 +0300
commit7e28d02927b894639a0cbc2d287e7cf0c6d638ef (patch)
treeba29762b717d6fdf79e8efdead8b880fecb557c0
parentc3d1b0723b99a3f3039f15a6b27266aee2a23ec0 (diff)
Added handling of big/little endian buffers.
git-svn-id: svn://svn.code.sf.net/p/bs2b/code/trunk/libbs2b@65 bc0edfbe-c936-4687-b64d-f70bc3985e72
-rw-r--r--ChangeLog3
-rw-r--r--src/bs2b.c389
-rw-r--r--src/bs2b.h52
-rw-r--r--src/bs2bclass.cpp60
-rw-r--r--src/bs2bclass.h16
-rw-r--r--src/bs2bstream.c14
6 files changed, 486 insertions, 48 deletions
diff --git a/ChangeLog b/ChangeLog
index 28968d1..94dc473 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+2009-03-17 Boris Mikhaylov <http://www.tmn.ru/~bor>
+ * Added handling of big/little endian buffers.
+
2009-03-11 Boris Mikhaylov <http://www.tmn.ru/~bor>
* Changed processing from one stereo sample to more.
diff --git a/src/bs2b.c b/src/bs2b.c
index febf475..66eafe3 100644
--- a/src/bs2b.c
+++ b/src/bs2b.c
@@ -30,13 +30,52 @@
#define M_PI 3.14159265358979323846
#endif
+static void int16swap( uint16_t *x )
+{
+ *x = ( *x >> 8 ) | ( *x << 8 );
+}
+
+static void int24swap( uint24_t *x )
+{
+ uint8_t x1;
+
+ x1 = x->octet0;
+ x->octet0 = x->octet2;
+ x->octet2 = x1;
+}
+
+static void int32swap( uint32_t *x )
+{
+ *x = ( *x >> 24 ) | ( ( *x >> 8 ) & 0xff00 ) |
+ ( ( *x << 8 ) & ( ( uint32_t )0xff << 16 ) ) | ( *x << 24 );
+}
+
+static void int64swap( uint32_t *x )
+{
+ uint32_t x1;
+
+ x1 = *x;
+ *x = x[ 1 ];
+ x[ 1 ] = x1;
+
+ int32swap( x );
+ int32swap( x + 1 );
+}
+
static double int242double( int24_t *in )
{
int32_t out =
+ #ifdef WORDS_BIGENDIAN
+ ( ( uint32_t )in->octet2 ) |
+ ( ( uint32_t )in->octet1 << 8 ) |
+ ( ( uint32_t )in->octet0 << 16 ) |
+ ( ( in->octet0 < 0 ? ( uint32_t )-1 : 0 ) << 24 );
+ #else
( ( uint32_t )in->octet0 ) |
( ( uint32_t )in->octet1 << 8 ) |
( ( uint32_t )in->octet2 << 16 ) |
( ( in->octet2 < 0 ? ( uint32_t )-1 : 0 ) << 24 );
+ #endif /* WORDS_BIGENDIAN */
return ( double )out;
} /* int242double() */
@@ -44,9 +83,15 @@ static double int242double( int24_t *in )
static double uint242double( uint24_t *in )
{
uint32_t out =
+ #ifdef WORDS_BIGENDIAN
+ ( ( uint32_t )in->octet2 ) |
+ ( ( uint32_t )in->octet1 << 8 ) |
+ ( ( uint32_t )in->octet0 << 16 );
+ #else
( ( uint32_t )in->octet0 ) |
( ( uint32_t )in->octet1 << 8 ) |
( ( uint32_t )in->octet2 << 16 );
+ #endif /* WORDS_BIGENDIAN */
return ( double )out;
} /* uint242double() */
@@ -55,18 +100,30 @@ static void double2int24( double in, int24_t *out )
{
uint32_t i = ( uint32_t )in;
+ #ifdef WORDS_BIGENDIAN
+ out->octet2 = i & 0xff;
+ out->octet1 = ( i >> 8 ) & 0xff;
+ out->octet0 = ( i >> 16 ) & 0xff;
+ #else
out->octet0 = i & 0xff;
out->octet1 = ( i >> 8 ) & 0xff;
out->octet2 = ( i >> 16 ) & 0xff;
+ #endif /* WORDS_BIGENDIAN */
} /* double2int24() */
static void double2uint24( double in, uint24_t *out )
{
uint32_t i = ( uint32_t )in;
+ #ifdef WORDS_BIGENDIAN
+ out->octet2 = i & 0xff;
+ out->octet1 = ( i >> 8 ) & 0xff;
+ out->octet0 = ( i >> 16 ) & 0xff;
+ #else
out->octet0 = i & 0xff;
out->octet1 = ( i >> 8 ) & 0xff;
out->octet2 = ( i >> 16 ) & 0xff;
+ #endif /* WORDS_BIGENDIAN */
} /* double2uint24() */
/* Set up bs2b data. */
@@ -155,7 +212,7 @@ static void init( t_bs2bdp bs2bdp )
#define hi_filter( in, in_1, out_1 ) \
( bs2bdp->a0_hi * in + bs2bdp->a1_hi * in_1 + bs2bdp->b1_hi * out_1 )
-static void cross_feed_dne( t_bs2bdp bs2bdp, double *sample )
+static void cross_feed_d( t_bs2bdp bs2bdp, double *sample )
{
/* Lowpass filter */
bs2bdp->lfs.lo[ 0 ] = lo_filter( sample[ 0 ], bs2bdp->lfs.lo[ 0 ] );
@@ -182,7 +239,7 @@ static void cross_feed_dne( t_bs2bdp bs2bdp, double *sample )
if( sample[ 0 ] < -1.0 ) sample[ 0 ] = -1.0;
if( sample[ 1 ] > 1.0 ) sample[ 1 ] = 1.0;
if( sample[ 1 ] < -1.0 ) sample[ 1 ] = -1.0;
-} /* cross_feed_dne() */
+} /* cross_feed_d() */
/* Exported functions.
* See descriptions in "bs2b.h"
@@ -268,19 +325,117 @@ char const *bs2b_runtime_version( void )
return BS2B_VERSION_STR;
} /* bs2b_runtime_version() */
-void bs2b_cross_feed_dne( t_bs2bdp bs2bdp, double *sample, int n )
+void bs2b_cross_feed_d( t_bs2bdp bs2bdp, double *sample, int n )
+{
+ if( n > 0 )
+ {
+ while( n-- )
+ {
+ cross_feed_d( bs2bdp, sample );
+ sample += 2;
+ } /* while */
+ } /* if */
+} /* bs2b_cross_feed_d() */
+
+void bs2b_cross_feed_dbe( t_bs2bdp bs2bdp, double *sample, int n )
+{
+ if( n > 0 )
+ {
+ while( n-- )
+ {
+ #ifndef WORDS_BIGENDIAN
+ int64swap( ( uint32_t * )sample );
+ int64swap( ( uint32_t * )( sample + 1 ) );
+ #endif
+
+ cross_feed_d( bs2bdp, sample );
+
+ #ifndef WORDS_BIGENDIAN
+ int64swap( ( uint32_t * )sample );
+ int64swap( ( uint32_t * )( sample + 1 ) );
+ #endif
+
+ sample += 2;
+ } /* while */
+ } /* if */
+} /* bs2b_cross_feed_dbe() */
+
+void bs2b_cross_feed_dle( t_bs2bdp bs2bdp, double *sample, int n )
+{
+ if( n > 0 )
+ {
+ while( n-- )
+ {
+ #ifdef WORDS_BIGENDIAN
+ int64swap( ( uint32_t * )sample );
+ int64swap( ( uint32_t * )( sample + 1 ) );
+ #endif
+
+ cross_feed_d( bs2bdp, sample );
+
+ #ifdef WORDS_BIGENDIAN
+ int64swap( ( uint32_t * )sample );
+ int64swap( ( uint32_t * )( sample + 1 ) );
+ #endif
+
+ sample += 2;
+ } /* while */
+ } /* if */
+} /* bs2b_cross_feed_dle() */
+
+void bs2b_cross_feed_f( t_bs2bdp bs2bdp, float *sample, int n )
+{
+ double sample_d[ 2 ];
+
+ if( n > 0 )
+ {
+ while( n-- )
+ {
+ sample_d[ 0 ] = ( double )sample[ 0 ];
+ sample_d[ 1 ] = ( double )sample[ 1 ];
+
+ cross_feed_d( bs2bdp, sample_d );
+
+ sample[ 0 ] = ( float )sample_d[ 0 ];
+ sample[ 1 ] = ( float )sample_d[ 1 ];
+
+ sample += 2;
+ } /* while */
+ } /* if */
+} /* bs2b_cross_feed_f() */
+
+void bs2b_cross_feed_fbe( t_bs2bdp bs2bdp, float *sample, int n )
{
+ double sample_d[ 2 ];
+
if( n > 0 )
{
while( n-- )
{
- cross_feed_dne( bs2bdp, sample );
+ #ifndef WORDS_BIGENDIAN
+ int32swap( ( uint32_t * )sample );
+ int32swap( ( uint32_t * )( sample + 1 ) );
+ #endif
+
+ sample_d[ 0 ] = ( double )sample[ 0 ];
+ sample_d[ 1 ] = ( double )sample[ 1 ];
+
+ cross_feed_d( bs2bdp, sample_d );
+
+ sample[ 0 ] = ( float )sample_d[ 0 ];
+ sample[ 1 ] = ( float )sample_d[ 1 ];
+
+ #ifndef WORDS_BIGENDIAN
+ int32swap( ( uint32_t * )sample );
+ int32swap( ( uint32_t * )( sample + 1 ) );
+ #endif
+
sample += 2;
} /* while */
} /* if */
-} /* bs2b_cross_feed_dne() */
+} /* bs2b_cross_feed_fbe() */
-void bs2b_cross_feed_fne( t_bs2bdp bs2bdp, float *sample, int n )
+void bs2b_cross_feed_fle( t_bs2bdp bs2bdp, float *sample, int n )
{
double sample_d[ 2 ];
@@ -288,25 +443,35 @@ void bs2b_cross_feed_fne( t_bs2bdp bs2bdp, float *sample, int n )
{
while( n-- )
{
+ #ifdef WORDS_BIGENDIAN
+ int32swap( ( uint32_t * )sample );
+ int32swap( ( uint32_t * )( sample + 1 ) );
+ #endif
+
sample_d[ 0 ] = ( double )sample[ 0 ];
sample_d[ 1 ] = ( double )sample[ 1 ];
- cross_feed_dne( bs2bdp, sample_d );
+ cross_feed_d( bs2bdp, sample_d );
sample[ 0 ] = ( float )sample_d[ 0 ];
sample[ 1 ] = ( float )sample_d[ 1 ];
+ #ifdef WORDS_BIGENDIAN
+ int32swap( ( uint32_t * )sample );
+ int32swap( ( uint32_t * )( sample + 1 ) );
+ #endif
+
sample += 2;
} /* while */
} /* if */
-} /* bs2b_cross_feed_fne() */
+} /* bs2b_cross_feed_fle() */
#define MAX_INT32_VALUE 2147483647.0
#define MAX_INT16_VALUE 32767.0
#define MAX_INT8_VALUE 127.0
#define MAX_INT24_VALUE 8388607.0
-void bs2b_cross_feed_s32ne( t_bs2bdp bs2bdp, int32_t *sample, int n )
+void bs2b_cross_feed_s32( t_bs2bdp bs2bdp, int32_t *sample, int n )
{
double sample_d[ 2 ];
@@ -317,7 +482,7 @@ void bs2b_cross_feed_s32ne( t_bs2bdp bs2bdp, int32_t *sample, int n )
sample_d[ 0 ] = ( double )sample[ 0 ] / MAX_INT32_VALUE;
sample_d[ 1 ] = ( double )sample[ 1 ] / MAX_INT32_VALUE;
- cross_feed_dne( bs2bdp, sample_d );
+ cross_feed_d( bs2bdp, sample_d );
sample[ 0 ] = ( int32_t )( sample_d[ 0 ] * MAX_INT32_VALUE );
sample[ 1 ] = ( int32_t )( sample_d[ 1 ] * MAX_INT32_VALUE );
@@ -325,9 +490,9 @@ void bs2b_cross_feed_s32ne( t_bs2bdp bs2bdp, int32_t *sample, int n )
sample += 2;
} /* while */
} /* if */
-} /* bs2b_cross_feed_s32ne() */
+} /* bs2b_cross_feed_s32() */
-void bs2b_cross_feed_s16ne( t_bs2bdp bs2bdp, int16_t *sample, int n )
+void bs2b_cross_feed_s32be( t_bs2bdp bs2bdp, int32_t *sample, int n )
{
double sample_d[ 2 ];
@@ -335,18 +500,142 @@ void bs2b_cross_feed_s16ne( t_bs2bdp bs2bdp, int16_t *sample, int n )
{
while( n-- )
{
+ #ifndef WORDS_BIGENDIAN
+ int32swap( sample );
+ int32swap( sample + 1 );
+ #endif
+
+ sample_d[ 0 ] = ( double )sample[ 0 ] / MAX_INT32_VALUE;
+ sample_d[ 1 ] = ( double )sample[ 1 ] / MAX_INT32_VALUE;
+
+ cross_feed_d( bs2bdp, sample_d );
+
+ sample[ 0 ] = ( int32_t )( sample_d[ 0 ] * MAX_INT32_VALUE );
+ sample[ 1 ] = ( int32_t )( sample_d[ 1 ] * MAX_INT32_VALUE );
+
+ #ifndef WORDS_BIGENDIAN
+ int32swap( sample );
+ int32swap( sample + 1 );
+ #endif
+
+ sample += 2;
+ } /* while */
+ } /* if */
+} /* bs2b_cross_feed_s32be() */
+
+void bs2b_cross_feed_s32le( t_bs2bdp bs2bdp, int32_t *sample, int n )
+{
+ double sample_d[ 2 ];
+
+ if( n > 0 )
+ {
+ while( n-- )
+ {
+ #ifdef WORDS_BIGENDIAN
+ int32swap( sample );
+ int32swap( sample + 1 );
+ #endif
+
+ sample_d[ 0 ] = ( double )sample[ 0 ] / MAX_INT32_VALUE;
+ sample_d[ 1 ] = ( double )sample[ 1 ] / MAX_INT32_VALUE;
+
+ cross_feed_d( bs2bdp, sample_d );
+
+ sample[ 0 ] = ( int32_t )( sample_d[ 0 ] * MAX_INT32_VALUE );
+ sample[ 1 ] = ( int32_t )( sample_d[ 1 ] * MAX_INT32_VALUE );
+
+ #ifdef WORDS_BIGENDIAN
+ int32swap( sample );
+ int32swap( sample + 1 );
+ #endif
+
+ sample += 2;
+ } /* while */
+ } /* if */
+} /* bs2b_cross_feed_s32le() */
+
+void bs2b_cross_feed_s16( t_bs2bdp bs2bdp, int16_t *sample, int n )
+{
+ double sample_d[ 2 ];
+
+ if( n > 0 )
+ {
+ while( n-- )
+ {
+ sample_d[ 0 ] = ( double )sample[ 0 ] / MAX_INT16_VALUE;
+ sample_d[ 1 ] = ( double )sample[ 1 ] / MAX_INT16_VALUE;
+
+ cross_feed_d( bs2bdp, sample_d );
+
+ sample[ 0 ] = ( int16_t )( sample_d[ 0 ] * MAX_INT16_VALUE );
+ sample[ 1 ] = ( int16_t )( sample_d[ 1 ] * MAX_INT16_VALUE );
+
+ sample += 2;
+ } /* while */
+ } /* if */
+} /* bs2b_cross_feed_s16() */
+
+void bs2b_cross_feed_s16be( t_bs2bdp bs2bdp, int16_t *sample, int n )
+{
+ double sample_d[ 2 ];
+
+ if( n > 0 )
+ {
+ while( n-- )
+ {
+ #ifndef WORDS_BIGENDIAN
+ int16swap( sample );
+ int16swap( sample + 1 );
+ #endif
+
sample_d[ 0 ] = ( double )sample[ 0 ] / MAX_INT16_VALUE;
sample_d[ 1 ] = ( double )sample[ 1 ] / MAX_INT16_VALUE;
- cross_feed_dne( bs2bdp, sample_d );
+ cross_feed_d( bs2bdp, sample_d );
sample[ 0 ] = ( int16_t )( sample_d[ 0 ] * MAX_INT16_VALUE );
sample[ 1 ] = ( int16_t )( sample_d[ 1 ] * MAX_INT16_VALUE );
+ #ifndef WORDS_BIGENDIAN
+ int16swap( sample );
+ int16swap( sample + 1 );
+ #endif
+
sample += 2;
} /* while */
} /* if */
-} /* bs2b_cross_feed_s16ne() */
+} /* bs2b_cross_feed_s16be() */
+
+void bs2b_cross_feed_s16le( t_bs2bdp bs2bdp, int16_t *sample, int n )
+{
+ double sample_d[ 2 ];
+
+ if( n > 0 )
+ {
+ while( n-- )
+ {
+ #ifdef WORDS_BIGENDIAN
+ int16swap( sample );
+ int16swap( sample + 1 );
+ #endif
+
+ sample_d[ 0 ] = ( double )sample[ 0 ] / MAX_INT16_VALUE;
+ sample_d[ 1 ] = ( double )sample[ 1 ] / MAX_INT16_VALUE;
+
+ cross_feed_d( bs2bdp, sample_d );
+
+ sample[ 0 ] = ( int16_t )( sample_d[ 0 ] * MAX_INT16_VALUE );
+ sample[ 1 ] = ( int16_t )( sample_d[ 1 ] * MAX_INT16_VALUE );
+
+ #ifdef WORDS_BIGENDIAN
+ int16swap( sample );
+ int16swap( sample + 1 );
+ #endif
+
+ sample += 2;
+ } /* while */
+ } /* if */
+} /* bs2b_cross_feed_s16le() */
void bs2b_cross_feed_s8( t_bs2bdp bs2bdp, int8_t *sample, int n )
{
@@ -359,7 +648,7 @@ void bs2b_cross_feed_s8( t_bs2bdp bs2bdp, int8_t *sample, int n )
sample_d[ 0 ] = ( double )sample[ 0 ] / MAX_INT8_VALUE;
sample_d[ 1 ] = ( double )sample[ 1 ] / MAX_INT8_VALUE;
- cross_feed_dne( bs2bdp, sample_d );
+ cross_feed_d( bs2bdp, sample_d );
sample[ 0 ] = ( int8_t )( sample_d[ 0 ] * MAX_INT8_VALUE );
sample[ 1 ] = ( int8_t )( sample_d[ 1 ] * MAX_INT8_VALUE );
@@ -380,7 +669,7 @@ void bs2b_cross_feed_u8( t_bs2bdp bs2bdp, uint8_t *sample, int n )
sample_d[ 0 ] = ( ( double )( ( int8_t )( sample[ 0 ] ^ 0x80 ) ) ) / MAX_INT8_VALUE;
sample_d[ 1 ] = ( ( double )( ( int8_t )( sample[ 1 ] ^ 0x80 ) ) ) / MAX_INT8_VALUE;
- cross_feed_dne( bs2bdp, sample_d );
+ cross_feed_d( bs2bdp, sample_d );
sample[ 0 ] = ( ( uint8_t )( sample_d[ 0 ] * MAX_INT8_VALUE ) ) ^ 0x80;
sample[ 1 ] = ( ( uint8_t )( sample_d[ 1 ] * MAX_INT8_VALUE ) ) ^ 0x80;
@@ -390,7 +679,7 @@ void bs2b_cross_feed_u8( t_bs2bdp bs2bdp, uint8_t *sample, int n )
} /* if */
} /* bs2b_cross_feed_u8() */
-void bs2b_cross_feed_s24ne( t_bs2bdp bs2bdp, int24_t *sample, int n )
+void bs2b_cross_feed_s24( t_bs2bdp bs2bdp, int24_t *sample, int n )
{
double sample_d[ 2 ];
@@ -401,7 +690,7 @@ void bs2b_cross_feed_s24ne( t_bs2bdp bs2bdp, int24_t *sample, int n )
sample_d[ 0 ] = int242double( sample ) / MAX_INT24_VALUE;
sample_d[ 1 ] = int242double( sample + 1 ) / MAX_INT24_VALUE;
- cross_feed_dne( bs2bdp, sample_d );
+ cross_feed_d( bs2bdp, sample_d );
double2int24( sample_d[ 0 ] * MAX_INT24_VALUE, sample );
double2int24( sample_d[ 1 ] * MAX_INT24_VALUE, sample + 1 );
@@ -409,4 +698,66 @@ void bs2b_cross_feed_s24ne( t_bs2bdp bs2bdp, int24_t *sample, int n )
sample += 2;
} /* while */
} /* if */
-} /* bs2b_cross_feed_s24ne() */
+} /* bs2b_cross_feed_s24() */
+
+void bs2b_cross_feed_s24be( t_bs2bdp bs2bdp, int24_t *sample, int n )
+{
+ double sample_d[ 2 ];
+
+ if( n > 0 )
+ {
+ while( n-- )
+ {
+ #ifndef WORDS_BIGENDIAN
+ int24swap( ( uint24_t * )sample );
+ int24swap( ( uint24_t * )( sample + 1 ) );
+ #endif
+
+ sample_d[ 0 ] = int242double( sample ) / MAX_INT24_VALUE;
+ sample_d[ 1 ] = int242double( sample + 1 ) / MAX_INT24_VALUE;
+
+ cross_feed_d( bs2bdp, sample_d );
+
+ double2int24( sample_d[ 0 ] * MAX_INT24_VALUE, sample );
+ double2int24( sample_d[ 1 ] * MAX_INT24_VALUE, sample + 1 );
+
+ #ifndef WORDS_BIGENDIAN
+ int24swap( ( uint24_t * )sample );
+ int24swap( ( uint24_t * )( sample + 1 ) );
+ #endif
+
+ sample += 2;
+ } /* while */
+ } /* if */
+} /* bs2b_cross_feed_s24be() */
+
+void bs2b_cross_feed_s24le( t_bs2bdp bs2bdp, int24_t *sample, int n )
+{
+ double sample_d[ 2 ];
+
+ if( n > 0 )
+ {
+ while( n-- )
+ {
+ #ifdef WORDS_BIGENDIAN
+ int24swap( ( uint24_t * )sample );
+ int24swap( ( uint24_t * )( sample + 1 ) );
+ #endif
+
+ sample_d[ 0 ] = int242double( sample ) / MAX_INT24_VALUE;
+ sample_d[ 1 ] = int242double( sample + 1 ) / MAX_INT24_VALUE;
+
+ cross_feed_d( bs2bdp, sample_d );
+
+ double2int24( sample_d[ 0 ] * MAX_INT24_VALUE, sample );
+ double2int24( sample_d[ 1 ] * MAX_INT24_VALUE, sample + 1 );
+
+ #ifdef WORDS_BIGENDIAN
+ int24swap( ( uint24_t * )sample );
+ int24swap( ( uint24_t * )( sample + 1 ) );
+ #endif
+
+ sample += 2;
+ } /* while */
+ } /* if */
+} /* bs2b_cross_feed_s24le() */
diff --git a/src/bs2b.h b/src/bs2b.h
index 4daaafd..f4fb83e 100644
--- a/src/bs2b.h
+++ b/src/bs2b.h
@@ -46,28 +46,16 @@ typedef unsigned int uint32_t;
typedef struct
{
-#ifdef WORDS_BIGENDIAN
- int8_t octet2;
- uint8_t octet1;
- uint8_t octet0;
-#else
uint8_t octet0;
uint8_t octet1;
int8_t octet2;
-#endif /* WORDS_BIGENDIAN */
} int24_t;
typedef struct
{
-#ifdef WORDS_BIGENDIAN
- uint8_t octet2;
- uint8_t octet1;
- uint8_t octet0;
-#else
uint8_t octet0;
uint8_t octet1;
uint8_t octet2;
-#endif /* WORDS_BIGENDIAN */
} uint24_t;
/* Number of crossfeed levels */
@@ -147,16 +135,40 @@ char const *bs2b_runtime_version( void );
*/
/* sample poits to double floats native endians */
-void bs2b_cross_feed_dne( t_bs2bdp bs2bdp, double *sample, int n );
+void bs2b_cross_feed_d( t_bs2bdp bs2bdp, double *sample, int n );
+
+/* sample poits to double floats big endians */
+void bs2b_cross_feed_dbe( t_bs2bdp bs2bdp, double *sample, int n );
+
+/* sample poits to double floats little endians */
+void bs2b_cross_feed_dle( t_bs2bdp bs2bdp, double *sample, int n );
/* sample poits to floats native endians */
-void bs2b_cross_feed_fne( t_bs2bdp bs2bdp, float *sample, int n );
+void bs2b_cross_feed_f( t_bs2bdp bs2bdp, float *sample, int n );
+
+/* sample poits to floats big endians */
+void bs2b_cross_feed_fbe( t_bs2bdp bs2bdp, float *sample, int n );
+
+/* sample poits to floats little endians */
+void bs2b_cross_feed_fle( t_bs2bdp bs2bdp, float *sample, int n );
/* sample poits to 32bit signed integers native endians */
-void bs2b_cross_feed_s32ne( t_bs2bdp bs2bdp, int32_t *sample, int n );
+void bs2b_cross_feed_s32( t_bs2bdp bs2bdp, int32_t *sample, int n );
+
+/* sample poits to 32bit signed integers big endians */
+void bs2b_cross_feed_s32be( t_bs2bdp bs2bdp, int32_t *sample, int n );
+
+/* sample poits to 32bit signed integers little endians */
+void bs2b_cross_feed_s32le( t_bs2bdp bs2bdp, int32_t *sample, int n );
/* sample poits to 16bit signed integers native endians */
-void bs2b_cross_feed_s16ne( t_bs2bdp bs2bdp, int16_t *sample, int n );
+void bs2b_cross_feed_s16( t_bs2bdp bs2bdp, int16_t *sample, int n );
+
+/* sample poits to 16bit signed integers big endians */
+void bs2b_cross_feed_s16be( t_bs2bdp bs2bdp, int16_t *sample, int n );
+
+/* sample poits to 16bit signed integers little endians */
+void bs2b_cross_feed_s16le( t_bs2bdp bs2bdp, int16_t *sample, int n );
/* sample poits to 8bit signed integers */
void bs2b_cross_feed_s8( t_bs2bdp bs2bdp, int8_t *sample, int n );
@@ -165,7 +177,13 @@ void bs2b_cross_feed_s8( t_bs2bdp bs2bdp, int8_t *sample, int n );
void bs2b_cross_feed_u8( t_bs2bdp bs2bdp, uint8_t *sample, int n );
/* sample poits to 24bit signed integers native endians */
-void bs2b_cross_feed_s24ne( t_bs2bdp bs2bdp, int24_t *sample, int n );
+void bs2b_cross_feed_s24( t_bs2bdp bs2bdp, int24_t *sample, int n );
+
+/* sample poits to 24bit signed integers be endians */
+void bs2b_cross_feed_s24be( t_bs2bdp bs2bdp, int24_t *sample, int n );
+
+/* sample poits to 24bit signed integers little endians */
+void bs2b_cross_feed_s24le( t_bs2bdp bs2bdp, int24_t *sample, int n );
#ifdef __cplusplus
} /* extern "C" */
diff --git a/src/bs2bclass.cpp b/src/bs2bclass.cpp
index aa63b4a..672d049 100644
--- a/src/bs2bclass.cpp
+++ b/src/bs2bclass.cpp
@@ -70,22 +70,62 @@ char const *bs2b_base::runtime_version( void )
void bs2b_base::cross_feed( double *sample, int n )
{
- bs2b_cross_feed_dne( bs2bdp, sample, n );
+ bs2b_cross_feed_d( bs2bdp, sample, n );
+}
+
+void bs2b_base::cross_feed_be( double *sample, int n )
+{
+ bs2b_cross_feed_dbe( bs2bdp, sample, n );
+}
+
+void bs2b_base::cross_feed_le( double *sample, int n )
+{
+ bs2b_cross_feed_dle( bs2bdp, sample, n );
}
void bs2b_base::cross_feed( float *sample, int n )
{
- bs2b_cross_feed_fne( bs2bdp, sample, n );
+ bs2b_cross_feed_f( bs2bdp, sample, n );
+}
+
+void bs2b_base::cross_feed_be( float *sample, int n )
+{
+ bs2b_cross_feed_fbe( bs2bdp, sample, n );
+}
+
+void bs2b_base::cross_feed_le( float *sample, int n )
+{
+ bs2b_cross_feed_fle( bs2bdp, sample, n );
}
void bs2b_base::cross_feed( int32_t *sample, int n )
{
- bs2b_cross_feed_s32ne( bs2bdp, sample, n );
+ bs2b_cross_feed_s32( bs2bdp, sample, n );
+}
+
+void bs2b_base::cross_feed_be( int32_t *sample, int n )
+{
+ bs2b_cross_feed_s32be( bs2bdp, sample, n );
+}
+
+void bs2b_base::cross_feed_le( int32_t *sample, int n )
+{
+ bs2b_cross_feed_s32le( bs2bdp, sample, n );
}
void bs2b_base::cross_feed( int16_t *sample, int n )
{
- bs2b_cross_feed_s16ne( bs2bdp, sample, n );
+ bs2b_cross_feed_s16( bs2bdp, sample, n );
+}
+
+void bs2b_base::cross_feed_be( int16_t *sample, int n )
+{
+ bs2b_cross_feed_s16be( bs2bdp, sample, n );
+}
+
+void bs2b_base::cross_feed_le( int16_t *sample, int n )
+{
+ bs2b_cross_feed_s16le( bs2bdp, sample, n );
}
void bs2b_base::cross_feed( int8_t *sample, int n )
@@ -100,5 +140,15 @@ void bs2b_base::cross_feed( uint8_t *sample, int n )
void bs2b_base::cross_feed( int24_t *sample, int n )
{
- bs2b_cross_feed_s24ne( bs2bdp, sample, n );
+ bs2b_cross_feed_s24( bs2bdp, sample, n );
+}
+
+void bs2b_base::cross_feed_be( int24_t *sample, int n )
+{
+ bs2b_cross_feed_s24be( bs2bdp, sample, n );
+}
+
+void bs2b_base::cross_feed_le( int24_t *sample, int n )
+{
+ bs2b_cross_feed_s24le( bs2bdp, sample, n );
}
diff --git a/src/bs2bclass.h b/src/bs2bclass.h
index d2e5071..8beab2a 100644
--- a/src/bs2bclass.h
+++ b/src/bs2bclass.h
@@ -50,6 +50,22 @@ public:
void cross_feed( int8_t *sample, int n = 1 );
void cross_feed( uint8_t *sample, int n = 1 );
void cross_feed( int24_t *sample, int n = 1 );
+
+ void cross_feed_be( double *sample, int n = 1 );
+ void cross_feed_be( float *sample, int n = 1 );
+ void cross_feed_be( int32_t *sample, int n = 1 );
+ void cross_feed_be( int16_t *sample, int n = 1 );
+ void cross_feed_be( int8_t *sample, int n = 1 );
+ void cross_feed_be( uint8_t *sample, int n = 1 );
+ void cross_feed_be( int24_t *sample, int n = 1 );
+
+ void cross_feed_le( double *sample, int n = 1 );
+ void cross_feed_le( float *sample, int n = 1 );
+ void cross_feed_le( int32_t *sample, int n = 1 );
+ void cross_feed_le( int16_t *sample, int n = 1 );
+ void cross_feed_le( int8_t *sample, int n = 1 );
+ void cross_feed_le( uint8_t *sample, int n = 1 );
+ void cross_feed_le( int24_t *sample, int n = 1 );
}; // class bs2b_base
#endif // BS2BCLASS_H
diff --git a/src/bs2bstream.c b/src/bs2bstream.c
index 1a57983..f5ecd3e 100644
--- a/src/bs2bstream.c
+++ b/src/bs2bstream.c
@@ -52,7 +52,7 @@ int main( int argc, char *argv[] )
char *progname, *tmpstr;
uint32_t srate;
uint32_t level;
- short sample[ 2 ];
+ int16_t sample[ 2 ];
tmpstr = strrchr( argv[0], '/' );
tmpstr = tmpstr ? tmpstr + 1 : argv[ 0 ];
@@ -106,18 +106,18 @@ int main( int argc, char *argv[] )
bs2b_set_srate( bs2bdp, srate );
bs2b_set_level( bs2bdp, level );
-#if defined( _O_BINARY )
+ #if defined( _O_BINARY )
_setmode( _fileno( stdin ), _O_BINARY );
_setmode( _fileno( stdout ), _O_BINARY );
-#elif defined( _O_RAW )
+ #elif defined( _O_RAW )
_setmode( _fileno( stdin ), _O_RAW );
_setmode( _fileno( stdout ), _O_RAW );
-#endif
+ #endif
- while( 2 == fread( sample, sizeof( short ), 2, stdin ) )
+ while( 2 == fread( sample, sizeof( int16_t ), 2, stdin ) )
{
- bs2b_cross_feed_s16ne( bs2bdp, sample, 1 );
- fwrite( sample, sizeof( short ), 2, stdout );
+ bs2b_cross_feed_s16( bs2bdp, sample, 1 );
+ fwrite( sample, sizeof( int16_t ), 2, stdout );
}
bs2b_close( bs2bdp );