X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudiofilter.cc;h=a7117cf9dc1646ad87f61408dc3f2a35f8d8d7b1;hb=1bd4c5b3a212460eed1773f6b049d18c89625565;hp=ab4728495f6f91fb6571d2cd625cab45b239b068;hpb=8af0757b61990767f2a85e68f535a5af9976fd79;p=ardour.git diff --git a/libs/ardour/audiofilter.cc b/libs/ardour/audiofilter.cc index ab4728495f..a7117cf9dc 100644 --- a/libs/ardour/audiofilter.cc +++ b/libs/ardour/audiofilter.cc @@ -22,36 +22,39 @@ #include #include -#include +#include #include #include #include +#include +#include #include "i18n.h" using namespace ARDOUR; +using namespace PBD; int -AudioFilter::make_new_sources (AudioRegion& region, AudioRegion::SourceList& nsrcs) +AudioFilter::make_new_sources (boost::shared_ptr region, SourceList& nsrcs) { - vector names = region.master_source_names(); + vector names = region->master_source_names(); - for (uint32_t i = 0; i < region.n_channels(); ++i) { + for (uint32_t i = 0; i < region->n_channels(); ++i) { string path = session.path_from_region_name (PBD::basename_nosuffix (names[i]), string ("")); if (path.length() == 0) { - error << compose (_("audiofilter: error creating name for new audio file based on %1"), region.name()) + error << string_compose (_("audiofilter: error creating name for new audio file based on %1"), region->name()) << endmsg; return -1; } try { - nsrcs.push_back (new FileSource (path, session.frame_rate())); + nsrcs.push_back (boost::dynamic_pointer_cast (SourceFactory::createWritable (session, path, false, session.frame_rate()))); } catch (failed_constructor& err) { - error << compose (_("audiofilter: error creating new audio file %1 (%2)"), path, strerror (errno)) << endmsg; + error << string_compose (_("audiofilter: error creating new audio file %1 (%2)"), path, strerror (errno)) << endmsg; return -1; } } @@ -60,7 +63,7 @@ AudioFilter::make_new_sources (AudioRegion& region, AudioRegion::SourceList& nsr } int -AudioFilter::finish (AudioRegion& region, AudioRegion::SourceList& nsrcs) +AudioFilter::finish (boost::shared_ptr region, SourceList& nsrcs) { string region_name; @@ -72,16 +75,19 @@ AudioFilter::finish (AudioRegion& region, AudioRegion::SourceList& nsrcs) time (&xnow); now = localtime (&xnow); - for (AudioRegion::SourceList::iterator si = nsrcs.begin(); si != nsrcs.end(); ++si) { - dynamic_cast((*si))->update_header (session.transport_frame(), *now, xnow); + for (SourceList::iterator si = nsrcs.begin(); si != nsrcs.end(); ++si) { + boost::shared_ptr afs = boost::dynamic_pointer_cast(*si); + if (afs) { + afs->update_header (region->position(), *now, xnow); + } } /* create a new region */ - region_name = session.new_region_name (region.name()); + region_name = session.new_region_name (region->name()); results.clear (); - results.push_back (new AudioRegion (nsrcs, 0, region.length(), region_name, 0, - Region::Flag (Region::WholeFile|Region::DefaultFlags))); - + results.push_back (boost::dynamic_pointer_cast (RegionFactory::create (nsrcs, 0, region->length(), region_name, 0, + Region::Flag (Region::WholeFile|Region::DefaultFlags)))); + return 0; }