| 
							- /*!
 - 	@file		AudioUnitSDK/AUInputElement.cpp
 - 	@copyright	© 2000-2021 Apple Inc. All rights reserved.
 - */
 - #include <AudioUnitSDK/AUBase.h>
 - 
 - namespace ausdk {
 - 
 - constexpr bool HasGoodBufferPointers(const AudioBufferList& abl, UInt32 nBytes) noexcept
 - {
 - 	const AudioBuffer* buf = abl.mBuffers;                // NOLINT
 - 	for (UInt32 i = abl.mNumberBuffers; i-- > 0; ++buf) { // NOLINT
 - 		if (buf->mData == nullptr || buf->mDataByteSize < nBytes) {
 - 			return false;
 - 		}
 - 	}
 - 	return true;
 - }
 - 
 - 
 - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 - //	AUInputElement::SetConnection
 - //
 - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 - void AUInputElement::SetConnection(const AudioUnitConnection& conn)
 - {
 - 	if (conn.sourceAudioUnit == nullptr) {
 - 		Disconnect();
 - 		return;
 - 	}
 - 
 - 	mInputType = EInputType::FromConnection;
 - 	mConnection = conn;
 - 	AllocateBuffer();
 - }
 - 
 - void AUInputElement::Disconnect()
 - {
 - 	mInputType = EInputType::NoInput;
 - 	IOBuffer().Deallocate();
 - }
 - 
 - 
 - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 - //	AUInputElement::SetInputCallback
 - //
 - //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 - void AUInputElement::SetInputCallback(AURenderCallback proc, void* refCon)
 - {
 - 	if (proc == nullptr) {
 - 		Disconnect();
 - 	} else {
 - 		mInputType = EInputType::FromCallback;
 - 		mInputProc = proc;
 - 		mInputProcRefCon = refCon;
 - 		AllocateBuffer();
 - 	}
 - }
 - 
 - OSStatus AUInputElement::SetStreamFormat(const AudioStreamBasicDescription& fmt)
 - {
 - 	const OSStatus err = AUIOElement::SetStreamFormat(fmt);
 - 	if (err == noErr) {
 - 		AllocateBuffer();
 - 	}
 - 	return err;
 - }
 - 
 - OSStatus AUInputElement::PullInput(AudioUnitRenderActionFlags& ioActionFlags,
 - 	const AudioTimeStamp& inTimeStamp, AudioUnitElement inElement, UInt32 nFrames)
 - {
 - 	if (!IsActive()) {
 - 		return kAudioUnitErr_NoConnection;
 - 	}
 - 
 - 	auto& iob = IOBuffer();
 - 
 - 	AudioBufferList& pullBuffer = (HasConnection() || !WillAllocateBuffer())
 - 									  ? iob.PrepareNullBuffer(GetStreamFormat(), nFrames)
 - 									  : iob.PrepareBuffer(GetStreamFormat(), nFrames);
 - 
 - 	return PullInputWithBufferList(ioActionFlags, inTimeStamp, inElement, nFrames, pullBuffer);
 - }
 - 
 - } // namespace ausdk
 
 
  |