# 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>
/*****************************************************************************
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 * );
/*****************************************************************************
* 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
{
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;
}
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;
}
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;
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;
{
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;
}
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;
{
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;
}
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;
{
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;
}
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;
{
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;
}
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;
{
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;
}
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;
}
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 */
}
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 */
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
*****************************************************************************/
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-- )
{
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
*****************************************************************************/
{
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;
}
}
p_filter->pf_do_work = Do_S8ToFL32;
- p_filter->b_in_place = VLC_TRUE;
+ p_filter->b_in_place = true;
return 0;
}
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 */
{
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;
}
}
p_filter->pf_do_work = Do_U8ToFL32;
- p_filter->b_in_place = VLC_TRUE;
+ p_filter->b_in_place = true;
return 0;
}
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 */