X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faudio_output%2Fwaveout.c;h=11f29257a615c569f3193dbb18cb14cb65a9ce15;hb=9384f8b2eb38b5a8acaeb9eaff62059f6baa3735;hp=e0fec39b20c1b18e4c461f63afa0b07b795b0e47;hpb=79390c26ceb2d6b5022e28ecd87d0670e3ba3d7e;p=vlc diff --git a/modules/audio_output/waveout.c b/modules/audio_output/waveout.c index e0fec39b20..11f29257a6 100644 --- a/modules/audio_output/waveout.c +++ b/modules/audio_output/waveout.c @@ -34,7 +34,7 @@ #include #include -#define FRAME_SIZE 1024 /* The size is in samples, not in bytes */ +#define FRAME_SIZE 4096 /* The size is in samples, not in bytes */ #define FRAMES_NUM 8 /***************************************************************************** @@ -123,6 +123,10 @@ static int PlayWaveOut ( aout_instance_t *, HWAVEOUT, WAVEHDR *, static void CALLBACK WaveOutCallback ( HWAVEOUT, UINT, DWORD, DWORD, DWORD ); static void WaveOutThread( notification_thread_t * ); +static int VolumeInfos( aout_instance_t *, audio_volume_t * ); +static int VolumeGet( aout_instance_t *, audio_volume_t * ); +static int VolumeSet( aout_instance_t *, audio_volume_t ); + /***************************************************************************** * Module descriptor *****************************************************************************/ @@ -132,8 +136,11 @@ static void WaveOutThread( notification_thread_t * ); "audio output mode (which is not well supported by some soundcards)." ) vlc_module_begin(); + set_shortname( "WaveOut" ); set_description( _("Win32 waveOut extension output") ); set_capability( "audio output", 50 ); + set_category( CAT_AUDIO ); + set_subcategory( SUBCAT_AUDIO_AOUT ); add_bool( "waveout-float32", 1, 0, FLOAT_TEXT, FLOAT_LONGTEXT, VLC_TRUE ); set_callbacks( Open, Close ); vlc_module_end(); @@ -284,6 +291,10 @@ static int Open( vlc_object_t *p_this ) p_aout->output.output.i_bytes_per_frame; aout_VolumeSoftInit( p_aout ); + + p_aout->output.pf_volume_infos = VolumeInfos; + p_aout->output.pf_volume_get = VolumeGet; + p_aout->output.pf_volume_set = VolumeSet; } @@ -494,10 +505,10 @@ static int OpenWaveOut( aout_instance_t *p_aout, int i_format, #define waveformat p_aout->output.p_sys->waveformat waveformat.dwChannelMask = 0; - for( i = 0; i < sizeof(pi_channels_in)/sizeof(uint32_t); i++ ) + for( i = 0; i < sizeof(pi_channels_src)/sizeof(uint32_t); i++ ) { - if( i_channels & pi_channels_in[i] ) - waveformat.dwChannelMask |= pi_channels_out[i]; + if( i_channels & pi_channels_src[i] ) + waveformat.dwChannelMask |= pi_channels_in[i]; } switch( i_format ) @@ -771,3 +782,40 @@ static void WaveOutThread( notification_thread_t *p_notif ) } } } + +static int VolumeInfos( aout_instance_t * p_aout, audio_volume_t * pi_soft ) +{ + *pi_soft = AOUT_VOLUME_MAX / 2; + return 0; +} + +static int VolumeGet( aout_instance_t * p_aout, audio_volume_t * pi_volume ) +{ + DWORD i_waveout_vol; + +#ifdef UNDER_CE + waveOutGetVolume( 0, &i_waveout_vol ); +#else + waveOutGetVolume( p_aout->output.p_sys->h_waveout, &i_waveout_vol ); +#endif + + i_waveout_vol &= 0xFFFF; + *pi_volume = p_aout->output.i_volume = + i_waveout_vol * AOUT_VOLUME_MAX / 2 / 0xFFFF; + return 0; +} + +static int VolumeSet( aout_instance_t * p_aout, audio_volume_t i_volume ) +{ + unsigned long i_waveout_vol = i_volume * 0xFFFF * 2 / AOUT_VOLUME_MAX; + i_waveout_vol |= (i_waveout_vol << 16); + +#ifdef UNDER_CE + waveOutSetVolume( 0, i_waveout_vol ); +#else + waveOutSetVolume( p_aout->output.p_sys->h_waveout, i_waveout_vol ); +#endif + + p_aout->output.i_volume = i_volume; + return 0; +}