Commit e01aa2ce authored by Sam Hocevar's avatar Sam Hocevar

* support for --esdserver. doesn't seem to work yet, though...

parent 5d3b8d9d
...@@ -36,6 +36,9 @@ ...@@ -36,6 +36,9 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/time.h>
#include <time.h>
#include <esd.h> #include <esd.h>
/***************************************************************************** /*****************************************************************************
...@@ -66,6 +69,7 @@ vlc_module_begin(); ...@@ -66,6 +69,7 @@ vlc_module_begin();
set_description( _("EsounD audio output") ); set_description( _("EsounD audio output") );
set_shortname( "EsounD" ); set_shortname( "EsounD" );
set_capability( "audio output", 50 ); set_capability( "audio output", 50 );
add_string( "esdserver", "", NULL, N_("Esound server"), NULL, VLC_FALSE );
set_category( CAT_AUDIO ); set_category( CAT_AUDIO );
set_subcategory( SUBCAT_AUDIO_AOUT ); set_subcategory( SUBCAT_AUDIO_AOUT );
set_callbacks( Open, Close ); set_callbacks( Open, Close );
...@@ -79,9 +83,9 @@ static int Open( vlc_object_t *p_this ) ...@@ -79,9 +83,9 @@ static int Open( vlc_object_t *p_this )
{ {
aout_instance_t *p_aout = (aout_instance_t *)p_this; aout_instance_t *p_aout = (aout_instance_t *)p_this;
struct aout_sys_t * p_sys; struct aout_sys_t * p_sys;
char * psz_server;
int i_nb_channels; int i_nb_channels;
int i_newfd = -1; int i_newfd;
int fl;
/* Allocate structure */ /* Allocate structure */
p_sys = malloc( sizeof( aout_sys_t ) ); p_sys = malloc( sizeof( aout_sys_t ) );
...@@ -122,11 +126,24 @@ static int Open( vlc_object_t *p_this ) ...@@ -122,11 +126,24 @@ static int Open( vlc_object_t *p_this )
/* Force the rate, otherwise the sound is very noisy */ /* Force the rate, otherwise the sound is very noisy */
p_aout->output.output.i_rate = ESD_DEFAULT_RATE; p_aout->output.output.i_rate = ESD_DEFAULT_RATE;
p_aout->output.i_nb_samples = ESD_BUF_SIZE * 2;
/* open a socket for playing a stream /* Open a socket for playing a stream
* and try to open /dev/dsp if there's no EsounD */ * and try to open /dev/dsp if there's no EsounD */
p_sys->i_fd = esd_play_stream_fallback( p_sys->esd_format, psz_server = config_GetPsz( p_aout, "esdserver" );
p_aout->output.output.i_rate, NULL, "vlc" ); if( psz_server && *psz_server )
{
p_sys->i_fd = esd_play_stream_fallback( p_sys->esd_format,
p_aout->output.output.i_rate,
psz_server, "vlc" );
}
else
{
p_sys->i_fd = esd_play_stream_fallback( p_sys->esd_format,
p_aout->output.output.i_rate,
NULL, "vlc" );
}
if( p_sys->i_fd < 0 ) if( p_sys->i_fd < 0 )
{ {
msg_Err( p_aout, "cannot open esound socket (format 0x%08x at %d Hz)", msg_Err( p_aout, "cannot open esound socket (format 0x%08x at %d Hz)",
...@@ -135,16 +152,32 @@ static int Open( vlc_object_t *p_this ) ...@@ -135,16 +152,32 @@ static int Open( vlc_object_t *p_this )
return VLC_EGENERIC; return VLC_EGENERIC;
} }
p_aout->output.i_nb_samples = ESD_BUF_SIZE * 2; if( psz_server && *psz_server )
{
struct timeval start, stop;
esd_server_info_t * p_info;
gettimeofday( &start, NULL );
p_info = esd_get_server_info( p_sys->i_fd );
gettimeofday( &stop, NULL );
p_sys->latency = (mtime_t)( stop.tv_sec - start.tv_sec )
* (mtime_t)1000000;
p_sys->latency += stop.tv_usec - start.tv_usec;
}
else
{
p_sys->latency = 0;
}
/* ESD latency is calculated for 44100 Hz. We don't have any way to get the /* ESD latency is calculated for 44100 Hz. We don't have any way to get the
* number of buffered samples, so I assume ESD_BUF_SIZE/2 */ * number of buffered samples, so I assume ESD_BUF_SIZE/2 */
p_sys->latency = p_sys->latency +=
(mtime_t)( esd_get_latency( i_newfd = esd_open_sound(NULL) ) + (mtime_t)( esd_get_latency( i_newfd = esd_open_sound(NULL) )
ESD_BUF_SIZE/2 + ESD_BUF_SIZE / 2
* p_aout->output.output.i_bytes_per_frame * p_aout->output.output.i_bytes_per_frame
* p_aout->output.output.i_rate * p_aout->output.output.i_rate
/ ESD_DEFAULT_RATE ) / ESD_DEFAULT_RATE )
* (mtime_t)1000000 * (mtime_t)1000000
/ p_aout->output.output.i_bytes_per_frame / p_aout->output.output.i_bytes_per_frame
/ p_aout->output.output.i_rate; / p_aout->output.output.i_rate;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment