Temporary session-format compatibility (revert before release)

Saving the new ControlList interpolation methods (enum) breaks loading
the session in older version. The session-format version will
need to be increased.

Until then:
 * Fader automation + region gain envelope uses linear fades
 * The automation-line visible in the GUI does not match the actual fade
   (the y-axis is log/exp-scale, the fade is linear)
 * Adding new points on the line is not using the correct initial value
 * Custom changes of interpolation mode are not available

Neither of these issues is a regression.
This commit is contained in:
Robin Gareus
2017-06-21 13:55:49 +02:00
parent d85ce60158
commit 8cd8cb1650
3 changed files with 31 additions and 1 deletions

View File

@@ -1168,6 +1168,7 @@ AutomationLine::view_to_model_coord (double& x, double& y) const
void
AutomationLine::view_to_model_coord_y (double& y) const
{
#ifdef XXX_NEW_INTERPOLATON__BREAK_SESSION_FORMAT_XXX
if (alist->default_interpolation () != alist->interpolation()) {
switch (alist->interpolation()) {
case AutomationList::Linear:
@@ -1178,6 +1179,7 @@ AutomationLine::view_to_model_coord_y (double& y) const
break;
}
}
#endif
y = _desc.from_interface (y);
}
@@ -1202,6 +1204,7 @@ AutomationLine::apply_delta (double& val, double delta) const
void
AutomationLine::model_to_view_coord_y (double& y) const
{
#ifdef XXX_NEW_INTERPOLATON__BREAK_SESSION_FORMAT_XXX
if (alist->default_interpolation () != alist->interpolation()) {
switch (alist->interpolation()) {
case AutomationList::Linear:
@@ -1212,6 +1215,7 @@ AutomationLine::model_to_view_coord_y (double& y) const
break;
}
}
#endif
y = _desc.to_interface (y);
}

View File

@@ -624,7 +624,7 @@ AutomationTimeAxisView::build_display_menu ()
items.push_back (MenuElem (_("Mode"), *auto_mode_menu));
} else {
#ifdef XXX_NEW_INTERPOLATON__BREAK_SESSION_FORMAT_XXX
Menu* auto_mode_menu = manage (new Menu);
auto_mode_menu->set_name ("ArdourContextMenu");
MenuList& am_items = auto_mode_menu->items();
@@ -664,6 +664,7 @@ AutomationTimeAxisView::build_display_menu ()
delete auto_mode_menu;
auto_mode_menu = 0;
}
#endif
}
/* make sure the automation menu state is correct */

View File

@@ -211,6 +211,10 @@ AutomationList::default_interpolation () const
case GainAutomation:
case BusSendLevel:
case EnvelopeAutomation:
#ifndef XXX_NEW_INTERPOLATON__BREAK_SESSION_FORMAT_XXX
/* use old, wrong linear gain interpolation */
return ControlList::Linear;
#endif
return ControlList::Exponential;
break;
case TrimAutomation:
@@ -342,7 +346,22 @@ AutomationList::state (bool full)
root->set_property ("automation-id", EventTypeMap::instance().to_symbol(_parameter));
root->set_property ("id", id());
#ifndef XXX_NEW_INTERPOLATON__BREAK_SESSION_FORMAT_XXX
/* force new enums to existing ones in session-file */
Evoral::ControlList::InterpolationStyle is = _interpolation;
switch (is) {
case ControlList::Exponential:
case ControlList::Logarithmic:
is = ControlList::Linear;
break;
default:
break;
}
root->set_property ("interpolation-style", is);
#else
root->set_property ("interpolation-style", _interpolation);
#endif
if (full) {
/* never serialize state with Write enabled - too dangerous
@@ -512,6 +531,12 @@ AutomationList::set_state (const XMLNode& node, int version)
if (!node.get_property (X_("interpolation-style"), _interpolation)) {
_interpolation = default_interpolation ();
}
#ifndef XXX_NEW_INTERPOLATON__BREAK_SESSION_FORMAT_XXX
/* internally force logarithmic and Trim params to use Log-scale */
if (_desc.logarithmic || _parameter.type() == TrimAutomation) {
_interpolation = ControlList::Logarithmic;
}
#endif
if (node.get_property (X_("state"), _state)) {
if (_state == Write) {