diff options
author | Alex Marsev <alex.marsev@gmail.com> | 2015-10-12 11:38:47 +0300 |
---|---|---|
committer | Alex Marsev <alex.marsev@gmail.com> | 2015-10-12 17:28:25 +0300 |
commit | 608aebaf8385c5caf83e2a0bf166c5d732b763fc (patch) | |
tree | ec3cce2e36ac0834510d6e2fe4ae3b3b90f46e3a | |
parent | a99014d6bbadcfcc8a5b640e832371d47b9e825b (diff) |
Remember WASAPI mix format
-rw-r--r-- | src/AudioDevice.cpp | 14 | ||||
-rw-r--r-- | src/AudioDevice.h | 6 | ||||
-rw-r--r-- | src/AudioDeviceManager.cpp | 2 | ||||
-rw-r--r-- | src/AudioRenderer.cpp | 7 |
4 files changed, 9 insertions, 20 deletions
diff --git a/src/AudioDevice.cpp b/src/AudioDevice.cpp index dfe2508..2987b2c 100644 --- a/src/AudioDevice.cpp +++ b/src/AudioDevice.cpp @@ -175,20 +175,6 @@ namespace SaneAudioRenderer }
}
- SaneAudioRenderer::SharedWaveFormat AudioDevice::GetNewMixFormat()
- {
- try
- {
- WAVEFORMATEX* pFormat;
- ThrowIfFailed(m_backend->audioClient->GetMixFormat(&pFormat));
- return SharedWaveFormat(pFormat, CoTaskMemFreeDeleter());
- }
- catch (HRESULT)
- {
- return nullptr;
- }
- }
-
void AudioDevice::RealtimeFeed()
{
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
diff --git a/src/AudioDevice.h b/src/AudioDevice.h index f2f2273..86a30d9 100644 --- a/src/AudioDevice.h +++ b/src/AudioDevice.h @@ -16,6 +16,8 @@ namespace SaneAudioRenderer IAudioRenderClientPtr audioRenderClient;
IAudioClockPtr audioClock;
+ SharedWaveFormat mixFormat;
+
SharedWaveFormat waveFormat;
DspFormat dspFormat;
uint32_t bufferDuration;
@@ -53,13 +55,13 @@ namespace SaneAudioRenderer IAudioClockPtr GetClock() { return m_backend->audioClock; }
+ SharedWaveFormat GetMixFormat() const { return m_backend->mixFormat; }
+
SharedWaveFormat GetWaveFormat() const { return m_backend->waveFormat; }
DspFormat GetDspFormat() const { return m_backend->dspFormat; }
uint32_t GetBufferDuration() const { return m_backend->bufferDuration; }
REFERENCE_TIME GetStreamLatency() const { return m_backend->latency; }
- SharedWaveFormat GetNewMixFormat();
-
bool IsExclusive() const { return m_backend->exclusive; }
bool IsBitstream() const { return m_backend->bitstream; }
bool IsRealtime() const { return m_backend->realtime; }
diff --git a/src/AudioDeviceManager.cpp b/src/AudioDeviceManager.cpp index f05f907..7b4cbf1 100644 --- a/src/AudioDeviceManager.cpp +++ b/src/AudioDeviceManager.cpp @@ -202,6 +202,8 @@ namespace SaneAudioRenderer ThrowIfFailed(backend->audioClient->GetMixFormat(&pFormat));
SharedWaveFormat mixFormat(pFormat, CoTaskMemFreeDeleter());
+ backend->mixFormat = mixFormat;
+
backend->bitstream = (DspFormatFromWaveFormat(*format) == DspFormat::Unknown);
backend->ignoredSystemChannelMixer = false;
diff --git a/src/AudioRenderer.cpp b/src/AudioRenderer.cpp index eb3ae82..e2a0204 100644 --- a/src/AudioRenderer.cpp +++ b/src/AudioRenderer.cpp @@ -397,11 +397,10 @@ namespace SaneAudioRenderer BOOL crossfeedEnabled = m_settings->GetCrossfeedEnabled();
BOOL ignoreSystemChannelMixer = m_settings->GetIgnoreSystemChannelMixer();
- SharedWaveFormat newMixFormat = m_device->GetNewMixFormat();
- if (!newMixFormat)
- return;
+ SharedWaveFormat mixFormat = m_device->GetMixFormat();
+ assert(mixFormat);
- bool mixFormatIsStereo = DspMatrix::IsStereoFormat(*newMixFormat);
+ bool mixFormatIsStereo = DspMatrix::IsStereoFormat(*mixFormat);
bool inputIsStereo = DspMatrix::IsStereoFormat(*m_inputFormat);
bool outputIsStereo = DspMatrix::IsStereoFormat(*m_device->GetWaveFormat());
|