X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faudio_output%2Ffile.c;h=f6e281367e97122e4f391e6981cc7c56379bc43f;hb=e43ea251bdd93dd47a1505f2db9e3ba3e9c8c268;hp=ce28c9235245d77253caf71debde2a9016296ef1;hpb=bd2e2e8d5b16f64444a059e7e53aca760428d977;p=vlc diff --git a/modules/audio_output/file.c b/modules/audio_output/file.c index ce28c92352..f6e281367e 100644 --- a/modules/audio_output/file.c +++ b/modules/audio_output/file.c @@ -25,16 +25,16 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include -#include #include -#include -#include -#include "charset.h" +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif -#include "aout_internal.h" -#include "codecs.h" +#include +#include +#include /* WAVEHEADER */ +#include #define FRAME_SIZE 2048 #define A52_FRAME_NB 1536 @@ -105,7 +105,7 @@ static int format_int[] = { VLC_FOURCC('u','8',' ',' '), VLC_FOURCC('s','p','i','f') }; #define FILE_TEXT N_("Output file") -#define FILE_LONGTEXT N_("File to which the audio samples will be written to.") +#define FILE_LONGTEXT N_("File to which the audio samples will be written to. (\"-\" for stdout") vlc_module_begin(); set_description( _("File audio output") ); @@ -120,6 +120,7 @@ vlc_module_begin(); CHANNELS_TEXT, CHANNELS_LONGTEXT, VLC_TRUE ); add_file( "audiofile-file", "audiofile.wav", NULL, FILE_TEXT, FILE_LONGTEXT, VLC_FALSE ); + change_unsafe(); add_bool( "audiofile-wav", 1, NULL, WAV_TEXT, WAV_LONGTEXT, VLC_TRUE ); set_capability( "audio output", 0 ); @@ -157,7 +158,11 @@ static int Open( vlc_object_t * p_this ) return VLC_EGENERIC; } - p_aout->output.p_sys->p_file = utf8_fopen( psz_name, "wb" ); + if( !strcmp( psz_name, "-" ) ) + p_aout->output.p_sys->p_file = stdout; + else + p_aout->output.p_sys->p_file = utf8_fopen( psz_name, "wb" ); + free( psz_name ); if ( p_aout->output.p_sys->p_file == NULL ) { @@ -185,7 +190,8 @@ static int Open( vlc_object_t * p_this ) { msg_Err( p_aout, "cannot understand the format string (%s)", psz_format ); - fclose( p_aout->output.p_sys->p_file ); + if( p_aout->output.p_sys->p_file != stdout ) + fclose( p_aout->output.p_sys->p_file ); free( p_aout->output.p_sys ); return VLC_EGENERIC; } @@ -271,7 +277,7 @@ static int Open( vlc_object_t * p_this ) if( fwrite( wh, sizeof(WAVEHEADER), 1, p_aout->output.p_sys->p_file ) != 1 ) { - msg_Err( p_aout, "write error (%s)", strerror(errno) ); + msg_Err( p_aout, "write error (%m)" ); } } @@ -296,7 +302,7 @@ static void Close( vlc_object_t * p_this ) /* Write Wave Header */ if( fseek( p_aout->output.p_sys->p_file, 0, SEEK_SET ) ) { - msg_Err( p_aout, "seek error (%s)", strerror(errno) ); + msg_Err( p_aout, "seek error (%m)" ); } /* Header -> little endian format */ @@ -308,11 +314,12 @@ static void Close( vlc_object_t * p_this ) if( fwrite( &p_aout->output.p_sys->waveh, sizeof(WAVEHEADER), 1, p_aout->output.p_sys->p_file ) != 1 ) { - msg_Err( p_aout, "write error (%s)", strerror(errno) ); + msg_Err( p_aout, "write error (%m)" ); } } - fclose( p_aout->output.p_sys->p_file ); + if( p_aout->output.p_sys->p_file != stdout ) + fclose( p_aout->output.p_sys->p_file ); free( p_aout->output.p_sys ); } @@ -328,7 +335,7 @@ static void Play( aout_instance_t * p_aout ) if( fwrite( p_buffer->p_buffer, p_buffer->i_nb_bytes, 1, p_aout->output.p_sys->p_file ) != 1 ) { - msg_Err( p_aout, "write error (%s)", strerror(errno) ); + msg_Err( p_aout, "write error (%m)" ); } if( p_aout->output.p_sys->b_add_wav_header )