X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faudio_output%2Foss.c;h=929aeacb7e6faacd16f17f787bf5fa0c2d626c49;hb=19933fe7a674ee6d1253821a656507a6a712f8d0;hp=42a22203462d370b1923246bede0a4da1afd03b3;hpb=db5fedc62315cfc0f93c0bb1fff76f53627142b8;p=vlc diff --git a/modules/audio_output/oss.c b/modules/audio_output/oss.c index 42a2220346..929aeacb7e 100644 --- a/modules/audio_output/oss.c +++ b/modules/audio_output/oss.c @@ -1,7 +1,7 @@ /***************************************************************************** * oss.c : OSS /dev/dsp module for vlc ***************************************************************************** - * Copyright (C) 2000-2002 VideoLAN + * Copyright (C) 2000-2002 the VideoLAN team * $Id$ * * Authors: Michel Kaempf @@ -20,28 +20,30 @@ * * 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. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /***************************************************************************** * Preamble *****************************************************************************/ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include /* ENOMEM */ #include /* open(), O_WRONLY */ #include /* ioctl() */ -#include /* strerror() */ #include /* write(), close() */ -#include /* calloc(), malloc(), free() */ -#include +#include +#include #ifdef HAVE_ALLOCA_H # include #endif -#include - -#include "aout_internal.h" +#include /* SNDCTL_DSP_RESET, SNDCTL_DSP_SETFMT, SNDCTL_DSP_STEREO, SNDCTL_DSP_SPEED, * SNDCTL_DSP_GETOSPACE */ @@ -82,7 +84,7 @@ struct aout_sys_t /* This must be a power of 2. */ #define FRAME_SIZE 1024 -#define FRAME_COUNT 4 +#define FRAME_COUNT 32 /***************************************************************************** * Local prototypes @@ -106,13 +108,13 @@ static mtime_t BufferDuration( aout_instance_t * p_aout ); vlc_module_begin(); set_shortname( "OSS" ); - set_description( _("Linux OSS audio output") ); + set_description( N_("UNIX OSS audio output") ); set_category( CAT_AUDIO ); set_subcategory( SUBCAT_AUDIO_AOUT ); add_file( "dspdev", "/dev/dsp", aout_FindAndRestart, - N_("OSS DSP device"), NULL, VLC_FALSE ); - add_bool( "oss-buggy", 0, NULL, BUGGY_TEXT, BUGGY_LONGTEXT, VLC_TRUE ); + N_("OSS DSP device"), NULL, false ); + add_bool( "oss-buggy", 0, NULL, BUGGY_TEXT, BUGGY_LONGTEXT, true ); set_capability( "audio output", 100 ); add_shortcut( "oss" ); @@ -155,7 +157,7 @@ static void Probe( aout_instance_t * p_aout ) { if ( !(i_chanmask & DSP_BIND_FRONT) ) { - msg_Err( p_aout, "No front channels ! (%x)", + msg_Err( p_aout, "no front channels! (%x)", i_chanmask ); return; } @@ -167,7 +169,7 @@ static void Probe( aout_instance_t * p_aout ) | AOUT_CHAN_LFE)) ) { val.i_int = AOUT_VAR_5_1; - text.psz_string = N_("5.1"); + text.psz_string = "5.1"; var_Change( p_aout, "audio-device", VLC_VAR_ADDCHOICE, &val, &text ); } @@ -254,7 +256,7 @@ static void Probe( aout_instance_t * p_aout ) } else if( config_GetInt( p_aout, "spdif" ) ) { - msg_Warn( p_aout, "s/pdif not supported by card" ); + msg_Warn( p_aout, "S/PDIF not supported by card" ); } } @@ -278,10 +280,7 @@ static int Open( vlc_object_t *p_this ) /* Allocate structure */ p_aout->output.p_sys = p_sys = malloc( sizeof( aout_sys_t ) ); if( p_sys == NULL ) - { - msg_Err( p_aout, "out of memory" ); return VLC_ENOMEM; - } /* Get device name */ if( (psz_device = config_GetPsz( p_aout, "dspdev" )) == NULL ) @@ -300,6 +299,7 @@ static int Open( vlc_object_t *p_this ) if( p_sys->i_fd < 0 ) { msg_Err( p_aout, "cannot open audio device (%s)", psz_device ); + free( psz_device ); free( p_sys ); return VLC_EGENERIC; } @@ -362,7 +362,7 @@ static int Open( vlc_object_t *p_this ) return VLC_EGENERIC; } - val.b_bool = VLC_TRUE; + val.b_bool = true; var_Set( p_aout, "intf-change", val ); /* Reset the DSP device */ @@ -474,9 +474,9 @@ static int Open( vlc_object_t *p_this ) /* i_fragment = xxxxyyyy where: xxxx is fragtotal * 1 << yyyy is fragsize */ - i_fragments = 0; - i_frame_size = FRAME_SIZE * p_aout->output.output.i_bytes_per_frame; - while( i_frame_size >>= 1 ) + i_frame_size = ((uint64_t)p_aout->output.output.i_bytes_per_frame * p_aout->output.output.i_rate * 65536) / (48000 * 2 * 2) / FRAME_COUNT; + i_fragments = 4; + while( i_fragments < 12 && (1U << i_fragments) < i_frame_size ) { ++i_fragments; } @@ -517,9 +517,9 @@ static int Open( vlc_object_t *p_this ) /* Create OSS thread and wait for its readiness. */ if( vlc_thread_create( p_aout, "aout", OSSThread, - VLC_THREAD_PRIORITY_OUTPUT, VLC_FALSE ) ) + VLC_THREAD_PRIORITY_OUTPUT, false ) ) { - msg_Err( p_aout, "cannot create OSS thread (%s)", strerror(errno) ); + msg_Err( p_aout, "cannot create OSS thread (%m)" ); close( p_sys->i_fd ); free( p_sys ); return VLC_ETHREAD; @@ -533,6 +533,7 @@ static int Open( vlc_object_t *p_this ) *****************************************************************************/ static void Play( aout_instance_t *p_aout ) { + VLC_UNUSED(p_aout); } /***************************************************************************** @@ -543,9 +544,9 @@ static void Close( vlc_object_t * p_this ) aout_instance_t *p_aout = (aout_instance_t *)p_this; struct aout_sys_t * p_sys = p_aout->output.p_sys; - p_aout->b_die = VLC_TRUE; + vlc_object_kill( p_aout ); vlc_thread_join( p_aout ); - p_aout->b_die = VLC_FALSE; + p_aout->b_die = false; ioctl( p_sys->i_fd, SNDCTL_DSP_RESET, NULL ); close( p_sys->i_fd ); @@ -589,11 +590,11 @@ static int OSSThread( aout_instance_t * p_aout ) struct aout_sys_t * p_sys = p_aout->output.p_sys; mtime_t next_date = 0; - while ( !p_aout->b_die ) + while ( vlc_object_alive (p_aout) ) { aout_buffer_t * p_buffer = NULL; int i_tmp, i_size; - byte_t * p_bytes; + uint8_t * p_bytes; if ( p_aout->output.output.i_format != VLC_FOURCC('s','p','d','i') ) { @@ -615,7 +616,7 @@ static int OSSThread( aout_instance_t * p_aout ) /* Next buffer will be played at mdate() + buffered */ p_buffer = aout_OutputNextBuffer( p_aout, mdate() + buffered, - VLC_FALSE ); + false ); if( p_buffer == NULL && buffered > ( p_aout->output.p_sys->max_buffer_duration @@ -646,8 +647,8 @@ static int OSSThread( aout_instance_t * p_aout ) } } - while( !p_aout->b_die && ! ( p_buffer = - aout_OutputNextBuffer( p_aout, next_date, VLC_TRUE ) ) ) + while( vlc_object_alive (p_aout) && ! ( p_buffer = + aout_OutputNextBuffer( p_aout, next_date, true ) ) ) { msleep( 1000 ); next_date = mdate(); @@ -675,7 +676,7 @@ static int OSSThread( aout_instance_t * p_aout ) if( i_tmp < 0 ) { - msg_Err( p_aout, "write failed (%s)", strerror(errno) ); + msg_Err( p_aout, "write failed (%m)" ); } if ( p_buffer != NULL )