initial pass at session-renaming functionality
[ardour.git] / libs / ardour / rb_effect.cc
index 4cb77d1c5822862e2ca95ea8d712075c02f8d5ba..bc040709f4fbd3a76f9fe6283c22797650dc144f 100644 (file)
@@ -60,7 +60,7 @@ RBEffect::~RBEffect ()
 }
 
 int
-RBEffect::run (boost::shared_ptr<Region> r)
+RBEffect::run (boost::shared_ptr<Region> r, Progress*)
 {
        boost::shared_ptr<AudioRegion> region = boost::dynamic_pointer_cast<AudioRegion> (r);
 
@@ -70,16 +70,17 @@ RBEffect::run (boost::shared_ptr<Region> r)
        }
 
        SourceList nsrcs;
-       nframes_t done;
+       framecnt_t done;
        int ret = -1;
-       const nframes_t bufsize = 256;
+       const framecnt_t bufsize = 256;
        gain_t* gain_buffer = 0;
        Sample** buffers = 0;
        char suffix[32];
        string new_name;
        string::size_type at;
-       nframes_t pos = 0;
-       int avail = 0;
+       framepos_t pos = 0;
+       framecnt_t avail = 0;
+       boost::shared_ptr<AudioRegion> result;
 
        cerr << "RBEffect: source region: position = " << region->position()
             << ", start = " << region->start()
@@ -147,11 +148,11 @@ RBEffect::run (boost::shared_ptr<Region> r)
        double stretch = region->stretch() * tsr.time_fraction;
        double shift = region->shift() * tsr.pitch_fraction;
 
-       nframes_t read_start = region->ancestral_start() +
-               nframes_t(region->start() / (double)region->stretch());
+       framecnt_t read_start = region->ancestral_start() +
+               framecnt_t(region->start() / (double)region->stretch());
 
-       nframes_t read_duration =
-               nframes_t(region->length() / (double)region->stretch());
+       framecnt_t read_duration =
+               framecnt_t(region->length() / (double)region->stretch());
 
        uint32_t channels = region->n_channels();
 
@@ -205,16 +206,16 @@ RBEffect::run (boost::shared_ptr<Region> r)
        try {
                while (pos < read_duration && !tsr.cancel) {
 
-                       nframes_t this_read = 0;
+                       framecnt_t this_read = 0;
 
                        for (uint32_t i = 0; i < channels; ++i) {
 
                                this_read = 0;
 
-                               nframes_t this_time;
+                               framepos_t this_time;
                                this_time = min(bufsize, read_duration - pos);
 
-                               nframes_t this_position;
+                               framepos_t this_position;
                                this_position = read_start + pos -
                                        region->start() + region->position();
 
@@ -247,15 +248,15 @@ RBEffect::run (boost::shared_ptr<Region> r)
 
                while (pos < read_duration && !tsr.cancel) {
 
-                       nframes_t this_read = 0;
+                       framecnt_t this_read = 0;
 
                        for (uint32_t i = 0; i < channels; ++i) {
 
                                this_read = 0;
-                               nframes_t this_time;
+                               framepos_t this_time;
                                this_time = min(bufsize, read_duration - pos);
 
-                               nframes_t this_position;
+                               framepos_t this_position;
                                this_position = read_start + pos -
                                        region->start() + region->position();
 
@@ -282,11 +283,11 @@ RBEffect::run (boost::shared_ptr<Region> r)
 
                        stretcher.process(buffers, this_read, pos == read_duration);
 
-                       int avail = 0;
+                       framecnt_t avail = 0;
 
                        while ((avail = stretcher.available()) > 0) {
 
-                               this_read = min(bufsize, uint32_t(avail));
+                               this_read = min (bufsize, avail);
 
                                stretcher.retrieve(buffers, this_read);
 
@@ -307,7 +308,7 @@ RBEffect::run (boost::shared_ptr<Region> r)
 
                while ((avail = stretcher.available()) >= 0) {
 
-                       uint32_t this_read = min(bufsize, uint32_t(avail));
+                       framecnt_t this_read = min (bufsize, avail);
 
                        stretcher.retrieve(buffers, this_read);
 
@@ -354,7 +355,16 @@ RBEffect::run (boost::shared_ptr<Region> r)
                                          stretch,
                                          shift);
                (*x)->set_master_sources (region->master_sources());
-               (*x)->set_length( (*x)->length() * stretch, this);
+               (*x)->set_length( (*x)->length() * stretch);
+       }
+
+       /* stretch region gain envelope */
+       /* XXX: assuming we've only processed one input region into one result here */
+
+       if (tsr.time_fraction != 1) {
+               result = boost::dynamic_pointer_cast<AudioRegion> (results.front());
+               assert (result);
+               result->envelope()->x_scale (tsr.time_fraction);
        }
 
   out: