diff --git a/include/aspl/Device.hpp b/include/aspl/Device.hpp index 5efebf8..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; @@ -1223,6 +1225,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..2ea19ca 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; } @@ -500,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); @@ -1578,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,