mirror of https://code.videolan.org/videolan/vlc
* Trivial resampler plug-in (resampling still non-functional)
* Begun writing some hooks for forthcoming S/PDIF support * ./modules/access/vcd/cdrom.c: compile fix for Darwin
This commit is contained in:
parent
7ba73a88cb
commit
9000920a11
|
@ -445,6 +445,7 @@ PLUGINS="${PLUGINS} codec/mpeg_video/idct/idct codec/mpeg_video/idct/idctclassic
|
||||||
#PLUGINS="${PLUGINS} codec/a52old/imdct/imdct codec/a52old/downmix/downmix codec/mpeg_audio/mpeg_audio codec/a52old/a52old codec/lpcm/lpcm codec/spdif/spdif"
|
#PLUGINS="${PLUGINS} codec/a52old/imdct/imdct codec/a52old/downmix/downmix codec/mpeg_audio/mpeg_audio codec/a52old/a52old codec/lpcm/lpcm codec/spdif/spdif"
|
||||||
PLUGINS="${PLUGINS} video_filter/deinterlace/deinterlace video_filter/invert video_filter/wall video_filter/transform video_filter/distort video_filter/clone video_filter/crop"
|
PLUGINS="${PLUGINS} video_filter/deinterlace/deinterlace video_filter/invert video_filter/wall video_filter/transform video_filter/distort video_filter/clone video_filter/crop"
|
||||||
PLUGINS="${PLUGINS} audio_filter/converter/float32tos16"
|
PLUGINS="${PLUGINS} audio_filter/converter/float32tos16"
|
||||||
|
PLUGINS="${PLUGINS} audio_filter/resampler/trivial"
|
||||||
PLUGINS="${PLUGINS} audio_mixer/trivial"
|
PLUGINS="${PLUGINS} audio_mixer/trivial"
|
||||||
PLUGINS="${PLUGINS} audio_output/file"
|
PLUGINS="${PLUGINS} audio_output/file"
|
||||||
#PLUGINS="${PLUGINS} visualization/scope/scope"
|
#PLUGINS="${PLUGINS} visualization/scope/scope"
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* audio_output.h : audio output interface
|
* audio_output.h : audio output interface
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 2002 VideoLAN
|
* Copyright (C) 2002 VideoLAN
|
||||||
* $Id: audio_output.h,v 1.53 2002/08/08 00:35:10 sam Exp $
|
* $Id: audio_output.h,v 1.54 2002/08/09 23:46:53 massiot Exp $
|
||||||
*
|
*
|
||||||
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
||||||
*
|
*
|
||||||
|
@ -42,9 +42,11 @@ struct audio_sample_format_t
|
||||||
#define AOUT_FMT_S8 0x00000040
|
#define AOUT_FMT_S8 0x00000040
|
||||||
#define AOUT_FMT_U16_LE 0x00000080 /* Little endian U16 */
|
#define AOUT_FMT_U16_LE 0x00000080 /* Little endian U16 */
|
||||||
#define AOUT_FMT_U16_BE 0x00000100 /* Big endian U16 */
|
#define AOUT_FMT_U16_BE 0x00000100 /* Big endian U16 */
|
||||||
#define AOUT_FMT_A52 0x00000400 /* ATSC A/52 (for SP/DIF) */
|
#define AOUT_FMT_SPDIF 0x00000400 /* S/PDIF hardware support */
|
||||||
#define AOUT_FMT_FLOAT32 0x00000800
|
#define AOUT_FMT_FLOAT32 0x00010000
|
||||||
#define AOUT_FMT_FIXED32 0x00001000
|
#define AOUT_FMT_FIXED32 0x00020000
|
||||||
|
#define AOUT_FMT_A52 0x00100000
|
||||||
|
#define AOUT_FMT_DTS 0x00200000
|
||||||
|
|
||||||
#define AOUT_FMTS_IDENTICAL( p_first, p_second ) ( \
|
#define AOUT_FMTS_IDENTICAL( p_first, p_second ) ( \
|
||||||
(p_first->i_format == p_second->i_format) \
|
(p_first->i_format == p_second->i_format) \
|
||||||
|
@ -60,6 +62,11 @@ struct audio_sample_format_t
|
||||||
# define AOUT_FMT_U16_NE AOUT_FMT_U16_LE
|
# define AOUT_FMT_U16_NE AOUT_FMT_U16_LE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define AOUT_FMT_IS_SPDIF( p_format ) \
|
||||||
|
( (p_format->i_format == AOUT_FMT_SPDIF) \
|
||||||
|
|| (p_format->i_format == AOUT_FMT_A52) \
|
||||||
|
|| (p_format->i_format == AOUT_FMT_DTS) )
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* aout_buffer_t : audio output buffer
|
* aout_buffer_t : audio output buffer
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
@ -74,6 +81,8 @@ struct aout_buffer_t
|
||||||
struct aout_buffer_t * p_next;
|
struct aout_buffer_t * p_next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define AOUT_SPDIF_FRAME 1536
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Prototypes
|
* Prototypes
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
@ -84,7 +93,9 @@ VLC_EXPORT( void, aout_DeleteInstance, ( aout_instance_t * ) );
|
||||||
VLC_EXPORT( aout_buffer_t *, aout_BufferNew, ( aout_instance_t *, aout_input_t *, size_t ) );
|
VLC_EXPORT( aout_buffer_t *, aout_BufferNew, ( aout_instance_t *, aout_input_t *, size_t ) );
|
||||||
VLC_EXPORT( void, aout_BufferDelete, ( aout_instance_t *, aout_input_t *, aout_buffer_t * ) );
|
VLC_EXPORT( void, aout_BufferDelete, ( aout_instance_t *, aout_input_t *, aout_buffer_t * ) );
|
||||||
VLC_EXPORT( void, aout_BufferPlay, ( aout_instance_t *, aout_input_t *, aout_buffer_t * ) );
|
VLC_EXPORT( void, aout_BufferPlay, ( aout_instance_t *, aout_input_t *, aout_buffer_t * ) );
|
||||||
VLC_EXPORT( int, aout_FormatToBytes, ( audio_sample_format_t * p_format ) );
|
VLC_EXPORT( int, aout_FormatTo, ( audio_sample_format_t * p_format, int ) );
|
||||||
|
#define aout_FormatToByterate(a,b) aout_FormatTo(a,b)
|
||||||
|
#define aout_FormatToSize(a,b) aout_FormatTo(a,b)
|
||||||
|
|
||||||
/* From input.c : */
|
/* From input.c : */
|
||||||
#define aout_InputNew(a,b,c) __aout_InputNew(VLC_OBJECT(a),b,c)
|
#define aout_InputNew(a,b,c) __aout_InputNew(VLC_OBJECT(a),b,c)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* include/defs.h.in. Generated automatically from configure.in by autoheader 2.13. */
|
/* include/defs.h.in. Generated automatically from configure.in by autoheader. */
|
||||||
|
|
||||||
/* Define if using alloca.c. */
|
/* Define if using alloca.c. */
|
||||||
#undef C_ALLOCA
|
#undef C_ALLOCA
|
||||||
|
|
|
@ -36,7 +36,7 @@ struct module_symbols_t
|
||||||
int (* __vlc_thread_create_inner) ( vlc_object_t *, char *, int, char *, void * ( * ) ( void * ), vlc_bool_t ) ;
|
int (* __vlc_thread_create_inner) ( vlc_object_t *, char *, int, char *, void * ( * ) ( void * ), vlc_bool_t ) ;
|
||||||
int (* __vlc_threads_end_inner) ( vlc_object_t * ) ;
|
int (* __vlc_threads_end_inner) ( vlc_object_t * ) ;
|
||||||
int (* __vlc_threads_init_inner) ( vlc_object_t * ) ;
|
int (* __vlc_threads_init_inner) ( vlc_object_t * ) ;
|
||||||
int (* aout_FormatToBytes_inner) ( audio_sample_format_t * p_format ) ;
|
int (* aout_FormatTo_inner) ( audio_sample_format_t * p_format, int ) ;
|
||||||
int (* input_AccessInit_inner) ( input_thread_t * ) ;
|
int (* input_AccessInit_inner) ( input_thread_t * ) ;
|
||||||
int (* input_AddInfo_inner) ( input_info_category_t *, char *, char *, ... ) ;
|
int (* input_AddInfo_inner) ( input_info_category_t *, char *, char *, ... ) ;
|
||||||
int (* input_ChangeArea_inner) ( input_thread_t *, input_area_t * ) ;
|
int (* input_ChangeArea_inner) ( input_thread_t *, input_area_t * ) ;
|
||||||
|
@ -205,7 +205,7 @@ struct module_symbols_t
|
||||||
# define aout_BufferNew p_symbols->aout_BufferNew_inner
|
# define aout_BufferNew p_symbols->aout_BufferNew_inner
|
||||||
# define aout_BufferPlay p_symbols->aout_BufferPlay_inner
|
# define aout_BufferPlay p_symbols->aout_BufferPlay_inner
|
||||||
# define aout_DeleteInstance p_symbols->aout_DeleteInstance_inner
|
# define aout_DeleteInstance p_symbols->aout_DeleteInstance_inner
|
||||||
# define aout_FormatToBytes p_symbols->aout_FormatToBytes_inner
|
# define aout_FormatTo p_symbols->aout_FormatTo_inner
|
||||||
# define aout_InputDelete p_symbols->aout_InputDelete_inner
|
# define aout_InputDelete p_symbols->aout_InputDelete_inner
|
||||||
# define aout_OutputNextBuffer p_symbols->aout_OutputNextBuffer_inner
|
# define aout_OutputNextBuffer p_symbols->aout_OutputNextBuffer_inner
|
||||||
# define config_Duplicate p_symbols->config_Duplicate_inner
|
# define config_Duplicate p_symbols->config_Duplicate_inner
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* cdrom.c: cdrom tools
|
* cdrom.c: cdrom tools
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 1998-2001 VideoLAN
|
* Copyright (C) 1998-2001 VideoLAN
|
||||||
* $Id: cdrom.c,v 1.2 2002/08/08 22:28:22 sam Exp $
|
* $Id: cdrom.c,v 1.3 2002/08/09 23:47:22 massiot Exp $
|
||||||
*
|
*
|
||||||
* Author: Johan Bilien <jobi@via.ecp.fr>
|
* Author: Johan Bilien <jobi@via.ecp.fr>
|
||||||
* Jon Lech Johansen <jon-vl@nanocrew.net>
|
* Jon Lech Johansen <jon-vl@nanocrew.net>
|
||||||
|
@ -62,7 +62,7 @@
|
||||||
* Platform specific
|
* Platform specific
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#if defined( SYS_DARWIN )
|
#if defined( SYS_DARWIN )
|
||||||
CDTOC *getTOC( const char * );
|
CDTOC *getTOC( vlc_object_t *, const char * );
|
||||||
#define freeTOC( p ) free( (void*)p )
|
#define freeTOC( p ) free( (void*)p )
|
||||||
int getNumberOfDescriptors( CDTOC * );
|
int getNumberOfDescriptors( CDTOC * );
|
||||||
int getNumberOfTracks( CDTOC *, int );
|
int getNumberOfTracks( CDTOC *, int );
|
||||||
|
@ -81,7 +81,7 @@ int ioctl_GetTrackCount( vlc_object_t * p_this, int i_fd, const char *psz_dev )
|
||||||
CDTOC *pTOC;
|
CDTOC *pTOC;
|
||||||
int i_descriptors;
|
int i_descriptors;
|
||||||
|
|
||||||
if( ( pTOC = getTOC( psz_dev ) ) == NULL )
|
if( ( pTOC = getTOC( p_this, psz_dev ) ) == NULL )
|
||||||
{
|
{
|
||||||
msg_Err( p_this, "failed to get the TOC" );
|
msg_Err( p_this, "failed to get the TOC" );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
@ -134,7 +134,7 @@ int * ioctl_GetSectors( vlc_object_t *p_this, int i_fd, const char *psz_dev )
|
||||||
int i_leadout = -1;
|
int i_leadout = -1;
|
||||||
CDTOCDescriptor *pTrackDescriptors;
|
CDTOCDescriptor *pTrackDescriptors;
|
||||||
|
|
||||||
if( ( pTOC = getTOC( psz_dev ) ) == NULL )
|
if( ( pTOC = getTOC( p_this, psz_dev ) ) == NULL )
|
||||||
{
|
{
|
||||||
msg_Err( p_this, "failed to get the TOC" );
|
msg_Err( p_this, "failed to get the TOC" );
|
||||||
return( NULL );
|
return( NULL );
|
||||||
|
@ -334,7 +334,7 @@ int ioctl_ReadSector( vlc_object_t *p_this,
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* getTOC: get the TOC
|
* getTOC: get the TOC
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
CDTOC *getTOC( const char *psz_dev )
|
CDTOC *getTOC( vlc_object_t * p_this, const char *psz_dev )
|
||||||
{
|
{
|
||||||
mach_port_t port;
|
mach_port_t port;
|
||||||
char *psz_devname;
|
char *psz_devname;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* float32tos16.c : converter from float32 to signed 16 bits integer
|
* float32tos16.c : converter from float32 to signed 16 bits integer
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 2002 VideoLAN
|
* Copyright (C) 2002 VideoLAN
|
||||||
* $Id: float32tos16.c,v 1.1 2002/08/08 22:26:56 massiot Exp $
|
* $Id: float32tos16.c,v 1.2 2002/08/09 23:47:22 massiot Exp $
|
||||||
*
|
*
|
||||||
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
||||||
*
|
*
|
||||||
|
@ -94,5 +94,7 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter,
|
||||||
else *p_out = *p_in * 32768.0;
|
else *p_out = *p_in * 32768.0;
|
||||||
p_in++; p_out++;
|
p_in++; p_out++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
p_out_buf->i_nb_samples = p_in_buf->i_nb_samples;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
trivial_SOURCES = trivial.c
|
|
@ -0,0 +1,93 @@
|
||||||
|
/*****************************************************************************
|
||||||
|
* trivial.c : trivial resampler (skips samples or pads with zeroes)
|
||||||
|
*****************************************************************************
|
||||||
|
* Copyright (C) 2002 VideoLAN
|
||||||
|
* $Id: trivial.c,v 1.1 2002/08/09 23:47:22 massiot Exp $
|
||||||
|
*
|
||||||
|
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* Preamble
|
||||||
|
*****************************************************************************/
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdlib.h> /* malloc(), free() */
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <vlc/vlc.h>
|
||||||
|
#include "audio_output.h"
|
||||||
|
#include "aout_internal.h"
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* Local prototypes
|
||||||
|
*****************************************************************************/
|
||||||
|
static int Create ( vlc_object_t * );
|
||||||
|
|
||||||
|
static void DoWork ( aout_instance_t *, aout_filter_t *, aout_buffer_t *,
|
||||||
|
aout_buffer_t * );
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* Module descriptor
|
||||||
|
*****************************************************************************/
|
||||||
|
vlc_module_begin();
|
||||||
|
set_description( _("aout filter for trivial resampling") );
|
||||||
|
set_capability( "audio filter", 1 );
|
||||||
|
set_callbacks( Create, NULL );
|
||||||
|
vlc_module_end();
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* Create: allocate trivial mixer
|
||||||
|
*****************************************************************************
|
||||||
|
* This function allocates and initializes a Crop vout method.
|
||||||
|
*****************************************************************************/
|
||||||
|
static int Create( vlc_object_t *p_this )
|
||||||
|
{
|
||||||
|
aout_filter_t * p_filter = (aout_filter_t *)p_this;
|
||||||
|
|
||||||
|
p_filter->pf_do_work = DoWork;
|
||||||
|
p_filter->b_in_place = 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* DoWork: convert a buffer
|
||||||
|
*****************************************************************************/
|
||||||
|
static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter,
|
||||||
|
aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf )
|
||||||
|
{
|
||||||
|
int i_in_nb = p_in_buf->i_nb_samples;
|
||||||
|
int i_out_nb = i_in_nb * p_filter->output.i_rate
|
||||||
|
/ p_filter->input.i_rate;
|
||||||
|
|
||||||
|
if ( p_out_buf != p_in_buf )
|
||||||
|
{
|
||||||
|
/* For whatever reason the buffer allocator decided to allocate
|
||||||
|
* a new buffer. */
|
||||||
|
p_aout->p_vlc->pf_memcpy( p_out_buf->p_buffer, p_in_buf->p_buffer,
|
||||||
|
__MIN(i_out_nb, i_in_nb) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( i_out_nb > i_in_nb )
|
||||||
|
{
|
||||||
|
/* Pad with zeroes. */
|
||||||
|
memset( p_out_buf->p_buffer + i_in_nb, 0, i_out_nb - i_in_nb );
|
||||||
|
}
|
||||||
|
|
||||||
|
p_out_buf->i_nb_samples = i_out_nb;
|
||||||
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* file.c : audio output which writes the samples to a file
|
* file.c : audio output which writes the samples to a file
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 2002 VideoLAN
|
* Copyright (C) 2002 VideoLAN
|
||||||
* $Id: file.c,v 1.2 2002/08/08 22:28:22 sam Exp $
|
* $Id: file.c,v 1.3 2002/08/09 23:47:23 massiot Exp $
|
||||||
*
|
*
|
||||||
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
||||||
*
|
*
|
||||||
|
@ -136,8 +136,8 @@ static int SetFormat( aout_instance_t * p_aout )
|
||||||
static void Play( aout_instance_t * p_aout, aout_buffer_t * p_buffer )
|
static void Play( aout_instance_t * p_aout, aout_buffer_t * p_buffer )
|
||||||
{
|
{
|
||||||
if( fwrite( p_buffer->p_buffer,
|
if( fwrite( p_buffer->p_buffer,
|
||||||
p_buffer->i_nb_samples
|
aout_FormatToSize( &p_aout->output.output,
|
||||||
* aout_FormatToBytes( &p_aout->output.output ), 1,
|
p_buffer->i_nb_samples ), 1,
|
||||||
(FILE *)p_aout->output.p_sys ) != 1 )
|
(FILE *)p_aout->output.p_sys ) != 1 )
|
||||||
{
|
{
|
||||||
msg_Err( p_aout, "write error (%s)", strerror(errno) );
|
msg_Err( p_aout, "write error (%s)", strerror(errno) );
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* oss.c : OSS /dev/dsp module for vlc
|
* oss.c : OSS /dev/dsp module for vlc
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 2000-2002 VideoLAN
|
* Copyright (C) 2000-2002 VideoLAN
|
||||||
* $Id: oss.c,v 1.3 2002/08/08 22:28:22 sam Exp $
|
* $Id: oss.c,v 1.4 2002/08/09 23:47:23 massiot Exp $
|
||||||
*
|
*
|
||||||
* Authors: Michel Kaempf <maxx@via.ecp.fr>
|
* Authors: Michel Kaempf <maxx@via.ecp.fr>
|
||||||
* Samuel Hocevar <sam@zoy.org>
|
* Samuel Hocevar <sam@zoy.org>
|
||||||
|
@ -170,15 +170,24 @@ static int SetFormat( aout_instance_t *p_aout )
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the output format */
|
/* Set the output format */
|
||||||
i_format = AOUT_FMT_S16_NE;
|
if ( AOUT_FMT_IS_SPDIF( &p_aout->output.output ) )
|
||||||
|
{
|
||||||
|
p_aout->output.output.i_format = i_format = AOUT_FMT_SPDIF;
|
||||||
|
p_aout->output.i_nb_samples = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p_aout->output.output.i_format = i_format = AOUT_FMT_S16_NE;
|
||||||
|
p_aout->output.i_nb_samples = DEFAULT_FRAME_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
if( ioctl( p_sys->i_fd, SNDCTL_DSP_SETFMT, &i_format ) < 0
|
if( ioctl( p_sys->i_fd, SNDCTL_DSP_SETFMT, &i_format ) < 0
|
||||||
|| i_format != AOUT_FMT_S16_NE )
|
|| i_format != p_aout->output.output.i_format )
|
||||||
{
|
{
|
||||||
msg_Err( p_aout, "cannot set audio output format (%i)",
|
msg_Err( p_aout, "cannot set audio output format (%i)",
|
||||||
i_format );
|
i_format );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
p_aout->output.output.i_format = AOUT_FMT_S16_NE;
|
|
||||||
|
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
if ( p_aout->output.output.i_channels > 2 )
|
if ( p_aout->output.output.i_channels > 2 )
|
||||||
|
@ -222,8 +231,6 @@ static int SetFormat( aout_instance_t *p_aout )
|
||||||
p_aout->output.output.i_rate = i_rate;
|
p_aout->output.output.i_rate = i_rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
p_aout->output.i_nb_samples = DEFAULT_FRAME_SIZE;
|
|
||||||
|
|
||||||
p_sys->b_initialized = VLC_TRUE;
|
p_sys->b_initialized = VLC_TRUE;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -299,7 +306,7 @@ static int OSSThread( aout_instance_t * p_aout )
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
i_bytes_per_sample = aout_FormatToBytes( &p_aout->output.output );
|
i_bytes_per_sample = aout_FormatToSize( &p_aout->output.output, 1 );
|
||||||
next_date = (mtime_t)GetBufInfo( p_aout ) * 1000000
|
next_date = (mtime_t)GetBufInfo( p_aout ) * 1000000
|
||||||
/ i_bytes_per_sample
|
/ i_bytes_per_sample
|
||||||
/ p_aout->output.output.i_rate;
|
/ p_aout->output.output.i_rate;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* audio_output.c : audio output instance
|
* audio_output.c : audio output instance
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 2002 VideoLAN
|
* Copyright (C) 2002 VideoLAN
|
||||||
* $Id: audio_output.c,v 1.90 2002/08/07 21:36:56 massiot Exp $
|
* $Id: audio_output.c,v 1.91 2002/08/09 23:47:23 massiot Exp $
|
||||||
*
|
*
|
||||||
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
||||||
*
|
*
|
||||||
|
@ -159,10 +159,10 @@ void aout_BufferPlay( aout_instance_t * p_aout, aout_input_t * p_input,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* aout_FormatToBytes : return the number bytes/sample for format
|
* aout_FormatTo : compute the number of bytes/sample for format (used for
|
||||||
* (didn't know where else to put it)
|
* aout_FormatToByterate and aout_FormatToSize)
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
int aout_FormatToBytes( audio_sample_format_t * p_format )
|
int aout_FormatTo( audio_sample_format_t * p_format, int i_multiplier )
|
||||||
{
|
{
|
||||||
int i_result;
|
int i_result;
|
||||||
|
|
||||||
|
@ -185,14 +185,18 @@ int aout_FormatToBytes( audio_sample_format_t * p_format )
|
||||||
i_result = 4;
|
i_result = 4;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AOUT_FMT_A52:
|
case AOUT_FMT_SPDIF:
|
||||||
i_result = 1; /* This is a bit special... sample == byte */
|
case AOUT_FMT_A52: /* Actually smaller and variable, but who cares ? */
|
||||||
break;
|
case AOUT_FMT_DTS: /* Unimplemented and untested */
|
||||||
|
/* Please note that we don't multiply by multiplier, because i_rate
|
||||||
|
* and i_nb_samples do not have any sense for S/PDIF (yes, it
|
||||||
|
* _is_ kludgy). --Meuuh */
|
||||||
|
return AOUT_SPDIF_FRAME;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
i_result = 0; /* will segfault much sooner... */
|
return 0; /* will segfault much sooner... */
|
||||||
}
|
}
|
||||||
|
|
||||||
return i_result * p_format->i_channels;
|
return i_result * p_format->i_channels * i_multiplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* filters.c : audio output filters management
|
* filters.c : audio output filters management
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 2002 VideoLAN
|
* Copyright (C) 2002 VideoLAN
|
||||||
* $Id: filters.c,v 1.1 2002/08/07 21:36:56 massiot Exp $
|
* $Id: filters.c,v 1.2 2002/08/09 23:47:23 massiot Exp $
|
||||||
*
|
*
|
||||||
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
||||||
*
|
*
|
||||||
|
@ -26,12 +26,13 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
#include <stdlib.h> /* calloc(), malloc(), free() */
|
#include <stdlib.h> /* calloc(), malloc(), free() */
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <vlc/vlc.h>
|
||||||
|
|
||||||
#ifdef HAVE_ALLOCA_H
|
#ifdef HAVE_ALLOCA_H
|
||||||
# include <alloca.h>
|
# include <alloca.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <vlc/vlc.h>
|
|
||||||
|
|
||||||
#include "audio_output.h"
|
#include "audio_output.h"
|
||||||
#include "aout_internal.h"
|
#include "aout_internal.h"
|
||||||
|
|
||||||
|
@ -160,10 +161,10 @@ void aout_FiltersHintBuffers( aout_instance_t * p_aout,
|
||||||
{
|
{
|
||||||
aout_filter_t * p_filter = pp_filters[i];
|
aout_filter_t * p_filter = pp_filters[i];
|
||||||
|
|
||||||
int i_output_size = aout_FormatToBytes( &p_filter->output )
|
int i_output_size = aout_FormatToByterate( &p_filter->output,
|
||||||
* p_filter->output.i_rate;
|
p_filter->output.i_rate );
|
||||||
int i_input_size = aout_FormatToBytes( &p_filter->input )
|
int i_input_size = aout_FormatToByterate( &p_filter->input,
|
||||||
* p_filter->input.i_rate;
|
p_filter->input.i_rate );
|
||||||
|
|
||||||
p_first_alloc->i_bytes_per_sec = __MAX( p_first_alloc->i_bytes_per_sec,
|
p_first_alloc->i_bytes_per_sec = __MAX( p_first_alloc->i_bytes_per_sec,
|
||||||
i_output_size );
|
i_output_size );
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* input.c : internal management of input streams for the audio output
|
* input.c : internal management of input streams for the audio output
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 2002 VideoLAN
|
* Copyright (C) 2002 VideoLAN
|
||||||
* $Id: input.c,v 1.1 2002/08/07 21:36:56 massiot Exp $
|
* $Id: input.c,v 1.2 2002/08/09 23:47:23 massiot Exp $
|
||||||
*
|
*
|
||||||
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
||||||
*
|
*
|
||||||
|
@ -116,8 +116,8 @@ static aout_input_t * InputNew( aout_instance_t * p_aout,
|
||||||
/* i_bytes_per_sec is still == -1 if no filters */
|
/* i_bytes_per_sec is still == -1 if no filters */
|
||||||
p_input->input_alloc.i_bytes_per_sec = __MAX(
|
p_input->input_alloc.i_bytes_per_sec = __MAX(
|
||||||
p_input->input_alloc.i_bytes_per_sec,
|
p_input->input_alloc.i_bytes_per_sec,
|
||||||
aout_FormatToBytes( &p_input->input )
|
aout_FormatToByterate( &p_input->input,
|
||||||
* p_input->input.i_rate );
|
p_input->input.i_rate ) );
|
||||||
/* Allocate in the heap, it is more convenient for the decoder. */
|
/* Allocate in the heap, it is more convenient for the decoder. */
|
||||||
p_input->input_alloc.i_alloc_type = AOUT_ALLOC_HEAP;
|
p_input->input_alloc.i_alloc_type = AOUT_ALLOC_HEAP;
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* output.c : internal management of output streams for the audio output
|
* output.c : internal management of output streams for the audio output
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 2002 VideoLAN
|
* Copyright (C) 2002 VideoLAN
|
||||||
* $Id: output.c,v 1.1 2002/08/07 21:36:56 massiot Exp $
|
* $Id: output.c,v 1.2 2002/08/09 23:47:23 massiot Exp $
|
||||||
*
|
*
|
||||||
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
||||||
*
|
*
|
||||||
|
@ -110,8 +110,8 @@ int aout_OutputNew( aout_instance_t * p_aout,
|
||||||
/* Prepare hints for the buffer allocator. */
|
/* Prepare hints for the buffer allocator. */
|
||||||
p_aout->mixer.output_alloc.i_alloc_type = AOUT_ALLOC_HEAP;
|
p_aout->mixer.output_alloc.i_alloc_type = AOUT_ALLOC_HEAP;
|
||||||
p_aout->mixer.output_alloc.i_bytes_per_sec
|
p_aout->mixer.output_alloc.i_bytes_per_sec
|
||||||
= aout_FormatToBytes( &p_aout->output.output )
|
= aout_FormatToByterate( &p_aout->output.output,
|
||||||
* p_aout->output.output.i_rate;
|
p_aout->output.output.i_rate );
|
||||||
|
|
||||||
aout_FiltersHintBuffers( p_aout, p_aout->output.pp_filters,
|
aout_FiltersHintBuffers( p_aout, p_aout->output.pp_filters,
|
||||||
p_aout->output.i_nb_filters,
|
p_aout->output.i_nb_filters,
|
||||||
|
|
|
@ -184,7 +184,7 @@ static const char * module_error( char *psz_buffer )
|
||||||
(p_symbols)->aout_BufferNew_inner = aout_BufferNew; \
|
(p_symbols)->aout_BufferNew_inner = aout_BufferNew; \
|
||||||
(p_symbols)->aout_BufferDelete_inner = aout_BufferDelete; \
|
(p_symbols)->aout_BufferDelete_inner = aout_BufferDelete; \
|
||||||
(p_symbols)->aout_BufferPlay_inner = aout_BufferPlay; \
|
(p_symbols)->aout_BufferPlay_inner = aout_BufferPlay; \
|
||||||
(p_symbols)->aout_FormatToBytes_inner = aout_FormatToBytes; \
|
(p_symbols)->aout_FormatTo_inner = aout_FormatTo; \
|
||||||
(p_symbols)->__aout_InputNew_inner = __aout_InputNew; \
|
(p_symbols)->__aout_InputNew_inner = __aout_InputNew; \
|
||||||
(p_symbols)->aout_InputDelete_inner = aout_InputDelete; \
|
(p_symbols)->aout_InputDelete_inner = aout_InputDelete; \
|
||||||
(p_symbols)->aout_OutputNextBuffer_inner = aout_OutputNextBuffer; \
|
(p_symbols)->aout_OutputNextBuffer_inner = aout_OutputNextBuffer; \
|
||||||
|
|
Loading…
Reference in New Issue