Browse Source

Misc fixing

tags/1.9.4
falkTX 11 years ago
parent
commit
aa25446bea
4 changed files with 60 additions and 14 deletions
  1. +21
    -7
      source/backend/plugin/Lv2Plugin.cpp
  2. +3
    -0
      source/modules/lv2_rdf.hpp
  3. +23
    -3
      source/utils/CarlaLv2Utils.hpp
  4. +13
    -4
      source/utils/Lv2AtomQueue.hpp

+ 21
- 7
source/backend/plugin/Lv2Plugin.cpp View File

@@ -103,7 +103,7 @@ const uint32_t CARLA_URI_MAP_ID_TIME_FRAMES_PER_SECOND = 36;
const uint32_t CARLA_URI_MAP_ID_TIME_SPEED = 37;
const uint32_t CARLA_URI_MAP_ID_MIDI_EVENT = 38;
const uint32_t CARLA_URI_MAP_ID_PARAM_SAMPLE_RATE = 39;
const uint32_t CARLA_URI_MAP_ID_COUNT = 40;
const uint32_t CARLA_URI_MAP_ID_COUNT = 39; // FIXME later

// LV2 Feature Ids
const uint32_t kFeatureIdBufSizeBounded = 0;
@@ -1222,6 +1222,7 @@ public:

Lv2AtomQueue tmpQueue;
tmpQueue.copyAndDumpDataFromQueue(fAtomQueueOut, dumpBuf);
CARLA_SAFE_ASSERT(! tmpQueue.isEmpty());

uint32_t portIndex;
const LV2_Atom* atom;
@@ -1229,8 +1230,6 @@ public:

for (; tmpQueue.get(&atom, &portIndex);)
{
carla_stdout("OUTPUT message IN GUI REMOVED FROM BUFFER");

if (atom->type == CARLA_URI_MAP_ID_ATOM_WORKER)
{
CARLA_SAFE_ASSERT_CONTINUE(fExt.worker != nullptr && fExt.worker->work != nullptr);
@@ -1295,6 +1294,8 @@ public:
aIns = aOuts = cvIns = cvOuts = params = 0;
LinkedList<unsigned int> evIns, evOuts;

const uint32_t eventBufferSize(static_cast<uint32_t>(fLv2Options.sequenceSize));

bool forcedStereoIn, forcedStereoOut;
forcedStereoIn = forcedStereoOut = false;

@@ -1393,9 +1394,6 @@ public:
FLOAT_CLEAR(fParamBuffers, params);
}

const uint32_t eventBufferSize(MAX_DEFAULT_BUFFER_SIZE);
fLv2Options.sequenceSize = static_cast<int>(eventBufferSize);

if (const uint32_t count = static_cast<uint32_t>(evIns.count()))
{
fEventsIn.createNew(count);
@@ -4183,6 +4181,21 @@ public:
fLv2Options.maxBufferSize = static_cast<int>(pData->engine->getBufferSize());
fLv2Options.sampleRate = pData->engine->getSampleRate();

uint32_t eventBufferSize = MAX_DEFAULT_BUFFER_SIZE;

for (uint32_t j=0; j < fRdfDescriptor->PortCount; ++j)
{
const LV2_Property portTypes(fRdfDescriptor->Ports[j].Types);

if (LV2_IS_PORT_ATOM_SEQUENCE(portTypes) || LV2_IS_PORT_EVENT(portTypes) || LV2_IS_PORT_MIDI_LL(portTypes))
{
if (fRdfDescriptor->Ports[j].MinimumSize > eventBufferSize)
eventBufferSize = fRdfDescriptor->Ports[j].MinimumSize;
}
}

fLv2Options.sequenceSize = static_cast<int>(eventBufferSize);

// ---------------------------------------------------------------
// initialize features (part 1)

@@ -4271,7 +4284,8 @@ public:
fFeatures[kFeatureIdPrograms]->URI = LV2_PROGRAMS__Host;
fFeatures[kFeatureIdPrograms]->data = programsFt;

//kFeatureIdResizePort
fFeatures[kFeatureIdResizePort]->URI = LV2_RESIZE_PORT__resize;
fFeatures[kFeatureIdResizePort]->data = rsPortFt;

fFeatures[kFeatureIdRtMemPool]->URI = LV2_RTSAFE_MEMORY_POOL__Pool;
fFeatures[kFeatureIdRtMemPool]->data = rtMemPoolFt;


+ 3
- 0
source/modules/lv2_rdf.hpp View File

@@ -388,6 +388,8 @@ struct LV2_RDF_Port {
LV2_RDF_PortPoints Points;
LV2_RDF_PortUnit Unit;

uint32_t MinimumSize;

uint32_t ScalePointCount;
LV2_RDF_PortScalePoint* ScalePoints;

@@ -397,6 +399,7 @@ struct LV2_RDF_Port {
Designation(0),
Name(nullptr),
Symbol(nullptr),
MinimumSize(0),
ScalePointCount(0),
ScalePoints(nullptr) {}



+ 23
- 3
source/utils/CarlaLv2Utils.hpp View File

@@ -61,7 +61,7 @@
#include "lilv/lilvmm.hpp"
#include "sratom/sratom.h"

//#include <QtCore/QStringList>
#include <QtCore/QStringList>

// -----------------------------------------------------------------------
// Define namespaces and missing prefixes
@@ -197,6 +197,9 @@ public:
Lilv::Node value_minimum;
Lilv::Node value_maximum;

Lilv::Node rz_asLargeAs;
Lilv::Node rz_minSize;

// Port Data Types
Lilv::Node midi_event;
Lilv::Node patch_message;
@@ -312,6 +315,9 @@ public:
value_minimum (new_uri(LV2_CORE__minimum)),
value_maximum (new_uri(LV2_CORE__maximum)),

rz_asLargeAs (new_uri(LV2_RESIZE_PORT__asLargeAs)),
rz_minSize (new_uri(LV2_RESIZE_PORT__minimumSize)),

midi_event (new_uri(LV2_MIDI__MidiEvent)),
patch_message (new_uri(LV2_PATCH__Message)),
time_position (new_uri(LV2_TIME__Position)),
@@ -522,7 +528,6 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool /*fillPreset
}
}

#if 0
// -------------------------------------------------------------------
// Set Plugin UniqueID
{
@@ -549,7 +554,6 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool /*fillPreset
}
}
}
#endif

// -------------------------------------------------------------------
// Set Plugin Ports
@@ -966,6 +970,22 @@ const LV2_RDF_Descriptor* lv2_rdf_new(const LV2_URI uri, const bool /*fillPreset
}
}

// -----------------------------------------------------------
// Set Port Minimum Size
{
Lilv::Nodes minimumSizeNodes(lilvPort.get_value(lv2World.rz_minSize));

if (minimumSizeNodes.size() > 0)
{
const int minimumSize(minimumSizeNodes.get_first().as_int());

if (minimumSize > 0)
rdfPort->MinimumSize = static_cast<uint32_t>(minimumSize);
else
carla_safe_assert_int("minimumSize > 0", __FILE__, __LINE__, minimumSize);
}
}

// -----------------------------------------------------------
// Set Port Scale Points



+ 13
- 4
source/utils/Lv2AtomQueue.hpp View File

@@ -29,7 +29,8 @@ class Lv2AtomRingBufferControl : public RingBufferControlTemplate<HeapRingBuffer
{
public:
Lv2AtomRingBufferControl()
: RingBufferControlTemplate(nullptr)
: RingBufferControlTemplate(nullptr),
fIsDummy(false)
{
fBuffer.size = 0;
fBuffer.buf = nullptr;
@@ -37,8 +38,11 @@ public:

~Lv2AtomRingBufferControl()
{
if (fBuffer.buf != nullptr)
if (fBuffer.buf != nullptr && ! fIsDummy)
{
delete[] fBuffer.buf;
fBuffer.buf = nullptr;
}
}

// -------------------------------------------------------------------
@@ -47,7 +51,8 @@ public:
{
if (fBuffer.buf != nullptr)
{
delete[] fBuffer.buf;
if (! fIsDummy)
delete[] fBuffer.buf;
fBuffer.buf = nullptr;
}

@@ -71,8 +76,11 @@ public:
fBuffer.tail = rb.tail;
fBuffer.written = rb.written;
fBuffer.invalidateCommit = rb.invalidateCommit;
fIsDummy = true;

std::memcpy(dumpBuf, rb.buf, rb.size);

setRingBuffer(&fBuffer, false);
}

// -------------------------------------------------------------------
@@ -125,8 +133,9 @@ public:

private:
HeapRingBuffer fBuffer;
bool fIsDummy;

static const size_t kMaxDataSize = 2048;
static const size_t kMaxDataSize = 8192;

struct RetAtom {
LV2_Atom atom;


Loading…
Cancel
Save