X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudio_playlist.cc;h=4f95bbdc8a08f4b2bb54800c1798be3b56c70f08;hb=e24ca13394da73f2cf5f3ffa99b0fc0c8dacaff9;hp=b008e4ff980793073435cf8e992ceb002e5b342f;hpb=2292e33ee418070c4d12971a72e01eb29dfc8de9;p=ardour.git diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc index b008e4ff98..4f95bbdc8a 100644 --- a/libs/ardour/audio_playlist.cc +++ b/libs/ardour/audio_playlist.cc @@ -28,7 +28,7 @@ #include "ardour/region_sorters.h" #include "ardour/session.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace ARDOUR; using namespace std; @@ -38,7 +38,7 @@ AudioPlaylist::AudioPlaylist (Session& session, const XMLNode& node, bool hidden : Playlist (session, node, DataType::AUDIO, hidden) { #ifndef NDEBUG - const XMLProperty* prop = node.property("type"); + XMLProperty const * prop = node.property("type"); assert(!prop || DataType(prop->value()) == DataType::AUDIO); #endif @@ -152,7 +152,7 @@ struct ReadSorter { /** A segment of region that needs to be read */ struct Segment { Segment (boost::shared_ptr r, Evoral::Range a) : region (r), range (a) {} - + boost::shared_ptr region; ///< the region Evoral::Range range; ///< range of the region to read, in session frames }; @@ -164,8 +164,8 @@ ARDOUR::framecnt_t AudioPlaylist::read (Sample *buf, Sample *mixdown_buffer, float *gain_buffer, framepos_t start, framecnt_t cnt, unsigned chan_n) { - DEBUG_TRACE (DEBUG::AudioPlayback, string_compose ("Playlist %1 read @ %2 for %3, channel %4, regions %5\n", - name(), start, cnt, chan_n, regions.size())); + DEBUG_TRACE (DEBUG::AudioPlayback, string_compose ("Playlist %1 read @ %2 for %3, channel %4, regions %5 mixdown @ %6 gain @ %7\n", + name(), start, cnt, chan_n, regions.size(), mixdown_buffer, gain_buffer)); /* optimizing this memset() away involves a lot of conditionals that may well cause more of a hit due to cache misses @@ -335,6 +335,11 @@ AudioPlaylist::region_changed (const PropertyChange& what_changed, boost::shared return false; } + PropertyChange bounds; + bounds.add (Properties::start); + bounds.add (Properties::position); + bounds.add (Properties::length); + PropertyChange our_interests; our_interests.add (Properties::fade_in_active); @@ -348,8 +353,8 @@ AudioPlaylist::region_changed (const PropertyChange& what_changed, boost::shared bool parent_wants_notify; parent_wants_notify = Playlist::region_changed (what_changed, region); - - if (parent_wants_notify || (what_changed.contains (our_interests))) { + /* if bounds changed, we have already done notify_contents_changed ()*/ + if ((parent_wants_notify || what_changed.contains (our_interests)) && !what_changed.contains (bounds)) { notify_contents_changed (); } @@ -487,13 +492,13 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version) for (XMLNodeConstIterator i = children.begin(); i != children.end(); ++i) { if ((*i)->name() == X_("Crossfade")) { - XMLProperty* p = (*i)->property (X_("active")); + XMLProperty const * p = (*i)->property (X_("active")); assert (p); - if (!string_is_affirmative (p->value())) { + if (!string_to (p->value())) { continue; } - + if ((p = (*i)->property (X_("in"))) == 0) { continue; } @@ -502,7 +507,7 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version) if (!in) { warning << string_compose (_("Legacy crossfade involved an incoming region not present in playlist \"%1\" - crossfade discarded"), - name()) + name()) << endmsg; continue; } @@ -518,7 +523,7 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version) if (!out) { warning << string_compose (_("Legacy crossfade involved an outgoing region not present in playlist \"%1\" - crossfade discarded"), - name()) + name()) << endmsg; continue; } @@ -533,11 +538,11 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version) if (in->layer() <= out->layer()) { /* incoming region is below the outgoing one, - * so apply a fade out to the outgoing one + * so apply a fade out to the outgoing one */ const XMLNodeList c = (*i)->children (); - + for (XMLNodeConstIterator j = c.begin(); j != c.end(); ++j) { if ((*j)->name() == X_("FadeOut")) { out_a->fade_out()->set_state (**j, version); @@ -545,7 +550,7 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version) out_a->inverse_fade_out()->set_state (**j, version); } } - + out_a->set_fade_out_active (true); } else { @@ -555,7 +560,7 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version) */ const XMLNodeList c = (*i)->children (); - + for (XMLNodeConstIterator j = c.begin(); j != c.end(); ++j) { if ((*j)->name() == X_("FadeIn")) { in_a->fade_in()->set_state (**j, version); @@ -563,7 +568,7 @@ AudioPlaylist::load_legacy_crossfades (const XMLNode& node, int version) in_a->inverse_fade_in()->set_state (**j, version); } } - + in_a->set_fade_in_active (true); } }