From 1fa0906803cdd908145fd3f74a3f47f685857eaf Mon Sep 17 00:00:00 2001 From: Max Walley <58304135+maxwalley@users.noreply.github.com> Date: Thu, 19 Mar 2026 11:42:42 +0100 Subject: [PATCH 1/2] ZeroTimeStamp period now sticks to sample rate if it originally is set to that --- include/aspl/Device.hpp | 1 + src/Device.cpp | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/include/aspl/Device.hpp b/include/aspl/Device.hpp index 5efebf8..cd1469e 100644 --- a/include/aspl/Device.hpp +++ b/include/aspl/Device.hpp @@ -1223,6 +1223,7 @@ class Device : public Object std::atomic latency_; std::atomic safetyOffset_; std::atomic zeroTimeStampPeriod_; + const bool zeroTimeStampPeriodBasedOffSampleRate_; std::atomic nominalSampleRate_; std::atomic startCount_ = 0; diff --git a/src/Device.cpp b/src/Device.cpp index 3ac6fdb..a92b570 100644 --- a/src/Device.cpp +++ b/src/Device.cpp @@ -26,6 +26,7 @@ Device::Device(std::shared_ptr context, const DeviceParameters& p , safetyOffset_(params.SafetyOffset) , zeroTimeStampPeriod_( params_.ZeroTimeStampPeriod ? params_.ZeroTimeStampPeriod : params_.SampleRate) + , zeroTimeStampPeriodBasedOffSampleRate_(!params_.ZeroTimeStampPeriod) , nominalSampleRate_(params.SampleRate) , preferredChannelsForStereo_({1, 2}) { @@ -162,6 +163,11 @@ OSStatus Device::SetNominalSampleRateImpl(Float64 rate) { nominalSampleRate_ = rate; + if(zeroTimeStampPeriodBasedOffSampleRate_) + { + SetZeroTimeStampPeriodImpl(rate); + } + return kAudioHardwareNoError; } From 2b8d6b9be4ba94fbca58a0f6f6e4c76708f4dfb8 Mon Sep 17 00:00:00 2001 From: Max Walley <58304135+maxwalley@users.noreply.github.com> Date: Tue, 7 Apr 2026 16:12:09 +0100 Subject: [PATCH 2/2] Added virtual method for creating streams --- include/aspl/Device.hpp | 2 ++ src/Device.cpp | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/include/aspl/Device.hpp b/include/aspl/Device.hpp index cd1469e..2f41e88 100644 --- a/include/aspl/Device.hpp +++ b/include/aspl/Device.hpp @@ -1202,6 +1202,8 @@ class Device : public Object //! @} + virtual std::shared_ptr CreateStream(const StreamParameters& params); + private: // value checkers for async setters OSStatus CheckNominalSampleRate(Float64 rate) const; diff --git a/src/Device.cpp b/src/Device.cpp index a92b570..2ea19ca 100644 --- a/src/Device.cpp +++ b/src/Device.cpp @@ -506,8 +506,7 @@ std::shared_ptr Device::AddStreamAsync(Direction dir) std::shared_ptr Device::AddStreamAsync(const StreamParameters& params) { - auto stream = std::make_shared( - GetContext(), std::static_pointer_cast(shared_from_this()), params); + auto stream = CreateStream(params); AddStreamAsync(stream); @@ -1584,6 +1583,11 @@ OSStatus Device::EndIOOperation(AudioObjectID objectID, return status; } +std::shared_ptr Device::CreateStream(const StreamParameters& params) +{ + return std::make_shared(GetContext(), std::static_pointer_cast(shared_from_this()), params); +} + OSStatus Device::EndIOOperationImpl(UInt32 clientID, UInt32 operationID, UInt32 ioFrameCount,