Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/sanear.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Marsev <alex.marsev@gmail.com>2016-02-24 12:51:48 +0300
committerAlex Marsev <alex.marsev@gmail.com>2016-02-24 13:41:27 +0300
commitf7612c7f71316f357b00e43f5a497d1d0289ffe6 (patch)
treeee9226dba4393cb679c916b2e15f0b696eac954c
parent914e5c8e4f48f7f6da8d5fb9d1afa6a55b88de49 (diff)
Add FramesToTime() helperHEADmaster
And refactor.
-rw-r--r--src/AudioDeviceEvent.cpp13
-rw-r--r--src/AudioDeviceManager.cpp6
-rw-r--r--src/AudioDevicePush.cpp4
-rw-r--r--src/AudioRenderer.cpp10
-rw-r--r--src/DspRate.cpp2
-rw-r--r--src/Utils.h12
6 files changed, 28 insertions, 19 deletions
diff --git a/src/AudioDeviceEvent.cpp b/src/AudioDeviceEvent.cpp
index 6a2cfcd..9280a0e 100644
--- a/src/AudioDeviceEvent.cpp
+++ b/src/AudioDeviceEvent.cpp
@@ -92,12 +92,12 @@ namespace SaneAudioRenderer
int64_t AudioDeviceEvent::GetEnd()
{
- return llMulDiv(m_receivedFrames, OneSecond, m_backend->waveFormat->nSamplesPerSec, 0);
+ return FramesToTimeLong(m_receivedFrames, GetRate());
}
int64_t AudioDeviceEvent::GetSilence()
{
- return llMulDiv(m_silenceFrames, OneSecond, m_backend->waveFormat->nSamplesPerSec, 0);
+ return FramesToTimeLong(m_silenceFrames, GetRate());
}
void AudioDeviceEvent::Start()
@@ -222,8 +222,7 @@ namespace SaneAudioRenderer
m_bufferFrames += m_renewSilenceFrames;
}
- m_renewPosition -= llMulDiv(m_renewSilenceFrames, OneSecond,
- m_backend->waveFormat->nSamplesPerSec, 0);
+ m_renewPosition -= FramesToTime(m_renewSilenceFrames, GetRate());
}
position = m_renewPosition;
@@ -301,16 +300,14 @@ namespace SaneAudioRenderer
DebugOut(ClassName(this), "awaiting renew");
- const uint32_t rate = m_backend->waveFormat->nSamplesPerSec;
-
int64_t currentPosition = GetPosition();
- m_renewPosition = llMulDiv(m_receivedFrames - m_bufferFrames, OneSecond, rate, 0);
+ m_renewPosition = FramesToTimeLong(m_receivedFrames - m_bufferFrames, GetRate());
try
{
int64_t renewSilence = m_renewPosition - currentPosition;
if (renewSilence > 0)
- m_renewSilenceFrames = TimeToFrames(renewSilence, rate);
+ m_renewSilenceFrames = TimeToFrames(renewSilence, GetRate());
}
catch (HRESULT)
{
diff --git a/src/AudioDeviceManager.cpp b/src/AudioDeviceManager.cpp
index 69eb544..968935b 100644
--- a/src/AudioDeviceManager.cpp
+++ b/src/AudioDeviceManager.cpp
@@ -384,7 +384,7 @@ namespace SaneAudioRenderer
if (!backend->audioClient)
return E_FAIL;
- bufferDuration = llMulDiv(bufferFrames, OneSecond, backend->waveFormat->nSamplesPerSec, 0);
+ bufferDuration = FramesToTime(bufferFrames, backend->waveFormat->nSamplesPerSec);
periodicy = bufferDuration;
// Initialize our audio client again with the right periodicity.
@@ -433,8 +433,8 @@ namespace SaneAudioRenderer
if (backend->eventMode)
flags |= AUDCLNT_STREAMFLAGS_EVENTCALLBACK;
- REFERENCE_TIME bufferDuration = llMulDiv(backend->deviceBufferSize, OneSecond,
- backend->waveFormat->nSamplesPerSec, 0);
+ REFERENCE_TIME bufferDuration = FramesToTime(backend->deviceBufferSize,
+ backend->waveFormat->nSamplesPerSec);
REFERENCE_TIME periodicy = 0;
if (backend->exclusive && backend->eventMode)
diff --git a/src/AudioDevicePush.cpp b/src/AudioDevicePush.cpp
index 87795c8..ad77491 100644
--- a/src/AudioDevicePush.cpp
+++ b/src/AudioDevicePush.cpp
@@ -79,12 +79,12 @@ namespace SaneAudioRenderer
int64_t AudioDevicePush::GetEnd()
{
- return llMulDiv(m_pushedFrames, OneSecond, m_backend->waveFormat->nSamplesPerSec, 0);
+ return FramesToTimeLong(m_pushedFrames, GetRate());
}
int64_t AudioDevicePush::GetSilence()
{
- return llMulDiv(m_silenceFrames, OneSecond, m_backend->waveFormat->nSamplesPerSec, 0);
+ return FramesToTimeLong(m_silenceFrames, GetRate());
}
void AudioDevicePush::Start()
diff --git a/src/AudioRenderer.cpp b/src/AudioRenderer.cpp
index f7a2fb6..a02361c 100644
--- a/src/AudioRenderer.cpp
+++ b/src/AudioRenderer.cpp
@@ -542,7 +542,7 @@ namespace SaneAudioRenderer
DebugOut(ClassName(this), "pushing", silenceFrames, "frames of silence");
m_device->Push(chunk, nullptr);
- m_startClockOffset -= llMulDiv(silenceFrames, OneSecond, m_device->GetRate(), 0);
+ m_startClockOffset -= FramesToTime(silenceFrames, m_device->GetRate());
jitter = EstimateSlavingJitter();
}
@@ -554,7 +554,7 @@ namespace SaneAudioRenderer
if (m_dropNextFrames > 0)
{
DebugOut(ClassName(this), "will be dropping next", m_dropNextFrames, "frames");
- m_startClockOffset += llMulDiv(m_dropNextFrames, OneSecond, m_device->GetRate(), 0);
+ m_startClockOffset += FramesToTime(m_dropNextFrames, m_device->GetRate());
jitter = EstimateSlavingJitter();
}
}
@@ -671,7 +671,7 @@ namespace SaneAudioRenderer
if (!chunk.IsEmpty())
{
- m_startClockOffset -= llMulDiv(chunk.GetFrameCount(), OneSecond, m_device->GetRate(), 0);
+ m_startClockOffset -= FramesToTime(chunk.GetFrameCount(), m_device->GetRate());
DebugOut(ClassName(this), "push", chunk.GetFrameCount() * 1000. / m_device->GetRate(),
"ms of silence to minimize re-slaving jitter");
@@ -765,7 +765,7 @@ namespace SaneAudioRenderer
{
chunk.PadHead(padFrames);
- REFERENCE_TIME paddedTime = llMulDiv(padFrames, OneSecond, m_device->GetRate(), 0);
+ REFERENCE_TIME paddedTime = FramesToTime(padFrames, m_device->GetRate());
m_myClock.OffsetAudioClock(-paddedTime);
padTime -= paddedTime;
@@ -794,7 +794,7 @@ namespace SaneAudioRenderer
{
chunk.ShrinkHead(chunk.GetFrameCount() - dropFrames);
- REFERENCE_TIME droppedTime = llMulDiv(dropFrames, OneSecond, m_device->GetRate(), 0);
+ REFERENCE_TIME droppedTime = FramesToTime(dropFrames, m_device->GetRate());
m_myClock.OffsetAudioClock(droppedTime);
dropTime -= droppedTime;
diff --git a/src/DspRate.cpp b/src/DspRate.cpp
index 8cbbbf2..b017358 100644
--- a/src/DspRate.cpp
+++ b/src/DspRate.cpp
@@ -101,7 +101,7 @@ namespace SaneAudioRenderer
uint64_t inputPosition = llMulDiv(m_variableOutputFrames, m_inputRate, m_outputRate, 0);
int64_t adjustedFrames = inputPosition + m_variableDelay - m_variableInputFrames;
- REFERENCE_TIME adjustTime = m_adjustTime - llMulDiv(adjustedFrames, OneSecond, m_inputRate, 0);
+ REFERENCE_TIME adjustTime = m_adjustTime - FramesToTimeLong(adjustedFrames, m_inputRate);
double ratio = (double)m_inputRate * 4 / (m_outputRate * (4 + (double)adjustTime / OneSecond));
diff --git a/src/Utils.h b/src/Utils.h
index 0cf6396..17f3788 100644
--- a/src/Utils.h
+++ b/src/Utils.h
@@ -21,6 +21,18 @@ namespace SaneAudioRenderer
return (size_t)(llMulDiv(time, rate, OneSecond, 0));
}
+ inline int64_t FramesToTime(size_t frames, uint32_t rate)
+ {
+ assert(rate > 0);
+ return llMulDiv(frames, OneSecond, rate, 0);
+ }
+
+ inline int64_t FramesToTimeLong(int64_t frames, uint32_t rate)
+ {
+ assert(rate > 0);
+ return llMulDiv(frames, OneSecond, rate, 0);
+ }
+
inline void ThrowIfFailed(HRESULT result)
{
if (FAILED(result))