diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-04-18 22:40:22 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-04-20 22:11:33 +0200 |
| commit | fdb36750a09e3bba3d10fe5102e39a62eda68ea6 (patch) | |
| tree | f65fea53ea0638faca28d2840759ea40b9901557 /src/lib | |
| parent | 040889631af47829e8523742bb828788e8f7e138 (diff) | |
Add button to use same fades for audio as video (#2230).
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/audio_content.cc | 35 | ||||
| -rw-r--r-- | src/lib/audio_content.h | 14 |
2 files changed, 40 insertions, 9 deletions
diff --git a/src/lib/audio_content.cc b/src/lib/audio_content.cc index ad8d7df0f..5098e8489 100644 --- a/src/lib/audio_content.cc +++ b/src/lib/audio_content.cc @@ -26,6 +26,7 @@ #include "film.h" #include "frame_rate_change.h" #include "maths_util.h" +#include "video_content.h" #include <dcp/raw_convert.h> #include <libcxml/cxml.h> #include <libxml++/libxml++.h> @@ -55,6 +56,7 @@ int const AudioContentProperty::GAIN = 201; int const AudioContentProperty::DELAY = 202; int const AudioContentProperty::FADE_IN = 203; int const AudioContentProperty::FADE_OUT = 204; +int const AudioContentProperty::USE_SAME_FADES_AS_VIDEO = 205; AudioContent::AudioContent (Content* parent) @@ -94,6 +96,7 @@ AudioContent::AudioContent (Content* parent, cxml::ConstNodePtr node) _delay = node->number_child<int> ("AudioDelay"); _fade_in = ContentTime(node->optional_number_child<ContentTime::Type>("AudioFadeIn").get_value_or(0)); _fade_out = ContentTime(node->optional_number_child<ContentTime::Type>("AudioFadeOut").get_value_or(0)); + _use_same_fades_as_video = node->optional_bool_child("AudioUseSameFadesAsVideo").get_value_or(false); /* Backwards compatibility */ auto r = node->optional_number_child<double>("AudioVideoFrameRate"); @@ -133,6 +136,7 @@ AudioContent::as_xml (xmlpp::Node* node) const node->add_child("AudioDelay")->add_child_text(raw_convert<string>(_delay)); node->add_child("AudioFadeIn")->add_child_text(raw_convert<string>(_fade_in.get())); node->add_child("AudioFadeOut")->add_child_text(raw_convert<string>(_fade_out.get())); + node->add_child("AudioUseSameFadesAsVideo")->add_child_text(_use_same_fades_as_video ? "1" : "0"); } @@ -428,6 +432,30 @@ AudioContent::modify_trim_start (ContentTime& trim) const } +ContentTime +AudioContent::fade_in () const +{ + boost::mutex::scoped_lock lm (_mutex); + if (_use_same_fades_as_video && _parent->video) { + return dcpomatic::ContentTime::from_frames(_parent->video->fade_in(), _parent->video_frame_rate().get_value_or(24)); + } + + return _fade_in; +} + + +ContentTime +AudioContent::fade_out () const +{ + boost::mutex::scoped_lock lm (_mutex); + if (_use_same_fades_as_video && _parent->video) { + return dcpomatic::ContentTime::from_frames(_parent->video->fade_out(), _parent->video_frame_rate().get_value_or(24)); + } + + return _fade_out; +} + + void AudioContent::set_fade_in (ContentTime t) { @@ -442,6 +470,13 @@ AudioContent::set_fade_out (ContentTime t) } +void +AudioContent::set_use_same_fades_as_video (bool s) +{ + maybe_set (_use_same_fades_as_video, s, AudioContentProperty::USE_SAME_FADES_AS_VIDEO); +} + + vector<float> AudioContent::fade (AudioStreamPtr stream, Frame frame, Frame length, int frame_rate) const { diff --git a/src/lib/audio_content.h b/src/lib/audio_content.h index ba998a5ad..82a9de041 100644 --- a/src/lib/audio_content.h +++ b/src/lib/audio_content.h @@ -44,6 +44,7 @@ public: static int const DELAY; static int const FADE_IN; static int const FADE_OUT; + static int const USE_SAME_FADES_AS_VIDEO; }; @@ -78,18 +79,12 @@ public: return _delay; } - dcpomatic::ContentTime fade_in () const { - boost::mutex::scoped_lock lm (_mutex); - return _fade_in; - } - - dcpomatic::ContentTime fade_out () const { - boost::mutex::scoped_lock lm (_mutex); - return _fade_out; - } + dcpomatic::ContentTime fade_in () const; + dcpomatic::ContentTime fade_out () const; void set_fade_in (dcpomatic::ContentTime time); void set_fade_out (dcpomatic::ContentTime time); + void set_use_same_fades_as_video (bool s); std::string processing_description (std::shared_ptr<const Film> film) const; @@ -125,6 +120,7 @@ private: int _delay = 0; dcpomatic::ContentTime _fade_in; dcpomatic::ContentTime _fade_out; + bool _use_same_fades_as_video = false; std::vector<AudioStreamPtr> _streams; }; |
