From f74cbdf7a418b9be1e60ee43bfdf94bafe283760 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Kempf Date: Sun, 27 Dec 2009 02:41:54 +0100 Subject: [PATCH] DirectX/Waveout: new windows_audio_common.h file So we stop duplicating the code if we try to improve it later on :D --- modules/audio_output/Modules.am | 4 +- modules/audio_output/directx.c | 121 +--------------- modules/audio_output/waveout.c | 88 +----------- modules/audio_output/windows_audio_common.h | 149 ++++++++++++++++++++ 4 files changed, 155 insertions(+), 207 deletions(-) create mode 100644 modules/audio_output/windows_audio_common.h diff --git a/modules/audio_output/Modules.am b/modules/audio_output/Modules.am index bb56ed89b2..548a62401d 100644 --- a/modules/audio_output/Modules.am +++ b/modules/audio_output/Modules.am @@ -1,9 +1,9 @@ SOURCES_alsa = alsa.c -SOURCES_aout_directx = directx.c +SOURCES_aout_directx = directx.c windows_audio_common.h SOURCES_aout_file = file.c SOURCES_oss = oss.c SOURCES_aout_sdl = sdl.c -SOURCES_waveout = waveout.c +SOURCES_waveout = waveout.c windows_audio_common.h SOURCES_hd1000a = hd1000a.cpp SOURCES_portaudio = portaudio.c SOURCES_auhal = auhal.c diff --git a/modules/audio_output/directx.c b/modules/audio_output/directx.c index 118722e779..227b429ac5 100644 --- a/modules/audio_output/directx.c +++ b/modules/audio_output/directx.c @@ -34,106 +34,11 @@ #include #include -#include -#include +#include "windows_audio_common.h" + #include #define FRAME_SIZE ((int)p_aout->output.output.i_rate/20) /* Size in samples */ -#define FRAMES_NUM 8 /* Needs to be > 3 */ - -/***************************************************************************** - * DirectSound GUIDs. - * Defining them here allows us to get rid of the dxguid library during - * the linking stage. - *****************************************************************************/ -#include - -/***************************************************************************** - * Useful macros - *****************************************************************************/ -#ifndef WAVE_FORMAT_IEEE_FLOAT -# define WAVE_FORMAT_IEEE_FLOAT 0x0003 -#endif - -#ifndef WAVE_FORMAT_DOLBY_AC3_SPDIF -# define WAVE_FORMAT_DOLBY_AC3_SPDIF 0x0092 -#endif - -#ifndef WAVE_FORMAT_EXTENSIBLE -#define WAVE_FORMAT_EXTENSIBLE 0xFFFE -#endif - -#ifndef SPEAKER_FRONT_LEFT -# define SPEAKER_FRONT_LEFT 0x1 -# define SPEAKER_FRONT_RIGHT 0x2 -# define SPEAKER_FRONT_CENTER 0x4 -# define SPEAKER_LOW_FREQUENCY 0x8 -# define SPEAKER_BACK_LEFT 0x10 -# define SPEAKER_BACK_RIGHT 0x20 -# define SPEAKER_FRONT_LEFT_OF_CENTER 0x40 -# define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80 -# define SPEAKER_BACK_CENTER 0x100 -# define SPEAKER_SIDE_LEFT 0x200 -# define SPEAKER_SIDE_RIGHT 0x400 -# define SPEAKER_TOP_CENTER 0x800 -# define SPEAKER_TOP_FRONT_LEFT 0x1000 -# define SPEAKER_TOP_FRONT_CENTER 0x2000 -# define SPEAKER_TOP_FRONT_RIGHT 0x4000 -# define SPEAKER_TOP_BACK_LEFT 0x8000 -# define SPEAKER_TOP_BACK_CENTER 0x10000 -# define SPEAKER_TOP_BACK_RIGHT 0x20000 -# define SPEAKER_RESERVED 0x80000000 -#endif - -#ifndef DSSPEAKER_DSSPEAKER_DIRECTOUT -# define DSSPEAKER_DSSPEAKER_DIRECTOUT 0x00000000 -#endif -#ifndef DSSPEAKER_HEADPHONE -# define DSSPEAKER_HEADPHONE 0x00000001 -#endif -#ifndef DSSPEAKER_MONO -# define DSSPEAKER_MONO 0x00000002 -#endif -#ifndef DSSPEAKER_QUAD -# define DSSPEAKER_QUAD 0x00000003 -#endif -#ifndef DSSPEAKER_STEREO -# define DSSPEAKER_STEREO 0x00000004 -#endif -#ifndef DSSPEAKER_SURROUND -# define DSSPEAKER_SURROUND 0x00000005 -#endif -#ifndef DSSPEAKER_5POINT1 -# define DSSPEAKER_5POINT1 0x00000006 -#endif -#ifndef DSSPEAKER_7POINT1 -# define DSSPEAKER_7POINT1 0x00000007 -#endif -#ifndef DSSPEAKER_7POINT1_SURROUND -# define DSSPEAKER_7POINT1_SURROUND 0x00000008 -#endif -#ifndef DSSPEAKER_7POINT1_WIDE -# define DSSPEAKER_7POINT1_WIDE DSSPEAKER_7POINT1 -#endif - -#ifndef _WAVEFORMATEXTENSIBLE_ -typedef struct { - WAVEFORMATEX Format; - union { - WORD wValidBitsPerSample; /* bits of precision */ - WORD wSamplesPerBlock; /* valid if wBitsPerSample==0 */ - WORD wReserved; /* If neither applies, set to zero. */ - } Samples; - DWORD dwChannelMask; /* which channels are */ - /* present in stream */ - GUID SubFormat; -} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; -#endif - - -DEFINE_GUID( _KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, WAVE_FORMAT_IEEE_FLOAT, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 ); -DEFINE_GUID( _KSDATAFORMAT_SUBTYPE_PCM, WAVE_FORMAT_PCM, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 ); -DEFINE_GUID( _KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF, WAVE_FORMAT_DOLBY_AC3_SPDIF, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 ); /***************************************************************************** * notification_thread_t: DirectX event thread @@ -184,23 +89,6 @@ struct aout_sys_t uint32_t i_channels; }; -static const uint32_t pi_channels_src[] = - { AOUT_CHAN_LEFT, AOUT_CHAN_RIGHT, - AOUT_CHAN_MIDDLELEFT, AOUT_CHAN_MIDDLERIGHT, - AOUT_CHAN_REARLEFT, AOUT_CHAN_REARRIGHT, AOUT_CHAN_REARCENTER, - AOUT_CHAN_CENTER, AOUT_CHAN_LFE, 0 }; -static const uint32_t pi_channels_in[] = - { SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, - SPEAKER_SIDE_LEFT, SPEAKER_SIDE_RIGHT, - SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT, SPEAKER_BACK_CENTER, - SPEAKER_FRONT_CENTER, SPEAKER_LOW_FREQUENCY, 0 }; -static const uint32_t pi_channels_out[] = - { SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, - SPEAKER_FRONT_CENTER, SPEAKER_LOW_FREQUENCY, - SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT, - SPEAKER_BACK_CENTER, - SPEAKER_SIDE_LEFT, SPEAKER_SIDE_RIGHT, 0 }; - /***************************************************************************** * Local prototypes. *****************************************************************************/ @@ -231,10 +119,7 @@ static const char *const ppsz_adev_text[] = {"default", }; *****************************************************************************/ #define DEVICE_TEXT N_("Output device") #define DEVICE_LONGTEXT N_("Select your audio output device") -#define FLOAT_TEXT N_("Use float32 output") -#define FLOAT_LONGTEXT N_( \ - "The option allows you to enable or disable the high-quality float32 " \ - "audio output mode (which is not well supported by some soundcards)." ) + #define SPEAKER_TEXT N_("Speaker configuration") #define SPEAKER_LONGTEXT N_("Select speaker configuration you want to use. " \ "This option doesn't upmix! So NO e.g. Stereo -> 5.1 conversion." ) diff --git a/modules/audio_output/waveout.c b/modules/audio_output/waveout.c index 6325b53caf..71398c340e 100644 --- a/modules/audio_output/waveout.c +++ b/modules/audio_output/waveout.c @@ -35,74 +35,9 @@ #include #include -#include -#include +#include "windows_audio_common.h" #define FRAME_SIZE 4096 /* The size is in samples, not in bytes */ -#define FRAMES_NUM 8 - -/***************************************************************************** - * Useful macros - *****************************************************************************/ -#ifdef UNDER_CE -# define DWORD_PTR DWORD -# ifdef waveOutGetDevCaps -# undef waveOutGetDevCaps - MMRESULT WINAPI waveOutGetDevCaps(UINT, LPWAVEOUTCAPS, UINT); -# endif -#endif - -#ifndef WAVE_FORMAT_IEEE_FLOAT -# define WAVE_FORMAT_IEEE_FLOAT 0x0003 -#endif - -#ifndef WAVE_FORMAT_DOLBY_AC3_SPDIF -# define WAVE_FORMAT_DOLBY_AC3_SPDIF 0x0092 -#endif - -#ifndef WAVE_FORMAT_EXTENSIBLE -#define WAVE_FORMAT_EXTENSIBLE 0xFFFE -#endif - -#ifndef SPEAKER_FRONT_LEFT -# define SPEAKER_FRONT_LEFT 0x1 -# define SPEAKER_FRONT_RIGHT 0x2 -# define SPEAKER_FRONT_CENTER 0x4 -# define SPEAKER_LOW_FREQUENCY 0x8 -# define SPEAKER_BACK_LEFT 0x10 -# define SPEAKER_BACK_RIGHT 0x20 -# define SPEAKER_FRONT_LEFT_OF_CENTER 0x40 -# define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80 -# define SPEAKER_BACK_CENTER 0x100 -# define SPEAKER_SIDE_LEFT 0x200 -# define SPEAKER_SIDE_RIGHT 0x400 -# define SPEAKER_TOP_CENTER 0x800 -# define SPEAKER_TOP_FRONT_LEFT 0x1000 -# define SPEAKER_TOP_FRONT_CENTER 0x2000 -# define SPEAKER_TOP_FRONT_RIGHT 0x4000 -# define SPEAKER_TOP_BACK_LEFT 0x8000 -# define SPEAKER_TOP_BACK_CENTER 0x10000 -# define SPEAKER_TOP_BACK_RIGHT 0x20000 -# define SPEAKER_RESERVED 0x80000000 -#endif - -#ifndef _WAVEFORMATEXTENSIBLE_ -typedef struct { - WAVEFORMATEX Format; - union { - WORD wValidBitsPerSample; /* bits of precision */ - WORD wSamplesPerBlock; /* valid if wBitsPerSample==0 */ - WORD wReserved; /* If neither applies, set to zero. */ - } Samples; - DWORD dwChannelMask; /* which channels are */ - /* present in stream */ - GUID SubFormat; -} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; -#endif - -static const GUID __KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = {WAVE_FORMAT_IEEE_FLOAT, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; -static const GUID __KSDATAFORMAT_SUBTYPE_PCM = {WAVE_FORMAT_PCM, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; -static const GUID __KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF = {WAVE_FORMAT_DOLBY_AC3_SPDIF, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; /***************************************************************************** * Local prototypes @@ -152,10 +87,6 @@ static const char *const ppsz_adev_text[] = { N_("Microsoft Soundmapper") }; /***************************************************************************** * Module descriptor *****************************************************************************/ -#define FLOAT_TEXT N_("Use float32 output") -#define FLOAT_LONGTEXT N_( \ - "The option allows you to enable or disable the high-quality float32 " \ - "audio output mode (which is not well supported by some soundcards)." ) #define DEVICE_TEXT N_("Select Audio Device") #define DEVICE_LONG N_("Select special Audio device, or let windows "\ "decide (default), change needs VLC restart "\ @@ -215,23 +146,6 @@ struct aout_sys_t int pi_chan_table[AOUT_CHAN_MAX]; }; -static const uint32_t pi_channels_src[] = - { AOUT_CHAN_LEFT, AOUT_CHAN_RIGHT, - AOUT_CHAN_MIDDLELEFT, AOUT_CHAN_MIDDLERIGHT, - AOUT_CHAN_REARLEFT, AOUT_CHAN_REARRIGHT, AOUT_CHAN_REARCENTER, - AOUT_CHAN_CENTER, AOUT_CHAN_LFE, 0 }; -static const uint32_t pi_channels_in[] = - { SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, - SPEAKER_SIDE_LEFT, SPEAKER_SIDE_RIGHT, - SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT, SPEAKER_BACK_CENTER, - SPEAKER_FRONT_CENTER, SPEAKER_LOW_FREQUENCY, 0 }; -static const uint32_t pi_channels_out[] = - { SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, - SPEAKER_FRONT_CENTER, SPEAKER_LOW_FREQUENCY, - SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT, - SPEAKER_BACK_CENTER, - SPEAKER_SIDE_LEFT, SPEAKER_SIDE_RIGHT, 0 }; - /***************************************************************************** * Open: open the audio device ***************************************************************************** diff --git a/modules/audio_output/windows_audio_common.h b/modules/audio_output/windows_audio_common.h new file mode 100644 index 0000000000..cd5e366844 --- /dev/null +++ b/modules/audio_output/windows_audio_common.h @@ -0,0 +1,149 @@ +/***************************************************************************** + * windows_common.h: Windows Audio common code + ***************************************************************************** + * Copyright (C) 2001-2009 VideoLAN + * $Id$ + * + * Authors: Gildas Bazin + * Jean-Baptiste Kempf + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + *****************************************************************************/ + +#include +#include + +/***************************************************************************** + * DirectSound GUIDs. + * Defining them here allows us to get rid of the dxguid library during + * the linking stage. + *****************************************************************************/ + +#define INITGUID /* Doesn't define the DEFINE_GUID as extern */ +#include + +#ifndef WAVE_FORMAT_IEEE_FLOAT +# define WAVE_FORMAT_IEEE_FLOAT 0x0003 +#endif + +#ifndef WAVE_FORMAT_DOLBY_AC3_SPDIF +# define WAVE_FORMAT_DOLBY_AC3_SPDIF 0x0092 +#endif + +#ifndef WAVE_FORMAT_EXTENSIBLE +#define WAVE_FORMAT_EXTENSIBLE 0xFFFE +#endif + +DEFINE_GUID( _KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, WAVE_FORMAT_IEEE_FLOAT, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 ); +DEFINE_GUID( _KSDATAFORMAT_SUBTYPE_PCM, WAVE_FORMAT_PCM, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 ); +DEFINE_GUID( _KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF, WAVE_FORMAT_DOLBY_AC3_SPDIF, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 ); + +static const GUID __KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = {WAVE_FORMAT_IEEE_FLOAT, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; +static const GUID __KSDATAFORMAT_SUBTYPE_PCM = {WAVE_FORMAT_PCM, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; +static const GUID __KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF = {WAVE_FORMAT_DOLBY_AC3_SPDIF, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; + + +#define FRAMES_NUM 8 /* Needs to be > 3 */ + +#ifndef _WAVEFORMATEXTENSIBLE_ +typedef struct { + WAVEFORMATEX Format; + union { + WORD wValidBitsPerSample; /* bits of precision */ + WORD wSamplesPerBlock; /* valid if wBitsPerSample==0 */ + WORD wReserved; /* If neither applies, set to zero. */ + } Samples; + DWORD dwChannelMask; /* which channels are */ + /* present in stream */ + GUID SubFormat; +} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; +#endif + + +#ifndef SPEAKER_FRONT_LEFT +# define SPEAKER_FRONT_LEFT 0x1 +# define SPEAKER_FRONT_RIGHT 0x2 +# define SPEAKER_FRONT_CENTER 0x4 +# define SPEAKER_LOW_FREQUENCY 0x8 +# define SPEAKER_BACK_LEFT 0x10 +# define SPEAKER_BACK_RIGHT 0x20 +# define SPEAKER_FRONT_LEFT_OF_CENTER 0x40 +# define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80 +# define SPEAKER_BACK_CENTER 0x100 +# define SPEAKER_SIDE_LEFT 0x200 +# define SPEAKER_SIDE_RIGHT 0x400 +# define SPEAKER_TOP_CENTER 0x800 +# define SPEAKER_TOP_FRONT_LEFT 0x1000 +# define SPEAKER_TOP_FRONT_CENTER 0x2000 +# define SPEAKER_TOP_FRONT_RIGHT 0x4000 +# define SPEAKER_TOP_BACK_LEFT 0x8000 +# define SPEAKER_TOP_BACK_CENTER 0x10000 +# define SPEAKER_TOP_BACK_RIGHT 0x20000 +# define SPEAKER_RESERVED 0x80000000 +#endif + +#ifndef DSSPEAKER_DSSPEAKER_DIRECTOUT +# define DSSPEAKER_DSSPEAKER_DIRECTOUT 0x00000000 +#endif +#ifndef DSSPEAKER_HEADPHONE +# define DSSPEAKER_HEADPHONE 0x00000001 +#endif +#ifndef DSSPEAKER_MONO +# define DSSPEAKER_MONO 0x00000002 +#endif +#ifndef DSSPEAKER_QUAD +# define DSSPEAKER_QUAD 0x00000003 +#endif +#ifndef DSSPEAKER_STEREO +# define DSSPEAKER_STEREO 0x00000004 +#endif +#ifndef DSSPEAKER_SURROUND +# define DSSPEAKER_SURROUND 0x00000005 +#endif +#ifndef DSSPEAKER_5POINT1 +# define DSSPEAKER_5POINT1 0x00000006 +#endif +#ifndef DSSPEAKER_7POINT1 +# define DSSPEAKER_7POINT1 0x00000007 +#endif +#ifndef DSSPEAKER_7POINT1_SURROUND +# define DSSPEAKER_7POINT1_SURROUND 0x00000008 +#endif +#ifndef DSSPEAKER_7POINT1_WIDE +# define DSSPEAKER_7POINT1_WIDE DSSPEAKER_7POINT1 +#endif + +static const uint32_t pi_channels_src[] = + { AOUT_CHAN_LEFT, AOUT_CHAN_RIGHT, + AOUT_CHAN_MIDDLELEFT, AOUT_CHAN_MIDDLERIGHT, + AOUT_CHAN_REARLEFT, AOUT_CHAN_REARRIGHT, AOUT_CHAN_REARCENTER, + AOUT_CHAN_CENTER, AOUT_CHAN_LFE, 0 }; +static const uint32_t pi_channels_in[] = + { SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, + SPEAKER_SIDE_LEFT, SPEAKER_SIDE_RIGHT, + SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT, SPEAKER_BACK_CENTER, + SPEAKER_FRONT_CENTER, SPEAKER_LOW_FREQUENCY, 0 }; +static const uint32_t pi_channels_out[] = + { SPEAKER_FRONT_LEFT, SPEAKER_FRONT_RIGHT, + SPEAKER_FRONT_CENTER, SPEAKER_LOW_FREQUENCY, + SPEAKER_BACK_LEFT, SPEAKER_BACK_RIGHT, + SPEAKER_BACK_CENTER, + SPEAKER_SIDE_LEFT, SPEAKER_SIDE_RIGHT, 0 }; + +#define FLOAT_TEXT N_("Use float32 output") +#define FLOAT_LONGTEXT N_( \ + "The option allows you to enable or disable the high-quality float32 " \ + "audio output mode (which is not well supported by some soundcards)." ) + -- 2.39.5