* audio_output.c : audio output thread
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: audio_output.c,v 1.56 2001/03/21 13:42:34 sam Exp $
+ * $Id: audio_output.c,v 1.59 2001/05/01 04:18:18 sam Exp $
*
* Authors: Michel Kaempf <maxx@via.ecp.fr>
*
#include "defs.h"
#include <unistd.h> /* getpid() */
+#ifdef WIN32 /* getpid() for win32 is located in process.h */
+#include <process.h>
+#endif
#include <stdio.h> /* "intf_msg.h" */
#include <stdlib.h> /* calloc(), malloc(), free() */
}
/* Choose the best module */
- p_aout->p_module = module_Need( p_main->p_bank,
- MODULE_CAPABILITY_AOUT, NULL );
+ p_aout->p_module = module_Need( MODULE_CAPABILITY_AOUT, NULL );
if( p_aout->p_module == NULL )
{
*/
if ( p_aout->pf_open( p_aout ) )
{
- module_Unneed( p_main->p_bank, p_aout->p_module );
+ module_Unneed( p_aout->p_module );
free( p_aout );
return( NULL );
}
{
intf_ErrMsg( "aout error: null sample rate" );
p_aout->pf_close( p_aout );
- module_Unneed( p_main->p_bank, p_aout->p_module );
+ module_Unneed( p_aout->p_module );
free( p_aout );
return( NULL );
}
- p_aout->b_stereo = ( p_aout->i_channels == 2 ) ? 1 : 0; /* FIXME: only works
- for i_channels == 1 or 2 ??*/
+ /* special setting for ac3 pass-through mode */
+ if( main_GetIntVariable( AOUT_SPDIF_VAR, 0 ) )
+ {
+ p_aout->i_format = AOUT_FMT_AC3;
+ p_aout->i_channels = 1;
+ p_aout->l_rate = 48000;
+ }
+
+ /* FIXME: only works for i_channels == 1 or 2 ?? */
+ p_aout->b_stereo = ( p_aout->i_channels == 2 ) ? 1 : 0;
if ( p_aout->pf_setformat( p_aout ) )
{
p_aout->pf_close( p_aout );
- module_Unneed( p_main->p_bank, p_aout->p_module );
+ module_Unneed( p_aout->p_module );
free( p_aout );
return( NULL );
}
/* Initialize the volume level */
- p_aout->vol = VOLUME_DEFAULT;
+ p_aout->i_vol = VOLUME_DEFAULT;
/* FIXME: maybe it would be cleaner to change SpawnThread prototype
* see vout to handle status correctly ?? however, it is not critical since
if( aout_SpawnThread( p_aout ) )
{
p_aout->pf_close( p_aout );
- module_Unneed( p_main->p_bank, p_aout->p_module );
+ module_Unneed( p_aout->p_module );
free( p_aout );
return( NULL );
}
l_bytes = 1 * sizeof(s16) * p_aout->l_units;
aout_thread = (void *)aout_S16MonoThread;
break;
+ case AOUT_FMT_AC3:
+ intf_WarnMsg( 2, "aout info: ac3 pass-through thread" );
+ l_bytes = 0;
+ aout_thread = (void *)aout_SpdifThread;
+ break;
- default:
+ default:
intf_ErrMsg( "aout error: unknown audio output format (%i)",
p_aout->i_format );
return( -1 );
l_bytes = 2 * sizeof(s16) * p_aout->l_units;
aout_thread = (void *)aout_S16StereoThread;
break;
-
default:
intf_ErrMsg( "aout error: unknown audio output format %i",
p_aout->i_format );
p_aout->pf_close( p_aout );
/* Release the aout module */
- module_Unneed( p_main->p_bank, p_aout->p_module );
+ module_Unneed( p_aout->p_module );
/* Free structure */
free( p_aout );