new automation state model, sort of working, but not really
[ardour.git] / libs / ardour / audiofilter.cc
index a26d9674bd06f1395fa09820ca304d4f2d32fbe0..a7117cf9dc1646ad87f61408dc3f2a35f8d8d7b1 100644 (file)
@@ -26,6 +26,8 @@
 #include <ardour/session.h>
 #include <ardour/audioregion.h>
 #include <ardour/audiofilter.h>
+#include <ardour/region_factory.h>
+#include <ardour/source_factory.h>
 
 #include "i18n.h"
 
@@ -33,25 +35,22 @@ using namespace ARDOUR;
 using namespace PBD;
 
 int
-AudioFilter::make_new_sources (AudioRegion& region, AudioRegion::SourceList& nsrcs)
+AudioFilter::make_new_sources (boost::shared_ptr<AudioRegion> region, SourceList& nsrcs)
 {
-       vector<string> names = region.master_source_names();
+       vector<string> 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 << string_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 SndFileSource (path, 
-                                                           Config->get_native_file_data_format(),
-                                                           Config->get_native_file_header_format(),
-                                                           session.frame_rate()));
+                       nsrcs.push_back (boost::dynamic_pointer_cast<AudioSource> (SourceFactory::createWritable (session, path, false, session.frame_rate())));
                } 
 
                catch (failed_constructor& err) {
@@ -64,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<AudioRegion> region, SourceList& nsrcs)
 {
        string region_name;
 
@@ -76,19 +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) {
-               AudioFileSource* afs = dynamic_cast<AudioFileSource*>(*si);
+       for (SourceList::iterator si = nsrcs.begin(); si != nsrcs.end(); ++si) {
+               boost::shared_ptr<AudioFileSource> afs = boost::dynamic_pointer_cast<AudioFileSource>(*si);
                if (afs) {
-                       afs->update_header (region.position(), *now, xnow);
+                       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<AudioRegion> (RegionFactory::create (nsrcs, 0, region->length(), region_name, 0, 
+                                                                                           Region::Flag (Region::WholeFile|Region::DefaultFlags))));
+       
        return 0;
 }