| 
							- /*!
 - 	@file		AudioUnitSDK/AUSilentTimeout.h
 - 	@copyright	© 2000-2021 Apple Inc. All rights reserved.
 - */
 - #ifndef AudioUnitSDK_AUSilentTimeout_h
 - #define AudioUnitSDK_AUSilentTimeout_h
 - 
 - #include <CoreFoundation/CFBase.h> // for UInt32
 - #include <algorithm>
 - 
 - namespace ausdk {
 - 
 - /*!
 - 	@class	AUSilentTimeout
 - 	@brief	Utility to assist in propagating a silence flag from signal-processing
 - 			input to output, factoring in a processing delay.
 - */
 - class AUSilentTimeout {
 - public:
 - 	AUSilentTimeout() = default;
 - 
 - 	void Process(UInt32 inFramesToProcess, UInt32 inTimeoutLimit, bool& ioSilence)
 - 	{
 - 		if (ioSilence) {
 - 			if (mResetTimer) {
 - 				mTimeoutCounter = inTimeoutLimit;
 - 				mResetTimer = false;
 - 			}
 - 
 - 			if (mTimeoutCounter > 0) {
 - 				mTimeoutCounter -= std::min(inFramesToProcess, mTimeoutCounter);
 - 				ioSilence = false;
 - 			}
 - 		} else {
 - 			// signal to reset the next time we receive silence
 - 			mResetTimer = true;
 - 		}
 - 	}
 - 
 - 	void Reset() { mResetTimer = true; }
 - 
 - private:
 - 	UInt32 mTimeoutCounter{ 0 };
 - 	bool mResetTimer{ false };
 - };
 - 
 - } // namespace ausdk
 - 
 - #endif // AudioUnitSDK_AUSilentTimeout_h
 
 
  |