turn off relevant fade in/out before creating peakfiles for compound region sources
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 26 May 2011 13:56:19 +0000 (13:56 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 26 May 2011 13:56:19 +0000 (13:56 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@9596 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/audioplaylist.h
libs/ardour/ardour/playlist.h
libs/ardour/audio_playlist.cc
libs/ardour/playlist.cc

index a8426b5f51ec8d4e255e1d651bdf30e71269ff33..a0da35877762cd8dbf9958491169bd7de0dfe133 100644 (file)
@@ -106,7 +106,8 @@ public:
         void remove_dependents (boost::shared_ptr<Region> region);
        void copy_dependents (const std::vector<TwoRegions>&, boost::shared_ptr<Playlist>);
 
-       void pre_combine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>);
+       void pre_combine (std::vector<boost::shared_ptr<Region> >&);
+       void post_combine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>);
        void pre_uncombine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>);
 
     private:
index 69f49633597586e332fe88819d98d7f5b198c451..7635d004bcbd6883322131d4fa967e11f5021424 100644 (file)
@@ -390,7 +390,13 @@ public:
            framepos_t start;
        };
 
-       virtual void pre_combine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>) {}
+       /* this is called before we create a new compound region */
+       virtual void pre_combine (std::vector<boost::shared_ptr<Region> >&) {}
+       /* this is called before we create a new compound region */
+       virtual void post_combine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>) {}
+       /* this is called before we remove a compound region and replace it
+          with its constituent regions
+       */
        virtual void pre_uncombine (std::vector<boost::shared_ptr<Region> >&, boost::shared_ptr<Region>) {}
 };
 
index 06eca9fb92120cf02eb3ad029c6fe205fa95bde8..59c791b8fbd797fa5c7d3585d969ec512752007b 100644 (file)
@@ -1083,10 +1083,31 @@ AudioPlaylist::copy_dependents (const vector<TwoRegions>& old_and_new, boost::sh
 }
 
 void
-AudioPlaylist::pre_combine (vector<boost::shared_ptr<Region> >& originals, boost::shared_ptr<Region> compound_region)
+AudioPlaylist::pre_combine (vector<boost::shared_ptr<Region> >& copies)
 {
-       /* sort the originals into time order */
+       RegionSortByPosition cmp;
+       boost::shared_ptr<AudioRegion> ar;
+
+       sort (copies.begin(), copies.end(), cmp);
+
+       ar = boost::dynamic_pointer_cast<AudioRegion> (copies.front());
+
+       /* copy the fade in of the first into the compound region */
+
+       if (ar) {
+               ar->set_fade_in_active (false);
+       }
 
+       ar = boost::dynamic_pointer_cast<AudioRegion> (copies.back());
+
+       if (ar) {
+               ar->set_fade_out_active (false);
+       }
+}
+
+void
+AudioPlaylist::post_combine (vector<boost::shared_ptr<Region> >& originals, boost::shared_ptr<Region> compound_region)
+{
        RegionSortByPosition cmp;
        boost::shared_ptr<AudioRegion> ar;
        boost::shared_ptr<AudioRegion> cr;
@@ -1103,9 +1124,6 @@ AudioPlaylist::pre_combine (vector<boost::shared_ptr<Region> >& originals, boost
 
        if (ar) {
                cr->set_fade_in (ar->fade_in());
-               
-               /* disable the fade in of the first */
-               
                ar->set_fade_in_active (false);
        }
 
@@ -1114,7 +1132,6 @@ AudioPlaylist::pre_combine (vector<boost::shared_ptr<Region> >& originals, boost
        if (ar) {
                /* copy the fade out of the last into the compound region */
                cr->set_fade_out (ar->fade_out());
-               /* disable the fade out of the first */
                ar->set_fade_out_active (false);
        }
 }
index 814278f0e52c28c91f108c8ec93f7b52936cc923..3f7eb1852db9d3b8c7655fbe9f6e130a1eddc901 100644 (file)
@@ -3071,6 +3071,7 @@ Playlist::combine (const RegionList& r)
        framepos_t earliest_position = max_framepos;
        vector<TwoRegions> old_and_new_regions;
        vector<boost::shared_ptr<Region> > originals;
+       vector<boost::shared_ptr<Region> > copies;
        string parent_name;
        string child_name;
        uint32_t max_level = 0;
@@ -3105,6 +3106,7 @@ Playlist::combine (const RegionList& r)
 
                old_and_new_regions.push_back (TwoRegions (original_region,copied_region));
                originals.push_back (original_region);
+               copies.push_back (copied_region);
 
                RegionFactory::add_compound_association (original_region, copied_region);
 
@@ -3123,6 +3125,8 @@ Playlist::combine (const RegionList& r)
 
        pl->in_partition = false;
 
+       pre_combine (copies);
+
        /* now create a new PlaylistSource for each channel in the new playlist */
 
        SourceList sources;
@@ -3131,6 +3135,7 @@ Playlist::combine (const RegionList& r)
        for (uint32_t chn = 0; chn < channels; ++chn) {
                sources.push_back (SourceFactory::createFromPlaylist (_type, _session, pl, parent_name, chn, 0, extent.second, false, false));
        }
+
        
        /* now a new whole-file region using the list of sources */
 
@@ -3169,8 +3174,8 @@ Playlist::combine (const RegionList& r)
        /* do type-specific stuff with the originals and the new compound
           region 
        */
-
-       pre_combine (originals, compound_region);
+       
+       post_combine (originals, compound_region);
 
        /* add the new region at the right location */