]> git.sesse.net Git - vlc/blobdiff - modules/audio_filter/format.c
use the sync_instance library for tests too
[vlc] / modules / audio_filter / format.c
index 6238656da0351af3520c925270307290087ba7a5..7358338ebe4f141af18699e92fcaf8ef402f52d0 100644 (file)
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
-#include <stdlib.h>                                      /* malloc(), free() */
-#include <string.h>
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
 
 #include <vlc/vlc.h>
 #include <vlc_aout.h>
@@ -160,7 +162,7 @@ static struct
     { VLC_FOURCC('s','8',' ',' '), AOUT_FMT_U16_NE,             S8toU16 },
     { VLC_FOURCC('s','8',' ',' '), AOUT_FMT_U16_IE,             S8toU16Invert },
     { VLC_FOURCC('s','8',' ',' '), VLC_FOURCC('u','8',' ',' '), S8toU8 },
-    
     /* From u8 */
     { VLC_FOURCC('u','8',' ',' '), VLC_FOURCC('f','l','3','2'), U8toFloat32 },
     { VLC_FOURCC('u','8',' ',' '), AOUT_FMT_S16_NE,             U8toS16 },
@@ -240,23 +242,24 @@ static int Open( vlc_object_t *p_this )
  *****************************************************************************/
 static block_t *Float32toS24( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     float *p_in = (float *)p_block->p_buffer;
     uint8_t *p_out = (uint8_t *)p_in;
     int32_t out;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 4; i--; )
     {
         if ( *p_in >= 1.0 ) out = 8388607;
         else if ( *p_in < -1.0 ) out = -8388608;
         else out = *p_in * 8388608.0;
 
 #ifdef WORDS_BIGENDIAN
-       *((int16_t *)p_out) = out >> 8;
-       p_out[2] = out & 0xFF;
+    *((int16_t *)p_out) = out >> 8;
+    p_out[2] = out & 0xFF;
 #else
-       *((int16_t *)(p_out+1)) = out >> 8;
-       p_out[0] = out & 0xFF;
+    *((int16_t *)(p_out+1)) = out >> 8;
+    p_out[0] = out & 0xFF;
 #endif
 
         p_in++; p_out += 3;
@@ -268,11 +271,12 @@ static block_t *Float32toS24( filter_t *p_filter, block_t *p_block )
 
 static block_t *Float32toS16( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     float *p_in = (float *)p_block->p_buffer;
     int16_t *p_out = (int16_t *)p_in;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 4; i--; )
     {
 #if 0
         /* Slow version. */
@@ -296,11 +300,12 @@ static block_t *Float32toS16( filter_t *p_filter, block_t *p_block )
 
 static block_t *Float32toU16( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     float *p_in = (float *)p_block->p_buffer;
     uint16_t *p_out = (uint16_t *)p_in;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 4; i--; )
     {
         if ( *p_in >= 1.0 ) *p_out = 65535;
         else if ( *p_in < -1.0 ) *p_out = 0;
@@ -320,7 +325,7 @@ static block_t *S24toFloat32( filter_t *p_filter, block_t *p_block )
     int i;
 
     p_block_out =
-        p_filter->pf_audio_buffer_new( p_filter, p_block->i_buffer*4/3 );
+        p_filter->pf_audio_buffer_new( p_filter, p_block->i_buffer * 4 / 3 );
     if( !p_block_out )
     {
         msg_Warn( p_filter, "can't get output buffer" );
@@ -330,8 +335,9 @@ static block_t *S24toFloat32( filter_t *p_filter, block_t *p_block )
     p_in = p_block->p_buffer;
     p_out = (float *)p_block_out->p_buffer;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 3; i--; )
     {
+        /* FIXME: unaligned reads */
 #ifdef WORDS_BIGENDIAN
         *p_out = ((float)( (((int32_t)*(int16_t *)(p_in)) << 8) + p_in[2]))
 #else
@@ -354,11 +360,12 @@ static block_t *S24toFloat32( filter_t *p_filter, block_t *p_block )
 
 static block_t *S24toS16( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     uint8_t *p_in = (uint8_t *)p_block->p_buffer;
     uint8_t *p_out = (uint8_t *)p_in;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 3; i--; )
     {
 #ifdef WORDS_BIGENDIAN
         *p_out++ = *p_in++;
@@ -393,7 +400,7 @@ static block_t *S16toFloat32( filter_t *p_filter, block_t *p_block )
     p_in = (int16_t *)p_block->p_buffer;
     p_out = (float *)p_block_out->p_buffer;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 2; i--; )
     {
 #if 0
         /* Slow version */
@@ -423,7 +430,7 @@ static block_t *S16toFloat32( filter_t *p_filter, block_t *p_block )
 static block_t *U16toFloat32( filter_t *p_filter, block_t *p_block )
 {
     block_t *p_block_out;
-    int16_t *p_in;
+    uint16_t *p_in;
     float *p_out;
     int i;
 
@@ -435,10 +442,10 @@ static block_t *U16toFloat32( filter_t *p_filter, block_t *p_block )
         return NULL;
     }
 
-    p_in = (int16_t *)p_block->p_buffer;
+    p_in = (uint16_t *)p_block->p_buffer;
     p_out = (float *)p_block_out->p_buffer;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 2; i--; )
     {
         *p_out++ = (float)(*p_in++ - 32768) / 32768.0;
     }
@@ -470,7 +477,7 @@ static block_t *S16toS24( filter_t *p_filter, block_t *p_block )
     p_in = (uint8_t *)p_block->p_buffer;
     p_out = (uint8_t *)p_block_out->p_buffer;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 2; i--; )
     {
 #ifdef WORDS_BIGENDIAN
         *p_out++ = *p_in++;
@@ -495,11 +502,12 @@ static block_t *S16toS24( filter_t *p_filter, block_t *p_block )
 
 static block_t *S16toS8( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     int16_t *p_in = (int16_t *)p_block->p_buffer;
     int8_t *p_out = (int8_t *)p_in;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 2; i--; )
         *p_out++ = (*p_in++) >> 8;
 
     p_block->i_buffer /= 2;
@@ -507,11 +515,12 @@ static block_t *S16toS8( filter_t *p_filter, block_t *p_block )
 }
 static block_t *S16toU8( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     int16_t *p_in = (int16_t *)p_block->p_buffer;
     uint8_t *p_out = (uint8_t *)p_in;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 2; i--; )
         *p_out++ = ((*p_in++) + 32768) >> 8;
 
     p_block->i_buffer /= 2;
@@ -519,11 +528,12 @@ static block_t *S16toU8( filter_t *p_filter, block_t *p_block )
 }
 static block_t *S16toU16( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     int16_t *p_in = (int16_t *)p_block->p_buffer;
     uint16_t *p_out = (uint16_t *)p_in;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 2; i--; )
         *p_out++ = (*p_in++) + 32768;
 
     return p_block;
@@ -531,11 +541,12 @@ static block_t *S16toU16( filter_t *p_filter, block_t *p_block )
 
 static block_t *U16toS8( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     uint16_t *p_in = (uint16_t *)p_block->p_buffer;
     int8_t *p_out = (int8_t *)p_in;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 2; i--; )
         *p_out++ = ((int)(*p_in++) - 32768) >> 8;
 
     p_block->i_buffer /= 2;
@@ -543,11 +554,12 @@ static block_t *U16toS8( filter_t *p_filter, block_t *p_block )
 }
 static block_t *U16toU8( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     uint16_t *p_in = (uint16_t *)p_block->p_buffer;
     uint8_t *p_out = (uint8_t *)p_in;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 2; i--; )
         *p_out++ = (*p_in++) >> 8;
 
     p_block->i_buffer /= 2;
@@ -555,11 +567,12 @@ static block_t *U16toU8( filter_t *p_filter, block_t *p_block )
 }
 static block_t *U16toS16( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
-    int16_t *p_in = (int16_t *)p_block->p_buffer;
-    uint16_t *p_out = (uint16_t *)p_in;
+    uint16_t *p_in = (uint16_t *)p_block->p_buffer;
+    int16_t *p_out = (int16_t *)p_in;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer / 2; i--; )
         *p_out++ = (int)(*p_in++) - 32768;
 
     return p_block;
@@ -567,22 +580,24 @@ static block_t *U16toS16( filter_t *p_filter, block_t *p_block )
 
 static block_t *S8toU8( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     int8_t *p_in = (int8_t *)p_block->p_buffer;
     uint8_t *p_out = (uint8_t *)p_in;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer; i--; )
         *p_out++ = ((*p_in++) + 128);
 
     return p_block;
 }
 static block_t *U8toS8( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     uint8_t *p_in = (uint8_t *)p_block->p_buffer;
     int8_t *p_out = (int8_t *)p_in;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer; i--; )
         *p_out++ = ((*p_in++) - 128);
 
     return p_block;
@@ -607,7 +622,7 @@ static block_t *S8toU16( filter_t *p_filter, block_t *p_block )
     p_in = (int8_t *)p_block->p_buffer;
     p_out = (uint16_t *)p_block_out->p_buffer;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer; i--; )
         *p_out++ = ((*p_in++) + 128) << 8;
 
     p_block_out->i_samples = p_block->i_samples;
@@ -638,7 +653,7 @@ static block_t *U8toS16( filter_t *p_filter, block_t *p_block )
     p_in = (uint8_t *)p_block->p_buffer;
     p_out = (int16_t *)p_block_out->p_buffer;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer; i--; )
         *p_out++ = ((*p_in++) - 128) << 8;
 
     p_block_out->i_samples = p_block->i_samples;
@@ -670,7 +685,7 @@ static block_t *S8toS16( filter_t *p_filter, block_t *p_block )
     p_in = (int8_t *)p_block->p_buffer;
     p_out = (int16_t *)p_block_out->p_buffer;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer; i--; )
         *p_out++ = (*p_in++) << 8;
 
     p_block_out->i_samples = p_block->i_samples;
@@ -701,7 +716,7 @@ static block_t *U8toU16( filter_t *p_filter, block_t *p_block )
     p_in = (uint8_t *)p_block->p_buffer;
     p_out = (uint16_t *)p_block_out->p_buffer;
 
-    for( i = p_block->i_buffer*8/p_filter->fmt_in.audio.i_bitspersample; i--; )
+    for( i = p_block->i_buffer; i--; )
         *p_out++ = (*p_in++) << 8;
 
     p_block_out->i_samples = p_block->i_samples;
@@ -719,6 +734,7 @@ static block_t *U8toU16( filter_t *p_filter, block_t *p_block )
  *****************************************************************************/
 static block_t *Swap16( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     uint8_t *p_in = (uint8_t *)p_block->p_buffer;
     uint8_t tmp;
@@ -736,6 +752,7 @@ static block_t *Swap16( filter_t *p_filter, block_t *p_block )
 
 static block_t *Swap24( filter_t *p_filter, block_t *p_block )
 {
+    VLC_UNUSED(p_filter);
     int i;
     uint8_t *p_in = (uint8_t *)p_block->p_buffer;
     uint8_t tmp;