|  | /*
 * Carla Csound Plugin
 * Copyright (C) 2013-2014 Filipe Coelho <falktx@falktx.com>
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * For a full copy of the GNU General Public License see the doc/GPL.txt file.
 */
#include "CarlaPluginInternal.hpp"
#include "CarlaEngine.hpp"
//#define WANT_CSOUND 1
#ifdef WANT_CSOUND
//#include "CarlaVstUtils.hpp"
CARLA_BACKEND_START_NAMESPACE
#if 0
}
#endif
class CsoundPlugin : public CarlaPlugin
{
public:
    CsoundPlugin(CarlaEngine* const engine, const ushort id)
        : CarlaPlugin(engine, id)
    {
        carla_debug("CsoundPlugin::CsoundPlugin(%p, %i)", engine, id);
    }
    ~CsoundPlugin() override
    {
        carla_debug("CsoundPlugin::~CsoundPlugin()");
        pData->singleMutex.lock();
        pData->masterMutex.lock();
        if (pData->client != nullptr && pData->client->isActive())
            pData->client->deactivate();
    }
    // -------------------------------------------------------------------
    // Information (base)
    PluginType getType() const noexcept override
    {
        return PLUGIN_CSOUND;
    }
    void reload() override
    {
        CARLA_SAFE_ASSERT_RETURN(pData->engine != nullptr,);
        carla_debug("CsoundPlugin::reload() - start");
        bufferSizeChanged(pData->engine->getBufferSize());
        reloadPrograms(true);
        carla_debug("CsoundPlugin::reload() - end");
    }
    void process(float** const inBuffer, float** const outBuffer, const uint32_t frames) override
    {
    }
private:
    CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CsoundPlugin)
};
CARLA_BACKEND_END_NAMESPACE
#endif
// -----------------------------------------------------------------------
CARLA_BACKEND_START_NAMESPACE
CarlaPlugin* CarlaPlugin::newCsound(const Initializer& init)
{
    carla_debug("CarlaPlugin::newCsound({%p, \"%s\", \"%s\", \"%s\", " P_INT64 "})", init.engine, init.filename, init.name, init.label, init.uniqueId);
#ifdef WANT_CSOUND
    CsoundPlugin* const plugin(new CsoundPlugin(init.engine, init.id));
    //if (! plugin->init(init.filename, init.name, init.label))
    {
        delete plugin;
        return nullptr;
    }
    plugin->reload();
    if (init.engine->getProccessMode() == ENGINE_PROCESS_MODE_CONTINUOUS_RACK && ! plugin->canRunInRack())
    {
        init.engine->setLastError("Carla's rack mode can only work with Stereo VST3 plugins, sorry!");
        delete plugin;
        return nullptr;
    }
    return plugin;
#else
    init.engine->setLastError("VST3 support not available");
    return nullptr;
#endif
}
CarlaPlugin* CarlaPlugin::newFileCSD(const Initializer& init)
{
    carla_debug("CarlaPlugin::newFileCSD({%p, \"%s\", \"%s\", \"%s\"})", init.engine, init.filename, init.name, init.label);
    return newCsound(init);
}
CARLA_BACKEND_END_NAMESPACE
// -----------------------------------------------------------------------
 |