]> git.sesse.net Git - vlc/blobdiff - modules/audio_filter/converter/float.c
Replaced AOUT_FMT_*_NE/IE by by VLC_CODEC equivalents.
[vlc] / modules / audio_filter / converter / float.c
index 83239bf2d71a7c4d757dcf7c6e27156f000244cd..b92717511dd5d2f77c858ba7f42a7bc412f88364 100644 (file)
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
+#include <vlc_common.h>
+#include <vlc_plugin.h>
 
 #ifdef HAVE_UNISTD_H
 #   include <unistd.h>
 #endif
 
-#ifdef HAVE_ALLOCA_H
-#   include <alloca.h>
-#endif
-
 #include <vlc_aout.h>
 
 /*****************************************************************************
@@ -73,13 +70,17 @@ static void Do_FL32ToU8( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
 static int  Create_S16ToFL32( vlc_object_t * );
 static void Do_S16ToFL32( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
                            aout_buffer_t * );
-static void Do_S16ToFL24( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
+static void Do_S24ToFL32( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
+                           aout_buffer_t * );
+static void Do_S32ToFL32( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
                            aout_buffer_t * );
 
 static int  Create_S16ToFL32_SW( vlc_object_t * );
 static void Do_S16ToFL32_SW( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
                            aout_buffer_t * );
-static void Do_S16ToFL24_SW( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
+static void Do_S24ToFL32_SW( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
+                           aout_buffer_t * );
+static void Do_S32ToFL32_SW( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
                            aout_buffer_t * );
 
 static int  Create_S8ToFL32( vlc_object_t * );
@@ -93,36 +94,36 @@ static void Do_U8ToFL32( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
 /*****************************************************************************
  * Module descriptor
  *****************************************************************************/
-vlc_module_begin();
-    set_description( _("Floating-point audio format conversions") );
-    add_submodule();
-        set_capability( "audio filter", 10 );
-        set_callbacks( Create_F32ToFL32, NULL );
-    add_submodule();
-        set_capability( "audio filter", 1 );
-        set_callbacks( Create_FL32ToS16, NULL );
-    add_submodule();
-        set_capability( "audio filter", 1 );
-        set_callbacks( Create_FL32ToS8, NULL );
-    add_submodule();
-        set_capability( "audio filter", 1 );
-        set_callbacks( Create_FL32ToU16, NULL );
-    add_submodule();
-        set_capability( "audio filter", 1 );
-        set_callbacks( Create_FL32ToU8, NULL );
-    add_submodule();
-        set_capability( "audio filter", 1 );
-        set_callbacks( Create_S16ToFL32, NULL );
-    add_submodule();
-        set_capability( "audio filter", 1 );
-        set_callbacks( Create_S16ToFL32_SW, NULL ); /* Endianness conversion*/
-    add_submodule();
-        set_capability( "audio filter", 1 );
-        set_callbacks( Create_S8ToFL32, NULL );
-    add_submodule();
-        set_capability( "audio filter", 1 );
-        set_callbacks( Create_U8ToFL32, NULL );
-vlc_module_end();
+vlc_module_begin ()
+    set_description( N_("Floating-point audio format conversions") )
+    add_submodule ()
+        set_capability( "audio filter", 10 )
+        set_callbacks( Create_F32ToFL32, NULL )
+    add_submodule ()
+        set_capability( "audio filter", 1 )
+        set_callbacks( Create_FL32ToS16, NULL )
+    add_submodule ()
+        set_capability( "audio filter", 1 )
+        set_callbacks( Create_FL32ToS8, NULL )
+    add_submodule ()
+        set_capability( "audio filter", 1 )
+        set_callbacks( Create_FL32ToU16, NULL )
+    add_submodule ()
+        set_capability( "audio filter", 1 )
+        set_callbacks( Create_FL32ToU8, NULL )
+    add_submodule ()
+        set_capability( "audio filter", 1 )
+        set_callbacks( Create_S16ToFL32, NULL )
+    add_submodule ()
+        set_capability( "audio filter", 1 )
+        set_callbacks( Create_S16ToFL32_SW, NULL ) /* Endianness conversion*/
+    add_submodule ()
+        set_capability( "audio filter", 1 )
+        set_callbacks( Create_S8ToFL32, NULL )
+    add_submodule ()
+        set_capability( "audio filter", 1 )
+        set_callbacks( Create_U8ToFL32, NULL )
+vlc_module_end ()
 
 /*****************************************************************************
  * Fixed 32 to Float 32 and backwards
@@ -131,10 +132,10 @@ static int Create_F32ToFL32( vlc_object_t *p_this )
 {
     aout_filter_t * p_filter = (aout_filter_t *)p_this;
 
-    if( ( p_filter->input.i_format != VLC_FOURCC('f','i','3','2')
-           || p_filter->output.i_format != VLC_FOURCC('f','l','3','2') )
-      && ( p_filter->input.i_format != VLC_FOURCC('f','l','3','2')
-            || p_filter->output.i_format != VLC_FOURCC('f','i','3','2') ) )
+    if( ( p_filter->input.i_format != VLC_CODEC_FI32
+           || p_filter->output.i_format != VLC_CODEC_FL32 )
+      && ( p_filter->input.i_format != VLC_CODEC_FL32
+            || p_filter->output.i_format != VLC_CODEC_FI32 ) )
     {
         return -1;
     }
@@ -144,7 +145,7 @@ static int Create_F32ToFL32( vlc_object_t *p_this )
         return -1;
     }
 
-    if( p_filter->input.i_format == VLC_FOURCC('f','i','3','2') )
+    if( p_filter->input.i_format == VLC_CODEC_FI32 )
     {
         p_filter->pf_do_work = Do_F32ToFL32;
     }
@@ -161,6 +162,7 @@ static int Create_F32ToFL32( vlc_object_t *p_this )
 static void Do_F32ToFL32( aout_instance_t * p_aout, aout_filter_t * p_filter,
                           aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i;
     vlc_fixed_t * p_in = (vlc_fixed_t *)p_in_buf->p_buffer;
     float * p_out = (float *)p_out_buf->p_buffer;
@@ -178,6 +180,7 @@ static void Do_F32ToFL32( aout_instance_t * p_aout, aout_filter_t * p_filter,
 static void Do_FL32ToF32( aout_instance_t * p_aout, aout_filter_t * p_filter,
                           aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i;
     float * p_in = (float *)p_in_buf->p_buffer;
     vlc_fixed_t * p_out = (vlc_fixed_t *)p_out_buf->p_buffer;
@@ -199,8 +202,8 @@ static int Create_FL32ToS16( vlc_object_t *p_this )
 {
     aout_filter_t * p_filter = (aout_filter_t *)p_this;
 
-    if ( p_filter->input.i_format != VLC_FOURCC('f','l','3','2')
-          || p_filter->output.i_format != AOUT_FMT_S16_NE )
+    if ( p_filter->input.i_format != VLC_CODEC_FL32
+          || p_filter->output.i_format != VLC_CODEC_S16N )
     {
         return -1;
     }
@@ -219,6 +222,7 @@ static int Create_FL32ToS16( vlc_object_t *p_this )
 static void Do_FL32ToS16( aout_instance_t * p_aout, aout_filter_t * p_filter,
                           aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i;
     float * p_in = (float *)p_in_buf->p_buffer;
     int16_t * p_out = (int16_t *)p_out_buf->p_buffer;
@@ -253,8 +257,8 @@ static int Create_FL32ToS8( vlc_object_t *p_this )
 {
     aout_filter_t * p_filter = (aout_filter_t *)p_this;
 
-    if ( p_filter->input.i_format != VLC_FOURCC('f','l','3','2')
-          || p_filter->output.i_format != VLC_FOURCC('s','8',' ',' ') )
+    if ( p_filter->input.i_format != VLC_CODEC_FL32
+          || p_filter->output.i_format != VLC_CODEC_S8 )
     {
         return -1;
     }
@@ -273,6 +277,7 @@ static int Create_FL32ToS8( vlc_object_t *p_this )
 static void Do_FL32ToS8( aout_instance_t * p_aout, aout_filter_t * p_filter,
                          aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i;
     float * p_in = (float *)p_in_buf->p_buffer;
     int8_t * p_out = (int8_t *)p_out_buf->p_buffer;
@@ -297,8 +302,8 @@ static int Create_FL32ToU16( vlc_object_t *p_this )
 {
     aout_filter_t * p_filter = (aout_filter_t *)p_this;
 
-    if ( p_filter->input.i_format != VLC_FOURCC('f','l','3','2')
-          || p_filter->output.i_format != AOUT_FMT_U16_NE )
+    if ( p_filter->input.i_format != VLC_CODEC_FL32
+          || p_filter->output.i_format != VLC_CODEC_U16N )
     {
         return -1;
     }
@@ -317,6 +322,7 @@ static int Create_FL32ToU16( vlc_object_t *p_this )
 static void Do_FL32ToU16( aout_instance_t * p_aout, aout_filter_t * p_filter,
                           aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i;
     float * p_in = (float *)p_in_buf->p_buffer;
     uint16_t * p_out = (uint16_t *)p_out_buf->p_buffer;
@@ -341,8 +347,8 @@ static int Create_FL32ToU8( vlc_object_t *p_this )
 {
     aout_filter_t * p_filter = (aout_filter_t *)p_this;
 
-    if ( p_filter->input.i_format != VLC_FOURCC('f','l','3','2')
-          || p_filter->output.i_format != VLC_FOURCC('u','8',' ',' ') )
+    if ( p_filter->input.i_format != VLC_CODEC_FL32
+          || p_filter->output.i_format != VLC_CODEC_U8 )
     {
         return -1;
     }
@@ -361,6 +367,7 @@ static int Create_FL32ToU8( vlc_object_t *p_this )
 static void Do_FL32ToU8( aout_instance_t * p_aout, aout_filter_t * p_filter,
                          aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i;
     float * p_in = (float *)p_in_buf->p_buffer;
     uint8_t * p_out = (uint8_t *)p_out_buf->p_buffer;
@@ -385,9 +392,10 @@ static int Create_S16ToFL32( vlc_object_t *p_this )
 {
     aout_filter_t * p_filter = (aout_filter_t *)p_this;
 
-    if ( ( p_filter->input.i_format != AOUT_FMT_S16_NE &&
-           p_filter->input.i_format != AOUT_FMT_S24_NE )
-          || p_filter->output.i_format != VLC_FOURCC('f','l','3','2') )
+    if ( ( p_filter->input.i_format != VLC_CODEC_S16N &&
+           p_filter->input.i_format != VLC_CODEC_S24N &&
+           p_filter->input.i_format != VLC_CODEC_S32N )
+          || p_filter->output.i_format != VLC_CODEC_FL32 )
     {
         return -1;
     }
@@ -397,12 +405,14 @@ static int Create_S16ToFL32( vlc_object_t *p_this )
         return -1;
     }
 
-    if( p_filter->input.i_format == AOUT_FMT_S24_NE )
-        p_filter->pf_do_work = Do_S16ToFL24;
+    if( p_filter->input.i_format == VLC_CODEC_S32N )
+        p_filter->pf_do_work = Do_S32ToFL32;
+    else if( p_filter->input.i_format == VLC_CODEC_S24N )
+        p_filter->pf_do_work = Do_S24ToFL32;
     else
         p_filter->pf_do_work = Do_S16ToFL32;
 
-    p_filter->b_in_place = VLC_TRUE;
+    p_filter->b_in_place = true;
 
     return 0;
 }
@@ -410,6 +420,7 @@ static int Create_S16ToFL32( vlc_object_t *p_this )
 static void Do_S16ToFL32( aout_instance_t * p_aout, aout_filter_t * p_filter,
                           aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i = p_in_buf->i_nb_samples * aout_FormatNbChannels( &p_filter->input );
 
     /* We start from the end because b_in_place is true */
@@ -434,12 +445,13 @@ static void Do_S16ToFL32( aout_instance_t * p_aout, aout_filter_t * p_filter,
     }
 
     p_out_buf->i_nb_samples = p_in_buf->i_nb_samples;
-    p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 2;
+    p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 4 / 2;
 }
 
-static void Do_S16ToFL24( aout_instance_t * p_aout, aout_filter_t * p_filter,
+static void Do_S24ToFL32( aout_instance_t * p_aout, aout_filter_t * p_filter,
                           aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i = p_in_buf->i_nb_samples * aout_FormatNbChannels( &p_filter->input );
 
     /* We start from the end because b_in_place is true */
@@ -462,6 +474,25 @@ static void Do_S16ToFL24( aout_instance_t * p_aout, aout_filter_t * p_filter,
     p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 4 / 3;
 }
 
+static void Do_S32ToFL32( aout_instance_t * p_aout, aout_filter_t * p_filter,
+                          aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
+{
+    VLC_UNUSED(p_aout);
+    int i = p_in_buf->i_nb_samples * aout_FormatNbChannels( &p_filter->input );
+
+    /* We start from the end because b_in_place is true */
+    int32_t * p_in = (int32_t *)p_in_buf->p_buffer + i - 1;
+    float * p_out = (float *)p_out_buf->p_buffer + i - 1;
+
+    while( i-- )
+    {
+        *p_out-- = (float)*p_in-- / 2147483648.0;
+    }
+
+    p_out_buf->i_nb_samples = p_in_buf->i_nb_samples;
+    p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 4 / 4;
+}
+
 /*****************************************************************************
  * S16 To Float32 with endianness conversion
  *****************************************************************************/
@@ -474,86 +505,76 @@ static int Create_S16ToFL32_SW( vlc_object_t *p_this )
         return -1;
     }
 
-    if ( (p_filter->input.i_format == VLC_FOURCC('s','1','6','l') ||
-         p_filter->input.i_format == VLC_FOURCC('s','1','6','b'))
-         && p_filter->output.i_format == VLC_FOURCC('f','l','3','2')
-         && p_filter->input.i_format != AOUT_FMT_S16_NE )
+    if ( (p_filter->input.i_format == VLC_CODEC_S16L ||
+         p_filter->input.i_format == VLC_CODEC_S16B)
+         && p_filter->output.i_format == VLC_CODEC_FL32
+         && p_filter->input.i_format != VLC_CODEC_S16N )
     {
         p_filter->pf_do_work = Do_S16ToFL32_SW;
-        p_filter->b_in_place = VLC_TRUE;
+        p_filter->b_in_place = true;
+
+        return 0;
+    }
+
+    if ( (p_filter->input.i_format == VLC_CODEC_S24L ||
+         p_filter->input.i_format == VLC_CODEC_S24B)
+         && p_filter->output.i_format == VLC_CODEC_FL32
+         && p_filter->input.i_format != VLC_CODEC_S24N )
+    {
+        p_filter->pf_do_work = Do_S24ToFL32_SW;
+        p_filter->b_in_place = true;
 
         return 0;
     }
 
-    if ( (p_filter->input.i_format == VLC_FOURCC('s','2','4','l') ||
-         p_filter->input.i_format == VLC_FOURCC('s','2','4','b'))
-         && p_filter->output.i_format == VLC_FOURCC('f','l','3','2')
-         && p_filter->input.i_format != AOUT_FMT_S24_NE )
+    if ( (p_filter->input.i_format == VLC_CODEC_S32L ||
+         p_filter->input.i_format == VLC_CODEC_S32B)
+         && p_filter->output.i_format == VLC_CODEC_FL32
+         && p_filter->input.i_format != VLC_CODEC_S32N )
     {
-        p_filter->pf_do_work = Do_S16ToFL24_SW;
-        p_filter->b_in_place = VLC_TRUE;
+        p_filter->pf_do_work = Do_S32ToFL32_SW;
+        p_filter->b_in_place = true;
 
         return 0;
     }
+
     return -1;
 }
 
 static void Do_S16ToFL32_SW( aout_instance_t * p_aout, aout_filter_t * p_filter,
-                          aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
+                             aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i = p_in_buf->i_nb_samples * aout_FormatNbChannels( &p_filter->input );
 
     /* We start from the end because b_in_place is true */
     int16_t * p_in;
     float * p_out = (float *)p_out_buf->p_buffer + i - 1;
 
-#ifdef HAVE_SWAB
-#   ifdef HAVE_ALLOCA
-    int16_t * p_swabbed = alloca( i * sizeof(int16_t) );
-#   else
-    int16_t * p_swabbed = malloc( i * sizeof(int16_t) );
-#   endif
+    int16_t p_swabbed[i];
 
-    swab( p_in_buf->p_buffer, (void *)p_swabbed, i * sizeof(int16_t) );
+    swab( p_in_buf->p_buffer, p_swabbed, i * sizeof(int16_t) );
     p_in = p_swabbed + i - 1;
 
-#else
-    byte_t p_tmp[2];
-    p_in = (int16_t *)p_in_buf->p_buffer + i - 1;
-#endif
 
     while( i-- )
-    {
-#ifndef HAVE_SWAB
-        p_tmp[0] = ((byte_t *)p_in)[1];
-        p_tmp[1] = ((byte_t *)p_in)[0];
-        *p_out = (float)( *(int16_t *)p_tmp ) / 32768.0;
-#else
-        *p_out = (float)*p_in / 32768.0;
-#endif
-        p_in--; p_out--;
-    }
-
-#ifdef HAVE_SWAB
-#   ifndef HAVE_ALLOCA
-    free( p_swabbed );
-#   endif
-#endif
+        *p_out-- = (float)*p_in-- / 32768.0;
 
     p_out_buf->i_nb_samples = p_in_buf->i_nb_samples;
-    p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 2;
+    p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 4 / 2;
 }
 
-static void Do_S16ToFL24_SW( aout_instance_t * p_aout, aout_filter_t * p_filter,
-                           aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
+static void Do_S24ToFL32_SW( aout_instance_t * p_aout, aout_filter_t * p_filter,
+                             aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i = p_in_buf->i_nb_samples * aout_FormatNbChannels( &p_filter->input );
 
     /* We start from the end because b_in_place is true */
     uint8_t * p_in = (uint8_t *)p_in_buf->p_buffer + (i - 1) * 3;
     float * p_out = (float *)p_out_buf->p_buffer + i - 1;
 
-    byte_t p_tmp[3];
+    uint8_t p_tmp[3];
 
     while( i-- )
     {
@@ -575,6 +596,26 @@ static void Do_S16ToFL24_SW( aout_instance_t * p_aout, aout_filter_t * p_filter,
     p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 4 / 3;
 }
 
+static void Do_S32ToFL32_SW( aout_instance_t * p_aout, aout_filter_t * p_filter,
+                             aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
+{
+    VLC_UNUSED(p_aout);
+    int i = p_in_buf->i_nb_samples * aout_FormatNbChannels( &p_filter->input );
+
+    /* We start from the end because b_in_place is true */
+    int32_t * p_in = (int32_t *)p_in_buf->p_buffer + i - 1;
+    float * p_out = (float *)p_out_buf->p_buffer + i - 1;
+
+    while( i-- )
+    {
+        *p_out-- = (float)*p_in-- / 2147483648.0;
+    }
+
+    p_out_buf->i_nb_samples = p_in_buf->i_nb_samples;
+    p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 4 / 4;
+}
+
+
 /*****************************************************************************
  * S8 To FL32
  *****************************************************************************/
@@ -582,8 +623,8 @@ static int Create_S8ToFL32( vlc_object_t *p_this )
 {
     aout_filter_t * p_filter = (aout_filter_t *)p_this;
 
-    if ( p_filter->input.i_format != VLC_FOURCC('s','8',' ',' ')
-          || p_filter->output.i_format != VLC_FOURCC('f','l','3','2') )
+    if ( p_filter->input.i_format != VLC_CODEC_S8
+          || p_filter->output.i_format != VLC_CODEC_FL32 )
     {
         return -1;
     }
@@ -594,7 +635,7 @@ static int Create_S8ToFL32( vlc_object_t *p_this )
     }
 
     p_filter->pf_do_work = Do_S8ToFL32;
-    p_filter->b_in_place = VLC_TRUE;
+    p_filter->b_in_place = true;
 
     return 0;
 }
@@ -602,6 +643,7 @@ static int Create_S8ToFL32( vlc_object_t *p_this )
 static void Do_S8ToFL32( aout_instance_t * p_aout, aout_filter_t * p_filter,
                          aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i = p_in_buf->i_nb_samples * aout_FormatNbChannels( &p_filter->input );
 
     /* We start from the end because b_in_place is true */
@@ -625,8 +667,8 @@ static int Create_U8ToFL32( vlc_object_t *p_this )
 {
     aout_filter_t * p_filter = (aout_filter_t *)p_this;
 
-    if ( p_filter->input.i_format != VLC_FOURCC('u','8',' ',' ')
-          || p_filter->output.i_format != VLC_FOURCC('f','l','3','2') )
+    if ( p_filter->input.i_format != VLC_CODEC_U8
+          || p_filter->output.i_format != VLC_CODEC_FL32 )
     {
         return -1;
     }
@@ -637,7 +679,7 @@ static int Create_U8ToFL32( vlc_object_t *p_this )
     }
 
     p_filter->pf_do_work = Do_U8ToFL32;
-    p_filter->b_in_place = VLC_TRUE;
+    p_filter->b_in_place = true;
 
     return 0;
 }
@@ -645,6 +687,7 @@ static int Create_U8ToFL32( vlc_object_t *p_this )
 static void Do_U8ToFL32( aout_instance_t * p_aout, aout_filter_t * p_filter,
                          aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
 {
+    VLC_UNUSED(p_aout);
     int i = p_in_buf->i_nb_samples * aout_FormatNbChannels( &p_filter->input );
 
     /* We start from the end because b_in_place is true */