Browse Source

Add enough AU bits so that auval finishes (but fails)

Signed-off-by: falkTX <falktx@falktx.com>
pull/452/head
falkTX 1 year ago
parent
commit
50acd42bff
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
1 changed files with 56 additions and 26 deletions
  1. +56
    -26
      distrho/src/DistrhoPluginAU.cpp

+ 56
- 26
distrho/src/DistrhoPluginAU.cpp View File

@@ -216,6 +216,11 @@ public:
outWritable = true;
*/
break;
case kAudioUnitProperty_MakeConnection:
DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global || inScope == kAudioUnitScope_Input, inScope, kAudioUnitErr_InvalidScope);
outDataSize = sizeof(AudioUnitConnection);
outWritable = true;
return noErr;
case kAudioUnitProperty_SampleRate:
break;
case kAudioUnitProperty_ParameterList:
@@ -253,6 +258,11 @@ public:
outDataSize = sizeof(UInt32);
outWritable = true;
return noErr;
case kAudioUnitProperty_SetRenderCallback:
DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Input, inScope, kAudioUnitErr_InvalidScope);
outDataSize = sizeof(AURenderCallbackStruct);
outWritable = true;
return noErr;
#if DISTRHO_PLUGIN_HAS_UI
case kAudioUnitProperty_CocoaUI:
outDataSize = sizeof(AudioUnitCocoaViewInfo);
@@ -395,6 +405,9 @@ public:
case kAudioUnitProperty_MaximumFramesPerSlice:
*static_cast<UInt32*>(outData) = fPlugin.getBufferSize();
return noErr;
case kAudioUnitProperty_SetRenderCallback:
// TODO
break;
#if DISTRHO_PLUGIN_HAS_UI
case kAudioUnitProperty_CocoaUI:
{
@@ -433,6 +446,9 @@ public:
*static_cast<CFPropertyListRef*>(inData);
*/
break;
case kAudioUnitProperty_MakeConnection:
// TODO
return noErr;
case kAudioUnitProperty_StreamFormat:
DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Input || inScope == kAudioUnitScope_Output, inScope, kAudioUnitErr_InvalidScope);
DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement == 0, inElement, kAudioUnitErr_InvalidElement);
@@ -463,6 +479,10 @@ public:
DISTRHO_SAFE_ASSERT_UINT_RETURN(inDataSize == sizeof(UInt32), inDataSize, kAudioUnitErr_InvalidPropertyValue);
fPlugin.setBufferSize(*static_cast<const UInt32*>(inData));
return noErr;
case kAudioUnitProperty_SetRenderCallback:
DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Input, inScope, kAudioUnitErr_InvalidScope);
// TODO
return noErr;
}

return kAudioUnitErr_InvalidProperty;
@@ -529,6 +549,18 @@ public:
return noErr;
}

OSStatus auRender(AudioUnitRenderActionFlags& ioActionFlags,
const AudioTimeStamp& inTimeStamp,
const UInt32 inBusNumber,
const UInt32 inFramesToProcess,
AudioBufferList& ioData)
{
if (inFramesToProcess > fPlugin.getBufferSize())
return kAudioUnitErr_TooManyFramesToProcess;

return noErr;
}

OSStatus auReset(const AudioUnitScope scope, const AudioUnitElement elem)
{
return noErr;
@@ -539,31 +571,6 @@ protected:
// ----------------------------------------------------------------------------------------------------------------
// ComponentBase AU dispatch

OSStatus GetParameter(const AudioUnitParameterID inParameterID,
const AudioUnitScope inScope,
const AudioUnitElement inElement,
AudioUnitParameterValue& outValue) override
{
DISTRHO_SAFE_ASSERT_INT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope);
DISTRHO_SAFE_ASSERT_UINT_RETURN(inParameterID < fParameterCount, inParameterID, kAudioUnitErr_InvalidParameter);

return fPlugin.getParameterValue(inParameterID);
}

OSStatus SetParameter(AudioUnitParameterID inParameterID,
const AudioUnitScope inScope,
const AudioUnitElement inElement,
const AudioUnitParameterValue inValue,
const UInt32 inBufferOffsetInFrames) override
{
DISTRHO_SAFE_ASSERT_INT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope);
DISTRHO_SAFE_ASSERT_UINT_RETURN(inParameterID < fParameterCount, inParameterID, kAudioUnitErr_InvalidParameter);

PluginBase::SetParameter(inParameterID, inScope, inElement, inValue, inBufferOffsetInFrames);
fPlugin.setParameterValue(inParameterID, inValue);
return noErr;
}

OSStatus Render(AudioUnitRenderActionFlags& ioActionFlags,
const AudioTimeStamp& inTimeStamp,
const UInt32 nFrames) override
@@ -705,9 +712,9 @@ struct AudioComponentPlugInInstance {
return reinterpret_cast<AudioComponentMethod>(SetParameter);
case kAudioUnitScheduleParametersSelect:
return reinterpret_cast<AudioComponentMethod>(ScheduleParameters);
/*
case kAudioUnitRenderSelect:
return reinterpret_cast<AudioComponentMethod>(Render);
/*
case kAudioUnitComplexRenderSelect:
return reinterpret_cast<AudioComponentMethod>(ComplexRender);
*/
@@ -924,6 +931,29 @@ struct AudioComponentPlugInInstance {
return self->plugin->auReset(scope, elem);
}

static OSStatus Render(AudioComponentPlugInInstance* const self,
AudioUnitRenderActionFlags* ioActionFlags,
const AudioTimeStamp* const inTimeStamp,
const UInt32 inOutputBusNumber,
const UInt32 inNumberFrames,
AudioBufferList* const ioData)
{
d_stdout("AudioComponentPlugInInstance::Render(%p, %p, %p, %u, %u, %p)",
self, ioActionFlags, inTimeStamp, inOutputBusNumber, inNumberFrames, ioData);
DISTRHO_SAFE_ASSERT_RETURN(inTimeStamp != nullptr, kAudio_ParamError);
DISTRHO_SAFE_ASSERT_RETURN(ioData != nullptr, kAudio_ParamError);

AudioUnitRenderActionFlags tmpFlags;

if (ioActionFlags == nullptr)
{
tmpFlags = 0;
ioActionFlags = &tmpFlags;
}

return self->plugin->auRender(*ioActionFlags, *inTimeStamp, inOutputBusNumber, inNumberFrames, *ioData);
}

DISTRHO_DECLARE_NON_COPYABLE(AudioComponentPlugInInstance)
};



Loading…
Cancel
Save