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:44:53 +0300
committerAlex Marsev <alex.marsev@gmail.com>2016-02-24 13:14:36 +0300
commit914e5c8e4f48f7f6da8d5fb9d1afa6a55b88de49 (patch)
tree4a905c77d5bb5f476c88b980c2bd31c75a9db369
parentd54e5c262e39672e8156b377a86e0df6ec432ed0 (diff)
Add TimeToFrames() helper
And refactor.
-rw-r--r--src/AudioDeviceEvent.cpp2
-rw-r--r--src/AudioRenderer.cpp12
-rw-r--r--src/Utils.h6
3 files changed, 13 insertions, 7 deletions
diff --git a/src/AudioDeviceEvent.cpp b/src/AudioDeviceEvent.cpp
index 2058701..6a2cfcd 100644
--- a/src/AudioDeviceEvent.cpp
+++ b/src/AudioDeviceEvent.cpp
@@ -310,7 +310,7 @@ namespace SaneAudioRenderer
{
int64_t renewSilence = m_renewPosition - currentPosition;
if (renewSilence > 0)
- m_renewSilenceFrames = (size_t)llMulDiv(renewSilence, rate, OneSecond, 0);
+ m_renewSilenceFrames = TimeToFrames(renewSilence, rate);
}
catch (HRESULT)
{
diff --git a/src/AudioRenderer.cpp b/src/AudioRenderer.cpp
index a6e1fd9..f7a2fb6 100644
--- a/src/AudioRenderer.cpp
+++ b/src/AudioRenderer.cpp
@@ -549,7 +549,7 @@ namespace SaneAudioRenderer
if (!m_bitstreaming && jitter < 0)
{
- m_dropNextFrames = (size_t)llMulDiv(-jitter, m_device->GetRate(), OneSecond, 0);
+ m_dropNextFrames = TimeToFrames(-jitter, m_device->GetRate());
if (m_dropNextFrames > 0)
{
@@ -667,7 +667,7 @@ namespace SaneAudioRenderer
jitter = std::min(jitter, llMulDiv(m_device->GetBufferDuration(), OneSecond, 1000, 0));
DspChunk chunk(m_device->GetDspFormat(), m_device->GetChannelCount(),
- (size_t)llMulDiv(jitter, m_device->GetRate(), OneSecond, 0), m_device->GetRate());
+ TimeToFrames(jitter, m_device->GetRate()), m_device->GetRate());
if (!chunk.IsEmpty())
{
@@ -723,7 +723,7 @@ namespace SaneAudioRenderer
// Rate matching.
if (remaining > latency) // x2.0
{
- size_t dropFrames = (size_t)llMulDiv(m_device->GetRate(), remaining - latency * 3 / 4, OneSecond, 0); // x1.5
+ size_t dropFrames = TimeToFrames(remaining - latency * 3 / 4, m_device->GetRate()); // x1.5
dropFrames = std::min(dropFrames, chunk.GetFrameCount());
@@ -733,7 +733,7 @@ namespace SaneAudioRenderer
}
else if (remaining < latency / 2) // x1.0
{
- size_t padFrames = (size_t)llMulDiv(m_device->GetRate(), latency * 3 / 4 - remaining, OneSecond, 0); // x1.5
+ size_t padFrames = TimeToFrames(latency * 3 / 4 - remaining, m_device->GetRate()); // x1.5
chunk.PadHead(padFrames);
@@ -759,7 +759,7 @@ namespace SaneAudioRenderer
REFERENCE_TIME padTime = myTime - graphTime;
assert(padTime >= 0);
- size_t padFrames = (size_t)llMulDiv(m_device->GetRate(), padTime, OneSecond, 0);
+ size_t padFrames = TimeToFrames(padTime, m_device->GetRate());
if (padFrames > m_device->GetRate() / 33) // ~30ms threshold
{
@@ -786,7 +786,7 @@ namespace SaneAudioRenderer
REFERENCE_TIME dropTime = std::min(graphTime - myTime, remaining - latency);
assert(dropTime >= 0);
- size_t dropFrames = (size_t)llMulDiv(m_device->GetRate(), dropTime, OneSecond, 0);
+ size_t dropFrames = TimeToFrames(dropTime, m_device->GetRate());
dropFrames = std::min(dropFrames, chunk.GetFrameCount());
diff --git a/src/Utils.h b/src/Utils.h
index 466fc04..0cf6396 100644
--- a/src/Utils.h
+++ b/src/Utils.h
@@ -15,6 +15,12 @@ namespace SaneAudioRenderer
typedef std::shared_ptr<const WAVEFORMATEX> SharedWaveFormat;
+ inline size_t TimeToFrames(int64_t time, uint32_t rate)
+ {
+ assert(rate > 0);
+ return (size_t)(llMulDiv(time, rate, OneSecond, 0));
+ }
+
inline void ThrowIfFailed(HRESULT result)
{
if (FAILED(result))