#include "pbd/error.h"
+#include "i18n.h"
+
using namespace ARDOUR;
PortExportChannel::PortExportChannel ()
assert(frames <= buffer_size);
if (ports.size() == 1) {
- data = (*ports.begin())->get_audio_buffer(frames).data();
+ boost::shared_ptr<AudioPort> p = ports.begin()->lock ();
+ data = p->get_audio_buffer(frames).data();
return;
}
-
+
memset (buffer.get(), 0, frames * sizeof (Sample));
for (PortSet::const_iterator it = ports.begin(); it != ports.end(); ++it) {
- if (*it != 0) {
- Sample* port_buffer = (*it)->get_audio_buffer(frames).data();
+ boost::shared_ptr<AudioPort> p = it->lock ();
+ if (p) {
+ Sample* port_buffer = p->get_audio_buffer(frames).data();
for (uint32_t i = 0; i < frames; ++i) {
buffer[i] += (float) port_buffer[i];
{
XMLNode * port_node;
for (PortSet::const_iterator it = ports.begin(); it != ports.end(); ++it) {
- if ((port_node = node->add_child ("Port"))) {
- port_node->add_property ("name", (*it)->name());
+ boost::shared_ptr<Port> p = it->lock ();
+ if (p && (port_node = node->add_child ("Port"))) {
+ port_node->add_property ("name", p->name());
}
}
}
for (XMLNodeList::iterator it = xml_ports.begin(); it != xml_ports.end(); ++it) {
if ((prop = (*it)->property ("name"))) {
std::string const & name = prop->value();
- AudioPort * port = dynamic_cast<AudioPort *> (session.engine().get_port_by_name (name));
+ boost::shared_ptr<AudioPort> port = boost::dynamic_pointer_cast<AudioPort> (session.engine().get_port_by_name (name));
if (port) {
ports.insert (port);
} else {
}
}
-RegionExportChannelFactory::RegionExportChannelFactory (Session * session, AudioRegion const & region, AudioTrack & track, Type type) :
- region (region),
- track (track),
- type (type),
- frames_per_cycle (session->engine().frames_per_cycle ()),
- buffers_up_to_date (false),
- region_start (region.position()),
- position (region_start)
+RegionExportChannelFactory::RegionExportChannelFactory (Session * session, AudioRegion const & region, AudioTrack & track, Type type)
+ : region (region)
+ , track (track)
+ , type (type)
+ , frames_per_cycle (session->engine().samples_per_cycle ())
+ , buffers_up_to_date (false)
+ , region_start (region.position())
+ , position (region_start)
{
switch (type) {
case Raw:
mixdown_buffer.reset (new Sample [frames_per_cycle]);
gain_buffer.reset (new Sample [frames_per_cycle]);
- memset (gain_buffer.get(), 1.0, sizeof (Sample) * frames_per_cycle);
+ std::fill_n (gain_buffer.get(), frames_per_cycle, Sample (1.0));
break;
case Processed:
region.read_at (buffers.get_audio (channel).data(), mixdown_buffer.get(), gain_buffer.get(), position, frames, channel);
}
break;
- case Processed:
- track.export_stuff (buffers, position, frames);
+ case Processed:
+ track.export_stuff (buffers, position, frames, track.main_outs(), true, true);
break;
- default:
+ default:
throw ExportFailed ("Unhandled type in ExportChannelFactory::update_buffers");
}
}
void
-RouteExportChannel::create_from_route(std::list<ExportChannelPtr> & result, Route & route)
+RouteExportChannel::create_from_route(std::list<ExportChannelPtr> & result, boost::shared_ptr<Route> route)
{
- boost::shared_ptr<CapturingProcessor> processor = route.add_export_point();
+ boost::shared_ptr<CapturingProcessor> processor = route->add_export_point();
uint32_t channels = processor->input_streams().n_audio();
boost::shared_ptr<ProcessorRemover> remover (new ProcessorRemover (route, processor));
{
assert(processor);
AudioBuffer const & buffer = processor->get_capture_buffers().get_audio (channel);
- assert (frames <= (framecnt_t) buffer.size());
+#ifndef NDEBUG
+ (void) frames;
+#else
+ assert (frames <= (framecnt_t) buffer.capacity());
+#endif
data = buffer.data();
}
void
-RouteExportChannel::get_state (XMLNode * node) const
+RouteExportChannel::get_state (XMLNode *) const
{
// TODO
}
void
-RouteExportChannel::set_state (XMLNode * node, Session & session)
+RouteExportChannel::set_state (XMLNode *, Session &)
{
// TODO
}
RouteExportChannel::ProcessorRemover::~ProcessorRemover()
{
- route.remove_processor (processor);
+ route->remove_processor (processor);
}