215 _INFOLOG(
"INIT - " + sLibraryPath +
" - " + sPluginLabel );
217 Logger::CrashContext ctx( QString(
"Initialising LADSPA plugin " ) + sLibraryPath +
" - " + sPluginLabel);
219 pFX->
m_pLibrary =
new QLibrary( sLibraryPath );
220 LADSPA_Descriptor_Function desc_func = ( LADSPA_Descriptor_Function )pFX->
m_pLibrary->resolve(
"ladspa_descriptor" );
221 if ( desc_func ==
nullptr ) {
222 _ERRORLOG(
"Error loading the library. (" + sLibraryPath +
")" );
227 for (
unsigned i = 0; ( pFX->
m_d = desc_func( i ) ) !=
nullptr; i++ ) {
228 QString sName = QString::fromLocal8Bit(pFX->
m_d->Name);
229 QString sLabel = QString::fromLocal8Bit(pFX->
m_d->Label);
231 if ( sLabel != sPluginLabel ) {
236 for (
unsigned j = 0; j < pFX->
m_d->PortCount; j++ ) {
237 LADSPA_PortDescriptor pd = pFX->
m_d->PortDescriptors[j];
238 if ( LADSPA_IS_PORT_INPUT( pd ) && LADSPA_IS_PORT_CONTROL( pd ) ) {
240 }
else if ( LADSPA_IS_PORT_INPUT( pd ) && LADSPA_IS_PORT_AUDIO( pd ) ) {
242 }
else if ( LADSPA_IS_PORT_OUTPUT( pd ) && LADSPA_IS_PORT_CONTROL( pd ) ) {
244 }
else if ( LADSPA_IS_PORT_OUTPUT( pd ) && LADSPA_IS_PORT_AUDIO( pd ) ) {
271 for (
unsigned nPort = 0; nPort < pFX->
m_d->PortCount; nPort++ ) {
272 LADSPA_PortDescriptor pd = pFX->
m_d->PortDescriptors[ nPort ];
275 QString sName = QString::fromLocal8Bit(pFX->
m_d->PortNames[ nPort ]);
278 float fDefault = 0.0;
279 bool isToggle =
false;
280 bool isInteger =
false;
282 LADSPA_PortRangeHint rangeHints = pFX->
m_d->PortRangeHints[ nPort ];
283 if ( LADSPA_IS_HINT_BOUNDED_BELOW( rangeHints.HintDescriptor ) ) {
284 fMin = ( pFX->
m_d->PortRangeHints[ nPort ] ).LowerBound;
286 if ( LADSPA_IS_HINT_BOUNDED_ABOVE( rangeHints.HintDescriptor ) ) {
287 fMax = ( pFX->
m_d->PortRangeHints[ nPort ] ).UpperBound;
289 if ( LADSPA_IS_HINT_TOGGLED( rangeHints.HintDescriptor ) ) {
297 if ( LADSPA_IS_HINT_SAMPLE_RATE( rangeHints.HintDescriptor ) ) {
298 _WARNINGLOG(
"samplerate hint not implemented yet" );
300 if ( LADSPA_IS_HINT_LOGARITHMIC( rangeHints.HintDescriptor ) ) {
301 _WARNINGLOG(
"logarithmic hint not implemented yet" );
303 if ( LADSPA_IS_HINT_INTEGER( rangeHints.HintDescriptor ) ) {
306 if ( LADSPA_IS_HINT_HAS_DEFAULT( rangeHints.HintDescriptor ) ) {
307 if ( LADSPA_IS_HINT_DEFAULT_MINIMUM( rangeHints.HintDescriptor ) ) {
310 if ( LADSPA_IS_HINT_DEFAULT_LOW( rangeHints.HintDescriptor ) ) {
312 fDefault = ( fMin * 0.75 + fMax * 0.25 );
314 if ( LADSPA_IS_HINT_DEFAULT_MIDDLE( rangeHints.HintDescriptor ) ) {
315 fDefault = ( fMax - fMin ) / 2.0;
317 if ( LADSPA_IS_HINT_DEFAULT_HIGH( rangeHints.HintDescriptor ) ) {
319 fDefault = ( fMin * 0.25 + fMax * 0.75 );
321 if ( LADSPA_IS_HINT_DEFAULT_MAXIMUM( rangeHints.HintDescriptor ) ) {
324 if ( LADSPA_IS_HINT_DEFAULT_0( rangeHints.HintDescriptor ) ) {
327 if ( LADSPA_IS_HINT_DEFAULT_1( rangeHints.HintDescriptor ) ) {
330 if ( LADSPA_IS_HINT_DEFAULT_100( rangeHints.HintDescriptor ) ) {
333 if ( LADSPA_IS_HINT_DEFAULT_440( rangeHints.HintDescriptor ) ) {
339 pControl->
sName = sName;
347 _INFOLOG( QString(
"Input control port\t[%1]\tmin=%2,\tmax=%3,\tcontrolValue=%4" ).arg( sName ).arg( fMin ).arg( fMax ).arg( pControl->
fControlValue ) );
352 QString sName = QString::fromLocal8Bit(pFX->
m_d->PortNames[ nPort ]);
355 float fDefault = 0.0;
357 LADSPA_PortRangeHint rangeHints = pFX->
m_d->PortRangeHints[ nPort ];
358 if ( LADSPA_IS_HINT_BOUNDED_BELOW( rangeHints.HintDescriptor ) ) {
359 fMin = ( pFX->
m_d->PortRangeHints[ nPort ] ).LowerBound;
361 if ( LADSPA_IS_HINT_BOUNDED_ABOVE( rangeHints.HintDescriptor ) ) {
362 fMax = ( pFX->
m_d->PortRangeHints[ nPort ] ).UpperBound;
372 fDefault = ( fMax - fMin ) / 2.0;
375 pControl->
sName = sName;
Helper class to preserve and restore recursive crash context strings using an RAAI pattern.