diff -NubBr -x'*.a' -x'*.exe' -x'*.o' -xconfigure.log -xconfig.mak -x.cvsignore -x'*.ini' -xconfig.h -xcodecs.conf.h -xversion.h main/libao2/ao_win32.c sherpya/libao2/ao_win32.c --- main/libao2/ao_win32.c 2004-04-08 00:27:33.000000000 +0200 +++ sherpya/libao2/ao_win32.c 2004-06-17 17:59:28.937980800 +0200 @@ -33,7 +33,7 @@ #define SAMPLESIZE 1024 #define BUFFER_SIZE 4096 #define BUFFER_COUNT 16 - +#define WAVE_FORMAT_DOLBY_AC3_SPDIF 0x0092 static WAVEHDR* waveBlocks; //pointer to our ringbuffer memory static HWAVEOUT hWaveOut; //handle to the waveout device @@ -121,13 +121,24 @@ //fill waveformatex ZeroMemory( &wformat, sizeof(WAVEFORMATEX)); wformat.cbSize = 0; /* size of _extra_ info */ + wformat.nSamplesPerSec = rate; + wformat.nAvgBytesPerSec = wformat.nSamplesPerSec * wformat.nBlockAlign; + + /* Ac3 pass-through */ + if (format == AFMT_AC3) + { + wformat.wFormatTag = WAVE_FORMAT_DOLBY_AC3_SPDIF; + wformat.nChannels = 2; + wformat.wBitsPerSample = 16; + wformat.nBlockAlign = 4; + } + else + { wformat.wFormatTag = WAVE_FORMAT_PCM; wformat.nChannels = channels; - wformat.nSamplesPerSec = rate; wformat.wBitsPerSample = audio_out_format_bits(format); wformat.nBlockAlign = wformat.nChannels * (wformat.wBitsPerSample >> 3); - wformat.nAvgBytesPerSec = wformat.nSamplesPerSec * wformat.nBlockAlign; - + } //open sound device //WAVE_MAPPER always points to the default wave device on the system result = waveOutOpen(&hWaveOut,WAVE_MAPPER,&wformat,(DWORD_PTR)waveOutProc,0,CALLBACK_FUNCTION);