style: unify identifier naming per updated conventions

Automated with clang-tidy readability-identifier-naming (config added to
.clang-tidy) plus scripted passes, per the updated rules now documented
in CONTRIBUTING.md:

- types (class/struct/enum/alias/template params): PascalCase
- functions, variables, members: snake_case (incl. rational -> Rational)
- private/protected members: trailing underscore; static member
  variables likewise (instance_, available_themes_)
- constants and enum values: snake_case (kLinear -> k_linear,
  F32P -> f32p); ALL_CAPS reserved for macros
- macros: OAK_ prefix (OLIVE_ADD_TEST/OLIVE_ASSERT/OLIVE_CONFIG ->
  OAK_ADD_TEST/OAK_ASSERT/OAK_CONFIG, GL_PREAMBLE -> OAK_GL_PREAMBLE,
  include guards -> OAK_*)
- file names: all lowercase (Current/Plugin/OliveHost/OliveClip/
  OlivePluginInstance -> current/plugin/olivehost/oliveclip/
  oliveplugininstance)
- getters share the member name sans underscore, setters set_foo()
- Qt and third-party (OpenFX) virtual overrides and framework callbacks
  keep their original names (exempt in .clang-tidy)

Manual follow-ups required where automation could not reach:
- string-based QMetaObject/SIGNAL/SLOT references updated to renamed
  methods (AddTask, CreatedFile, DeleteSpecificFile, moveSelectionUp, ...)
- macro bodies referencing renamed methods (OLIVE_CONFIG,
  NODE_DEFAULT_DESTRUCTOR, MANAGEDDISPLAYWIDGET_*)
- self-shadowing locals renamed where signals/methods became same-named
  (size_changed, worker_count, selected_items, import param, filters)
- third_party OFX member/namespace usages restored (OFX::Host::*,
  _created, _clipPrefsDirty, createInstance, clearPersistentMessage)
- STL protocol aliases restored (const_iterator) with .clang-tidy
  ignore rules; qHash overloads restored

Full build and test suite pass: ctest 4/4, ~1960 gtest cases green.
This commit is contained in:
2026-07-19 16:10:54 +08:00
parent cb1718a103
commit bb40b4923e
1014 changed files with 44257 additions and 44220 deletions
+35 -35
View File
@@ -31,39 +31,39 @@ namespace olive
#define super Node
const QString Block::kLengthInput = QStringLiteral("length_in");
const QString Block::k_length_input = QStringLiteral("length_in");
Block::Block()
: previous_(nullptr)
, next_(nullptr)
, track_(nullptr)
{
AddInput(kLengthInput, NodeValue::kRational,
InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable |
kInputFlagHidden));
SetInputProperty(kLengthInput, QStringLiteral("min"),
QVariant::fromValue(rational(0, 1)));
SetInputProperty(kLengthInput, QStringLiteral("view"),
RationalSlider::kTime);
SetInputProperty(kLengthInput, QStringLiteral("viewlock"), true);
add_input(k_length_input, NodeValue::k_rational,
InputFlags(k_input_flag_not_connectable | k_input_flag_not_keyframable |
k_input_flag_hidden));
set_input_property(k_length_input, QStringLiteral("min"),
QVariant::fromValue(Rational(0, 1)));
set_input_property(k_length_input, QStringLiteral("view"),
RationalSlider::k_time);
set_input_property(k_length_input, QStringLiteral("viewlock"), true);
SetInputFlag(kEnabledInput, kInputFlagNotConnectable);
SetInputFlag(kEnabledInput, kInputFlagNotKeyframable);
set_input_flag(k_enabled_input, k_input_flag_not_connectable);
set_input_flag(k_enabled_input, k_input_flag_not_keyframable);
SetFlag(kDontShowInParamView);
set_flag(k_dont_show_in_param_view);
}
QVector<Node::CategoryID> Block::Category() const
QVector<Node::CategoryID> Block::category() const
{
return { kCategoryTimeline };
return { k_category_timeline };
}
rational Block::length() const
Rational Block::length() const
{
return GetStandardValue(kLengthInput).value<rational>();
return get_standard_value(k_length_input).value<Rational>();
}
void Block::set_length_and_media_out(const rational &length)
void Block::set_length_and_media_out(const Rational &length)
{
if (length == this->length()) {
return;
@@ -72,7 +72,7 @@ void Block::set_length_and_media_out(const rational &length)
set_length_internal(length);
}
void Block::set_length_and_media_in(const rational &length)
void Block::set_length_and_media_in(const Rational &length)
{
if (length == this->length()) {
return;
@@ -84,50 +84,50 @@ void Block::set_length_and_media_in(const rational &length)
bool Block::is_enabled() const
{
return GetStandardValue(kEnabledInput).toBool();
return get_standard_value(k_enabled_input).toBool();
}
void Block::set_enabled(bool e)
{
SetStandardValue(kEnabledInput, e);
set_standard_value(k_enabled_input, e);
emit EnabledChanged();
emit enabled_changed();
}
void Block::InputValueChangedEvent(const QString &input, int element)
{
super::InputValueChangedEvent(input, element);
if (input == kLengthInput) {
emit LengthChanged();
} else if (input == kEnabledInput) {
emit EnabledChanged();
if (input == k_length_input) {
emit length_changed();
} else if (input == k_enabled_input) {
emit enabled_changed();
}
}
void Block::set_length_internal(const rational &length)
void Block::set_length_internal(const Rational &length)
{
SetStandardValue(kLengthInput, QVariant::fromValue(length));
set_standard_value(k_length_input, QVariant::fromValue(length));
}
void Block::Retranslate()
void Block::retranslate()
{
super::Retranslate();
super::retranslate();
SetInputName(kLengthInput, tr("Length"));
SetInputName(kEnabledInput, tr("Enabled"));
set_input_name(k_length_input, tr("Length"));
set_input_name(k_enabled_input, tr("Enabled"));
}
void Block::InvalidateCache(const TimeRange &range, const QString &from,
void Block::invalidate_cache(const TimeRange &range, const QString &from,
int element, InvalidateCacheOptions options)
{
TimeRange r;
if (from == kLengthInput) {
if (from == k_length_input) {
// We must intercept the signal here
r = TimeRange(qMin(length(), last_length_), RATIONAL_MAX);
if (!NodeInputDragger::IsInputBeingDragged()) {
if (!NodeInputDragger::is_input_being_dragged()) {
last_length_ = length();
}
@@ -136,7 +136,7 @@ void Block::InvalidateCache(const TimeRange &range, const QString &from,
r = range;
}
super::InvalidateCache(r, from, element, options);
super::invalidate_cache(r, from, element, options);
}
void Block::set_previous_next(Block *previous, Block *next)
+23 -23
View File
@@ -19,8 +19,8 @@
***/
#ifndef BLOCK_H
#define BLOCK_H
#ifndef OAK_BLOCK_H
#define OAK_BLOCK_H
#include "node/node.h"
#include "timeline/timelinecommon.h"
@@ -38,31 +38,31 @@ class Block : public Node {
public:
Block();
virtual QVector<CategoryID> Category() const override;
virtual QVector<CategoryID> category() const override;
const rational &in() const
const Rational &in() const
{
return in_point_;
}
const rational &out() const
const Rational &out() const
{
return out_point_;
}
void set_in(const rational &in)
void set_in(const Rational &in)
{
in_point_ = in;
}
void set_out(const rational &out)
void set_out(const Rational &out)
{
out_point_ = out;
}
rational length() const;
virtual void set_length_and_media_out(const rational &length);
virtual void set_length_and_media_in(const rational &length);
Rational length() const;
virtual void set_length_and_media_out(const Rational &length);
virtual void set_length_and_media_in(const Rational &length);
TimeRange range() const
{
@@ -97,32 +97,32 @@ public:
void set_track(Track *track)
{
track_ = track;
emit TrackChanged(track_);
emit track_changed(track_);
}
bool is_enabled() const;
void set_enabled(bool e);
virtual void Retranslate() override;
virtual void retranslate() override;
virtual void InvalidateCache(
virtual void invalidate_cache(
const TimeRange &range, const QString &from, int element = -1,
InvalidateCacheOptions options = InvalidateCacheOptions()) override;
static const QString kLengthInput;
static const QString k_length_input;
static void set_previous_next(Block *previous, Block *next);
public slots:
signals:
void EnabledChanged();
void enabled_changed();
void LengthChanged();
void length_changed();
void PreviewChanged();
void preview_changed();
void TrackChanged(Track *track);
void track_changed(Track *track);
protected:
virtual void InputValueChangedEvent(const QString &input,
@@ -132,15 +132,15 @@ protected:
Block *next_;
private:
void set_length_internal(const rational &length);
void set_length_internal(const Rational &length);
rational in_point_;
rational out_point_;
Rational in_point_;
Rational out_point_;
Track *track_;
rational last_length_;
Rational last_length_;
};
}
#endif // BLOCK_H
#endif // OAK_BLOCK_H
+226 -226
View File
@@ -34,59 +34,59 @@ namespace olive
#define super Block
const QString ClipBlock::kBufferIn = QStringLiteral("buffer_in");
const QString ClipBlock::kMediaInInput = QStringLiteral("media_in_in");
const QString ClipBlock::kSpeedInput = QStringLiteral("speed_in");
const QString ClipBlock::kReverseInput = QStringLiteral("reverse_in");
const QString ClipBlock::kMaintainAudioPitchInput =
const QString ClipBlock::k_buffer_in = QStringLiteral("buffer_in");
const QString ClipBlock::k_media_in_input = QStringLiteral("media_in_in");
const QString ClipBlock::k_speed_input = QStringLiteral("speed_in");
const QString ClipBlock::k_reverse_input = QStringLiteral("reverse_in");
const QString ClipBlock::k_maintain_audio_pitch_input =
QStringLiteral("maintain_audio_pitch_in");
const QString ClipBlock::kAutoCacheInput = QStringLiteral("autocache_in");
const QString ClipBlock::kLoopModeInput = QStringLiteral("loop_in");
const QString ClipBlock::k_auto_cache_input = QStringLiteral("autocache_in");
const QString ClipBlock::k_loop_mode_input = QStringLiteral("loop_in");
ClipBlock::ClipBlock()
: in_transition_(nullptr)
, out_transition_(nullptr)
, connected_viewer_(nullptr)
{
AddInput(kMediaInInput, NodeValue::kRational,
InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable));
SetInputProperty(kMediaInInput, QStringLiteral("view"),
RationalSlider::kTime);
SetInputProperty(kMediaInInput, QStringLiteral("viewlock"), true);
add_input(k_media_in_input, NodeValue::k_rational,
InputFlags(k_input_flag_not_connectable | k_input_flag_not_keyframable));
set_input_property(k_media_in_input, QStringLiteral("view"),
RationalSlider::k_time);
set_input_property(k_media_in_input, QStringLiteral("viewlock"), true);
AddInput(kSpeedInput, NodeValue::kFloat, 1.0,
InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable));
SetInputProperty(kSpeedInput, QStringLiteral("view"),
FloatSlider::kPercentage);
SetInputProperty(kSpeedInput, QStringLiteral("min"), 0.0);
add_input(k_speed_input, NodeValue::k_float, 1.0,
InputFlags(k_input_flag_not_connectable | k_input_flag_not_keyframable));
set_input_property(k_speed_input, QStringLiteral("view"),
FloatSlider::k_percentage);
set_input_property(k_speed_input, QStringLiteral("min"), 0.0);
AddInput(kReverseInput, NodeValue::kBoolean, false,
InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable));
add_input(k_reverse_input, NodeValue::k_boolean, false,
InputFlags(k_input_flag_not_connectable | k_input_flag_not_keyframable));
AddInput(kMaintainAudioPitchInput, NodeValue::kBoolean, false,
InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable));
add_input(k_maintain_audio_pitch_input, NodeValue::k_boolean, false,
InputFlags(k_input_flag_not_connectable | k_input_flag_not_keyframable));
AddInput(kAutoCacheInput, NodeValue::kBoolean, false,
InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable));
add_input(k_auto_cache_input, NodeValue::k_boolean, false,
InputFlags(k_input_flag_not_connectable | k_input_flag_not_keyframable));
PrependInput(kBufferIn, NodeValue::kNone,
InputFlags(kInputFlagNotKeyframable));
prepend_input(k_buffer_in, NodeValue::k_none,
InputFlags(k_input_flag_not_keyframable));
//SetValueHintForInput(kBufferIn, ValueHint(NodeValue::kBuffer));
SetEffectInput(kBufferIn);
set_effect_input(k_buffer_in);
AddInput(kLoopModeInput, NodeValue::kCombo, 0,
InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable));
add_input(k_loop_mode_input, NodeValue::k_combo, 0,
InputFlags(k_input_flag_not_connectable | k_input_flag_not_keyframable));
}
QString ClipBlock::Name() const
QString ClipBlock::name() const
{
if (connected_viewer_ && !connected_viewer_->GetLabel().isEmpty()) {
return connected_viewer_->GetLabel();
if (connected_viewer_ && !connected_viewer_->get_label().isEmpty()) {
return connected_viewer_->get_label();
} else if (track()) {
if (track()->type() == Track::kVideo) {
if (track()->type() == Track::k_video) {
return tr("Video Clip");
} else if (track()->type() == Track::kAudio) {
} else if (track()->type() == Track::k_audio) {
return tr("Audio Clip");
}
}
@@ -99,12 +99,12 @@ QString ClipBlock::id() const
return QStringLiteral("org.olivevideoeditor.Olive.clip");
}
QString ClipBlock::Description() const
QString ClipBlock::description() const
{
return tr("A time-based node that represents a media source.");
}
void ClipBlock::set_length_and_media_out(const rational &length)
void ClipBlock::set_length_and_media_out(const Rational &length)
{
if (length == this->length()) {
return;
@@ -112,39 +112,39 @@ void ClipBlock::set_length_and_media_out(const rational &length)
if (reverse()) {
// Calculate media_in adjustment
rational proposed_media_in = SequenceToMediaTime(
this->length() - length, kSTMIgnoreReverse | kSTMIgnoreLoop);
Rational proposed_media_in = sequence_to_media_time(
this->length() - length, k_stm_ignore_reverse | k_stm_ignore_loop);
set_media_in(proposed_media_in);
}
super::set_length_and_media_out(length);
}
void ClipBlock::set_length_and_media_in(const rational &length)
void ClipBlock::set_length_and_media_in(const Rational &length)
{
if (length == this->length()) {
return;
}
rational old_length = this->length();
Rational old_length = this->length();
super::set_length_and_media_in(length);
if (!reverse()) {
// Calculate media_in adjustment
set_media_in(SequenceToMediaTime(old_length - length, kSTMIgnoreLoop));
set_media_in(sequence_to_media_time(old_length - length, k_stm_ignore_loop));
}
}
rational ClipBlock::media_in() const
Rational ClipBlock::media_in() const
{
return GetStandardValue(kMediaInInput).value<rational>();
return get_standard_value(k_media_in_input).value<Rational>();
}
Node::ValueHint ClipBlock::GetValueHintForInput(const QString &input,
Node::ValueHint ClipBlock::get_value_hint_for_input(const QString &input,
int element) const
{
if (input == kBufferIn) {
if (input == k_buffer_in) {
// The buffer input takes whatever the connected node provides, so it
// is declared as kNone and carries no stored hint. When the connected
// node pushes more than one value type (a footage pushes both a
@@ -152,46 +152,46 @@ Node::ValueHint ClipBlock::GetValueHintForInput(const QString &input,
// the last value in the table, which may feed audio samples into a
// video clip and produce a black frame. Prefer the value type that
// matches this clip's track.
switch (GetTrackType()) {
case Track::kVideo:
return ValueHint(QVector<NodeValue::Type>{ NodeValue::kTexture });
case Track::kAudio:
return ValueHint(QVector<NodeValue::Type>{ NodeValue::kSamples });
switch (get_track_type()) {
case Track::k_video:
return ValueHint(QVector<NodeValue::Type>{ NodeValue::k_texture });
case Track::k_audio:
return ValueHint(QVector<NodeValue::Type>{ NodeValue::k_samples });
default:
break;
}
}
return super::GetValueHintForInput(input, element);
return super::get_value_hint_for_input(input, element);
}
void ClipBlock::set_media_in(const rational &media_in)
void ClipBlock::set_media_in(const Rational &media_in)
{
SetStandardValue(kMediaInInput, QVariant::fromValue(media_in));
set_standard_value(k_media_in_input, QVariant::fromValue(media_in));
RequestInvalidatedFromConnected();
request_invalidated_from_connected();
}
void ClipBlock::SetAutocache(bool e)
void ClipBlock::set_autocache(bool e)
{
SetStandardValue(kAutoCacheInput, e);
set_standard_value(k_auto_cache_input, e);
}
void ClipBlock::DiscardCache()
void ClipBlock::discard_cache()
{
if (Node *connected = GetConnectedOutput(kBufferIn)) {
Track::Type type = GetTrackType();
if (type == Track::kVideo) {
connected->video_frame_cache()->Invalidate(
if (Node *connected = get_connected_output(k_buffer_in)) {
Track::Type type = get_track_type();
if (type == Track::k_video) {
connected->video_frame_cache()->invalidate(
TimeRange(RATIONAL_MIN, RATIONAL_MAX));
} else if (type == Track::kAudio) {
connected->audio_playback_cache()->Invalidate(
} else if (type == Track::k_audio) {
connected->audio_playback_cache()->invalidate(
TimeRange(RATIONAL_MIN, RATIONAL_MAX));
}
}
}
rational ClipBlock::SequenceToMediaTime(const rational &sequence_time,
Rational ClipBlock::sequence_to_media_time(const Rational &sequence_time,
uint64_t flags) const
{
// These constants are not considered "values" per se, so we don't modify them
@@ -199,13 +199,13 @@ rational ClipBlock::SequenceToMediaTime(const rational &sequence_time,
return sequence_time;
}
rational media_time = sequence_time;
Rational media_time = sequence_time;
if (reverse() && !(flags & kSTMIgnoreReverse)) {
if (reverse() && !(flags & k_stm_ignore_reverse)) {
media_time = length() - media_time;
}
if (!(flags & kSTMIgnoreSpeed)) {
if (!(flags & k_stm_ignore_speed)) {
double speed_value = speed();
if (qIsNull(speed_value)) {
// Effectively holds the frame at the in point
@@ -213,7 +213,7 @@ rational ClipBlock::SequenceToMediaTime(const rational &sequence_time,
} else if (!qFuzzyCompare(speed_value, 1.0)) {
// Multiply time
media_time =
rational::fromDouble(media_time.toDouble() * speed_value);
Rational::from_double(media_time.to_double() * speed_value);
}
}
@@ -232,21 +232,21 @@ rational ClipBlock::SequenceToMediaTime(const rational &sequence_time,
media_time -= connected_viewer_->GetLength();
}
} else if (loop_mode() == kLoopModeClamp) {
media_time = std::clamp(media_time, rational(0), connected_viewer_->GetLength()-connected_viewer_->GetVideoParams().frame_rate_as_time_base());
media_time = std::clamp(media_time, Rational(0), connected_viewer_->GetLength()-connected_viewer_->GetVideoParams().frame_rate_as_time_base());
}
}*/
return media_time;
}
rational ClipBlock::MediaToSequenceTime(const rational &media_time) const
Rational ClipBlock::media_to_sequence_time(const Rational &media_time) const
{
// These constants are not considered "values" per se, so we don't modify them
if (media_time == RATIONAL_MIN || media_time == RATIONAL_MAX) {
return media_time;
}
rational sequence_time = media_time - media_in();
Rational sequence_time = media_time - media_in();
double speed_value = speed();
if (qIsNull(speed_value)) {
@@ -255,7 +255,7 @@ rational ClipBlock::MediaToSequenceTime(const rational &media_time) const
} else if (!qFuzzyCompare(speed_value, 1.0)) {
// Divide time
sequence_time =
rational::fromDouble(sequence_time.toDouble() / speed_value);
Rational::from_double(sequence_time.to_double() / speed_value);
}
if (reverse()) {
@@ -265,80 +265,80 @@ rational ClipBlock::MediaToSequenceTime(const rational &media_time) const
return sequence_time;
}
void ClipBlock::RequestRangeFromConnected(const TimeRange &range)
void ClipBlock::request_range_from_connected(const TimeRange &range)
{
Track::Type type = GetTrackType();
Track::Type type = get_track_type();
if (type == Track::kVideo || type == Track::kAudio) {
if (Node *connected = GetConnectedOutput(kBufferIn)) {
if (type == Track::k_video || type == Track::k_audio) {
if (Node *connected = get_connected_output(k_buffer_in)) {
TimeRange max_range = media_range();
if (type == Track::kVideo) {
if (type == Track::k_video) {
// Handle thumbnails
RequestRangeForCache(connected->thumbnail_cache(), max_range,
request_range_for_cache(connected->thumbnail_cache(), max_range,
range, true, false);
{
TimeRange thumb_range = range.Intersected(max_range);
if (GetAdjustedThumbnailRange(&thumb_range)) {
connected->thumbnail_cache()->Request(
TimeRange thumb_range = range.intersected(max_range);
if (get_adjusted_thumbnail_range(&thumb_range)) {
connected->thumbnail_cache()->request(
this->track()->sequence(), thumb_range);
}
}
// Handle video cache
RequestRangeForCache(connected->video_frame_cache(), max_range,
range, true, IsAutocaching());
} else if (type == Track::kAudio) {
request_range_for_cache(connected->video_frame_cache(), max_range,
range, true, is_autocaching());
} else if (type == Track::k_audio) {
// Handle waveforms
RequestRangeForCache(
request_range_for_cache(
connected->waveform_cache(), max_range, range, true,
(OLIVE_CONFIG("TimelineWaveformMode").toInt() ==
Timeline::kWaveformsEnabled));
(OAK_CONFIG("TimelineWaveformMode").toInt() ==
Timeline::k_waveforms_enabled));
// Handle audio cache
RequestRangeForCache(connected->audio_playback_cache(),
max_range, range, true, IsAutocaching());
request_range_for_cache(connected->audio_playback_cache(),
max_range, range, true, is_autocaching());
}
}
}
}
void ClipBlock::RequestInvalidatedFromConnected(bool force_all,
void ClipBlock::request_invalidated_from_connected(bool force_all,
const TimeRange &intersect)
{
Track::Type type = GetTrackType();
Track::Type type = get_track_type();
if (type == Track::kVideo || type == Track::kAudio) {
if (Node *connected = GetConnectedOutput(kBufferIn)) {
if (type == Track::k_video || type == Track::k_audio) {
if (Node *connected = get_connected_output(k_buffer_in)) {
TimeRange max_range = media_range();
if (!intersect.length().isNull()) {
max_range = max_range.Intersected(intersect);
max_range = max_range.intersected(intersect);
}
if (type == Track::kVideo) {
if (type == Track::k_video) {
// Handle thumbnails
TimeRange thumb_range = max_range;
if (GetAdjustedThumbnailRange(&thumb_range)) {
RequestInvalidatedForCache(connected->thumbnail_cache(),
if (get_adjusted_thumbnail_range(&thumb_range)) {
request_invalidated_for_cache(connected->thumbnail_cache(),
thumb_range);
}
// Handle video cache
if (IsAutocaching() || force_all) {
RequestInvalidatedForCache(connected->video_frame_cache(),
if (is_autocaching() || force_all) {
request_invalidated_for_cache(connected->video_frame_cache(),
max_range);
}
} else if (type == Track::kAudio) {
} else if (type == Track::k_audio) {
// Handle waveforms
if (OLIVE_CONFIG("TimelineWaveformMode").toInt() ==
Timeline::kWaveformsEnabled) {
RequestInvalidatedForCache(connected->waveform_cache(),
if (OAK_CONFIG("TimelineWaveformMode").toInt() ==
Timeline::k_waveforms_enabled) {
request_invalidated_for_cache(connected->waveform_cache(),
max_range);
}
// Handle audio cache
if (IsAutocaching() || force_all) {
RequestInvalidatedForCache(
if (is_autocaching() || force_all) {
request_invalidated_for_cache(
connected->audio_playback_cache(), max_range);
}
}
@@ -346,56 +346,56 @@ void ClipBlock::RequestInvalidatedFromConnected(bool force_all,
}
}
void ClipBlock::RequestRangeForCache(PlaybackCache *cache,
void ClipBlock::request_range_for_cache(PlaybackCache *cache,
const TimeRange &max_range,
const TimeRange &range, bool invalidate,
bool request)
{
TimeRange r = range.Intersected(max_range);
TimeRange r = range.intersected(max_range);
if (invalidate) {
cache->Invalidate(r);
cache->invalidate(r);
}
if (request) {
cache->Request(this->track()->sequence(), r);
cache->request(this->track()->sequence(), r);
}
}
void ClipBlock::RequestInvalidatedForCache(PlaybackCache *cache,
void ClipBlock::request_invalidated_for_cache(PlaybackCache *cache,
const TimeRange &max_range)
{
TimeRangeList invalid = cache->GetInvalidatedRanges(max_range);
TimeRangeList invalid = cache->get_invalidated_ranges(max_range);
for (const PlaybackCache::Passthrough &p : cache->GetPassthroughs()) {
for (const PlaybackCache::Passthrough &p : cache->get_passthroughs()) {
invalid.remove(p);
}
for (const TimeRange &r : invalid) {
RequestRangeForCache(cache, max_range, r, false, true);
request_range_for_cache(cache, max_range, r, false, true);
}
}
bool ClipBlock::GetAdjustedThumbnailRange(TimeRange *r) const
bool ClipBlock::get_adjusted_thumbnail_range(TimeRange *r) const
{
switch (static_cast<Timeline::ThumbnailMode>(
OLIVE_CONFIG("TimelineThumbnailMode").toInt())) {
case Timeline::kThumbnailOff:
OAK_CONFIG("TimelineThumbnailMode").toInt())) {
case Timeline::k_thumbnail_off:
// Don't cache any range
return false;
case Timeline::kThumbnailInOut: {
case Timeline::k_thumbnail_in_out: {
// Only cache in point
rational in = this->media_range().in();
if (r->Contains(in)) {
Rational in = this->media_range().in();
if (r->contains(in)) {
// Cache only the in point
*r = TimeRange(in, in + thumbnail_cache()->GetTimebase());
*r = TimeRange(in, in + thumbnail_cache()->get_timebase());
return true;
} else {
// Cache nothing
return false;
}
}
case Timeline::kThumbnailOn:
case Timeline::k_thumbnail_on:
// Cache entire range
return true;
}
@@ -404,16 +404,16 @@ bool ClipBlock::GetAdjustedThumbnailRange(TimeRange *r) const
return true;
}
void ClipBlock::InvalidateCache(const TimeRange &range, const QString &from,
void ClipBlock::invalidate_cache(const TimeRange &range, const QString &from,
int element, InvalidateCacheOptions options)
{
Q_UNUSED(element)
// If signal is from texture input, transform all times from media time to sequence time
if (from == kBufferIn) {
if (from == k_buffer_in) {
// Render caches where necessary
if (AreCachesEnabled()) {
RequestRangeFromConnected(range);
if (are_caches_enabled()) {
request_range_from_connected(range);
}
// Adjust range from media time to sequence time
@@ -424,48 +424,48 @@ void ClipBlock::InvalidateCache(const TimeRange &range, const QString &from,
// Handle 0 speed by invalidating the whole clip
adj = TimeRange(RATIONAL_MIN, RATIONAL_MAX);
} else {
adj = TimeRange(MediaToSequenceTime(range.in()),
MediaToSequenceTime(range.out()));
adj = TimeRange(media_to_sequence_time(range.in()),
media_to_sequence_time(range.out()));
}
// Find connected viewer node
auto viewers = FindInputNodesConnectedToInput<ViewerOutput>(
NodeInput(this, kBufferIn), 1);
auto viewers = find_input_nodes_connected_to_input<ViewerOutput>(
NodeInput(this, k_buffer_in), 1);
ViewerOutput *new_connected_viewer =
viewers.isEmpty() ? nullptr : viewers.first();
if (new_connected_viewer != connected_viewer_) {
if (connected_viewer_) {
disconnect(connected_viewer_->GetMarkers(),
&TimelineMarkerList::MarkerAdded, this,
&ClipBlock::PreviewChanged);
disconnect(connected_viewer_->GetMarkers(),
&TimelineMarkerList::MarkerRemoved, this,
&ClipBlock::PreviewChanged);
disconnect(connected_viewer_->GetMarkers(),
&TimelineMarkerList::MarkerModified, this,
&ClipBlock::PreviewChanged);
disconnect(connected_viewer_->get_markers(),
&TimelineMarkerList::marker_added, this,
&ClipBlock::preview_changed);
disconnect(connected_viewer_->get_markers(),
&TimelineMarkerList::marker_removed, this,
&ClipBlock::preview_changed);
disconnect(connected_viewer_->get_markers(),
&TimelineMarkerList::marker_modified, this,
&ClipBlock::preview_changed);
}
connected_viewer_ = new_connected_viewer;
if (connected_viewer_) {
connect(connected_viewer_->GetMarkers(),
&TimelineMarkerList::MarkerAdded, this,
&ClipBlock::PreviewChanged);
connect(connected_viewer_->GetMarkers(),
&TimelineMarkerList::MarkerRemoved, this,
&ClipBlock::PreviewChanged);
connect(connected_viewer_->GetMarkers(),
&TimelineMarkerList::MarkerModified, this,
&ClipBlock::PreviewChanged);
connect(connected_viewer_->get_markers(),
&TimelineMarkerList::marker_added, this,
&ClipBlock::preview_changed);
connect(connected_viewer_->get_markers(),
&TimelineMarkerList::marker_removed, this,
&ClipBlock::preview_changed);
connect(connected_viewer_->get_markers(),
&TimelineMarkerList::marker_modified, this,
&ClipBlock::preview_changed);
}
}
super::InvalidateCache(adj, from, element, options);
super::invalidate_cache(adj, from, element, options);
} else {
// Otherwise, pass signal along normally
super::InvalidateCache(range, from, element, options);
super::invalidate_cache(range, from, element, options);
}
}
@@ -487,23 +487,23 @@ void ClipBlock::InputConnectedEvent(const QString &input, int element,
{
super::InputConnectedEvent(input, element, output);
if (input == kBufferIn) {
connect(output->thumbnail_cache(), &FrameHashCache::Invalidated, this,
&Block::PreviewChanged);
connect(output->waveform_cache(), &AudioPlaybackCache::Invalidated,
this, &Block::PreviewChanged);
connect(output->video_frame_cache(), &FrameHashCache::Invalidated, this,
&Block::PreviewChanged);
if (input == k_buffer_in) {
connect(output->thumbnail_cache(), &FrameHashCache::invalidated, this,
&Block::preview_changed);
connect(output->waveform_cache(), &AudioPlaybackCache::invalidated,
this, &Block::preview_changed);
connect(output->video_frame_cache(), &FrameHashCache::invalidated, this,
&Block::preview_changed);
connect(output->audio_playback_cache(),
&AudioPlaybackCache::Invalidated, this, &Block::PreviewChanged);
connect(output->thumbnail_cache(), &FrameHashCache::Validated, this,
&Block::PreviewChanged);
connect(output->waveform_cache(), &AudioPlaybackCache::Validated, this,
&Block::PreviewChanged);
connect(output->video_frame_cache(), &FrameHashCache::Validated, this,
&Block::PreviewChanged);
connect(output->audio_playback_cache(), &AudioPlaybackCache::Validated,
this, &Block::PreviewChanged);
&AudioPlaybackCache::invalidated, this, &Block::preview_changed);
connect(output->thumbnail_cache(), &FrameHashCache::validated, this,
&Block::preview_changed);
connect(output->waveform_cache(), &AudioPlaybackCache::validated, this,
&Block::preview_changed);
connect(output->video_frame_cache(), &FrameHashCache::validated, this,
&Block::preview_changed);
connect(output->audio_playback_cache(), &AudioPlaybackCache::validated,
this, &Block::preview_changed);
}
}
@@ -512,25 +512,25 @@ void ClipBlock::InputDisconnectedEvent(const QString &input, int element,
{
super::InputDisconnectedEvent(input, element, output);
if (input == kBufferIn) {
disconnect(output->thumbnail_cache(), &FrameHashCache::Invalidated,
this, &Block::PreviewChanged);
disconnect(output->waveform_cache(), &AudioPlaybackCache::Invalidated,
this, &Block::PreviewChanged);
disconnect(output->video_frame_cache(), &FrameHashCache::Invalidated,
this, &Block::PreviewChanged);
if (input == k_buffer_in) {
disconnect(output->thumbnail_cache(), &FrameHashCache::invalidated,
this, &Block::preview_changed);
disconnect(output->waveform_cache(), &AudioPlaybackCache::invalidated,
this, &Block::preview_changed);
disconnect(output->video_frame_cache(), &FrameHashCache::invalidated,
this, &Block::preview_changed);
disconnect(output->audio_playback_cache(),
&AudioPlaybackCache::Invalidated, this,
&Block::PreviewChanged);
disconnect(output->thumbnail_cache(), &FrameHashCache::Validated, this,
&Block::PreviewChanged);
disconnect(output->waveform_cache(), &AudioPlaybackCache::Validated,
this, &Block::PreviewChanged);
disconnect(output->video_frame_cache(), &FrameHashCache::Validated,
this, &Block::PreviewChanged);
&AudioPlaybackCache::invalidated, this,
&Block::preview_changed);
disconnect(output->thumbnail_cache(), &FrameHashCache::validated, this,
&Block::preview_changed);
disconnect(output->waveform_cache(), &AudioPlaybackCache::validated,
this, &Block::preview_changed);
disconnect(output->video_frame_cache(), &FrameHashCache::validated,
this, &Block::preview_changed);
disconnect(output->audio_playback_cache(),
&AudioPlaybackCache::Validated, this,
&Block::PreviewChanged);
&AudioPlaybackCache::validated, this,
&Block::preview_changed);
}
}
@@ -538,120 +538,120 @@ void ClipBlock::InputValueChangedEvent(const QString &input, int element)
{
super::InputValueChangedEvent(input, element);
if (input == kAutoCacheInput) {
if (IsAutocaching()) {
RequestInvalidatedFromConnected();
if (input == k_auto_cache_input) {
if (is_autocaching()) {
request_invalidated_from_connected();
} else {
Track::Type type = GetTrackType();
Track::Type type = get_track_type();
if (Node *connected = GetConnectedOutput(kBufferIn)) {
if (type == Track::kVideo) {
emit connected->video_frame_cache()->CancelAll();
} else if (type == Track::kAudio) {
emit connected->audio_playback_cache()->CancelAll();
if (Node *connected = get_connected_output(k_buffer_in)) {
if (type == Track::k_video) {
emit connected->video_frame_cache()->cancel_all();
} else if (type == Track::k_audio) {
emit connected->audio_playback_cache()->cancel_all();
}
}
}
} else if (input == kLoopModeInput) {
emit PreviewChanged();
} else if (input == k_loop_mode_input) {
emit preview_changed();
}
}
TimeRange ClipBlock::InputTimeAdjustment(const QString &input, int element,
TimeRange ClipBlock::input_time_adjustment(const QString &input, int element,
const TimeRange &input_time,
bool clamp) const
{
Q_UNUSED(element)
if (input == kBufferIn) {
return TimeRange(SequenceToMediaTime(input_time.in()),
SequenceToMediaTime(input_time.out()));
if (input == k_buffer_in) {
return TimeRange(sequence_to_media_time(input_time.in()),
sequence_to_media_time(input_time.out()));
}
return super::InputTimeAdjustment(input, element, input_time, clamp);
return super::input_time_adjustment(input, element, input_time, clamp);
}
TimeRange ClipBlock::OutputTimeAdjustment(const QString &input, int element,
TimeRange ClipBlock::output_time_adjustment(const QString &input, int element,
const TimeRange &input_time) const
{
Q_UNUSED(element)
if (input == kBufferIn) {
return TimeRange(MediaToSequenceTime(input_time.in()),
MediaToSequenceTime(input_time.out()));
if (input == k_buffer_in) {
return TimeRange(media_to_sequence_time(input_time.in()),
media_to_sequence_time(input_time.out()));
}
return super::OutputTimeAdjustment(input, element, input_time);
return super::output_time_adjustment(input, element, input_time);
}
void ClipBlock::Value(const NodeValueRow &value, const NodeGlobals &globals,
void ClipBlock::value(const NodeValueRow &value, const NodeGlobals &globals,
NodeValueTable *table) const
{
Q_UNUSED(globals)
// We discard most values here except for the buffer we received
NodeValue data = value[kBufferIn];
NodeValue data = value[k_buffer_in];
table->Clear();
if (data.type() != NodeValue::kNone) {
table->Push(data);
table->clear();
if (data.type() != NodeValue::k_none) {
table->push(data);
}
}
void ClipBlock::Retranslate()
void ClipBlock::retranslate()
{
super::Retranslate();
super::retranslate();
SetInputName(kBufferIn, tr("Buffer"));
SetInputName(kMediaInInput, tr("Media In"));
SetInputName(kSpeedInput, tr("Speed"));
SetInputName(kReverseInput, tr("Reverse"));
SetInputName(kMaintainAudioPitchInput, tr("Maintain Audio Pitch"));
SetInputName(kLoopModeInput, tr("Loop"));
SetComboBoxStrings(kLoopModeInput, { tr("None"), tr("Loop"), tr("Clamp") });
set_input_name(k_buffer_in, tr("Buffer"));
set_input_name(k_media_in_input, tr("Media In"));
set_input_name(k_speed_input, tr("Speed"));
set_input_name(k_reverse_input, tr("Reverse"));
set_input_name(k_maintain_audio_pitch_input, tr("Maintain Audio Pitch"));
set_input_name(k_loop_mode_input, tr("Loop"));
set_combo_box_strings(k_loop_mode_input, { tr("None"), tr("Loop"), tr("Clamp") });
}
void ClipBlock::AddCachePassthroughFrom(ClipBlock *other)
void ClipBlock::add_cache_passthrough_from(ClipBlock *other)
{
if (auto tc = this->video_frame_cache()) {
if (auto oc = other->video_frame_cache()) {
tc->SetPassthrough(oc);
tc->set_passthrough(oc);
}
}
if (auto tc = this->audio_playback_cache()) {
if (auto oc = other->audio_playback_cache()) {
tc->SetPassthrough(oc);
tc->set_passthrough(oc);
}
}
if (auto tc = this->thumbnails()) {
if (auto oc = other->thumbnails()) {
tc->SetPassthrough(oc);
tc->set_passthrough(oc);
}
}
if (auto tc = this->waveform()) {
if (auto oc = other->waveform()) {
tc->SetPassthrough(oc);
tc->set_passthrough(oc);
}
}
}
void ClipBlock::ConnectedToPreviewEvent()
{
RequestInvalidatedFromConnected();
request_invalidated_from_connected();
}
TimeRange ClipBlock::media_range() const
{
return InputTimeAdjustment(kBufferIn, -1, TimeRange(0, length()), false);
return input_time_adjustment(k_buffer_in, -1, TimeRange(0, length()), false);
}
MultiCamNode *ClipBlock::FindMulticam()
MultiCamNode *ClipBlock::find_multicam()
{
auto v = FindInputNodesConnectedToInput<MultiCamNode>(
NodeInput(this, kBufferIn), 1);
auto v = find_input_nodes_connected_to_input<MultiCamNode>(
NodeInput(this, k_buffer_in), 1);
if (v.empty()) {
return nullptr;
} else {
+55 -55
View File
@@ -19,8 +19,8 @@
***/
#ifndef CLIPBLOCK_H
#define CLIPBLOCK_H
#ifndef OAK_CLIPBLOCK_H
#define OAK_CLIPBLOCK_H
#include "audio/audiovisualwaveform.h"
#include "codec/decoder.h"
@@ -43,80 +43,80 @@ public:
NODE_DEFAULT_FUNCTIONS(ClipBlock)
virtual QString Name() const override;
virtual QString name() const override;
virtual QString id() const override;
virtual QString Description() const override;
virtual QString description() const override;
virtual void set_length_and_media_out(const rational &length) override;
virtual void set_length_and_media_in(const rational &length) override;
virtual void set_length_and_media_out(const Rational &length) override;
virtual void set_length_and_media_in(const Rational &length) override;
Track::Type GetTrackType() const
Track::Type get_track_type() const
{
if (track()) {
return track()->type();
} else {
return Track::kNone;
return Track::k_none;
}
}
virtual Node::ValueHint
GetValueHintForInput(const QString &input, int element = -1) const override;
get_value_hint_for_input(const QString &input, int element = -1) const override;
rational media_in() const;
void set_media_in(const rational &media_in);
Rational media_in() const;
void set_media_in(const Rational &media_in);
bool IsAutocaching() const
bool is_autocaching() const
{
return GetStandardValue(kAutoCacheInput).toBool();
return get_standard_value(k_auto_cache_input).toBool();
}
void SetAutocache(bool e);
void set_autocache(bool e);
void DiscardCache();
void discard_cache();
virtual void InvalidateCache(const TimeRange &range, const QString &from,
virtual void invalidate_cache(const TimeRange &range, const QString &from,
int element,
InvalidateCacheOptions options) override;
virtual TimeRange InputTimeAdjustment(const QString &input, int element,
virtual TimeRange input_time_adjustment(const QString &input, int element,
const TimeRange &input_time,
bool clamp) const override;
virtual TimeRange
OutputTimeAdjustment(const QString &input, int element,
output_time_adjustment(const QString &input, int element,
const TimeRange &input_time) const override;
virtual void Value(const NodeValueRow &value, const NodeGlobals &globals,
virtual void value(const NodeValueRow &value, const NodeGlobals &globals,
NodeValueTable *table) const override;
virtual void Retranslate() override;
virtual void retranslate() override;
void
RequestInvalidatedFromConnected(bool force_all = false,
request_invalidated_from_connected(bool force_all = false,
const TimeRange &intersect = TimeRange());
double speed() const
{
return GetStandardValue(kSpeedInput).toDouble();
return get_standard_value(k_speed_input).toDouble();
}
bool reverse() const
{
return GetStandardValue(kReverseInput).toBool();
return get_standard_value(k_reverse_input).toBool();
}
void set_reverse(bool e)
{
SetStandardValue(kReverseInput, e);
set_standard_value(k_reverse_input, e);
}
bool maintain_audio_pitch() const
{
return GetStandardValue(kMaintainAudioPitchInput).toBool();
return get_standard_value(k_maintain_audio_pitch_input).toBool();
}
void set_maintain_audio_pitch(bool e)
{
SetStandardValue(kMaintainAudioPitchInput, e);
set_standard_value(k_maintain_audio_pitch_input, e);
}
TransitionBlock *in_transition()
@@ -146,7 +146,7 @@ public:
FrameHashCache *connected_video_cache() const
{
if (Node *n = GetConnectedOutput(kBufferIn)) {
if (Node *n = get_connected_output(k_buffer_in)) {
return n->video_frame_cache();
} else {
return nullptr;
@@ -155,7 +155,7 @@ public:
AudioPlaybackCache *connected_audio_cache() const
{
if (Node *n = GetConnectedOutput(kBufferIn)) {
if (Node *n = get_connected_output(k_buffer_in)) {
return n->audio_playback_cache();
} else {
return nullptr;
@@ -164,7 +164,7 @@ public:
FrameHashCache *thumbnails()
{
if (Node *n = GetConnectedOutput(kBufferIn)) {
if (Node *n = get_connected_output(k_buffer_in)) {
return n->thumbnail_cache();
} else {
return nullptr;
@@ -173,26 +173,26 @@ public:
AudioWaveformCache *waveform()
{
if (Node *n = GetConnectedOutput(kBufferIn)) {
if (Node *n = get_connected_output(k_buffer_in)) {
return n->waveform_cache();
} else {
return nullptr;
}
}
void AddCachePassthroughFrom(ClipBlock *other);
void add_cache_passthrough_from(ClipBlock *other);
ViewerOutput *connected_viewer() const
{
return connected_viewer_;
}
virtual TimeRange GetVideoCacheRange() const override
virtual TimeRange get_video_cache_range() const override
{
return TimeRange(0, length());
}
virtual TimeRange GetAudioCacheRange() const override
virtual TimeRange get_audio_cache_range() const override
{
return TimeRange(0, length());
}
@@ -206,24 +206,24 @@ public:
*/
LoopMode loop_mode() const
{
return static_cast<LoopMode>(GetStandardValue(kLoopModeInput).toInt());
return static_cast<LoopMode>(get_standard_value(k_loop_mode_input).toInt());
}
void set_loop_mode(LoopMode l)
{
SetStandardValue(kLoopModeInput, int(l));
set_standard_value(k_loop_mode_input, int(l));
}
MultiCamNode *FindMulticam();
MultiCamNode *find_multicam();
static const QString kBufferIn;
static const QString kMediaInInput;
static const QString kSpeedInput;
static const QString kReverseInput;
static const QString kMaintainAudioPitchInput;
static const QString kLoopModeInput;
static const QString k_buffer_in;
static const QString k_media_in_input;
static const QString k_speed_input;
static const QString k_reverse_input;
static const QString k_maintain_audio_pitch_input;
static const QString k_loop_mode_input;
static const QString kAutoCacheInput;
static const QString k_auto_cache_input;
protected:
virtual void LinkChangeEvent() override;
@@ -239,26 +239,26 @@ protected:
private:
enum SequenceToMediaTimeFlag {
kSTMNone = 0x0,
kSTMIgnoreReverse = 0x1,
kSTMIgnoreSpeed = 0x2,
kSTMIgnoreLoop = 0x4
k_stm_none = 0x0,
k_stm_ignore_reverse = 0x1,
k_stm_ignore_speed = 0x2,
k_stm_ignore_loop = 0x4
};
rational SequenceToMediaTime(const rational &sequence_time,
uint64_t flags = kSTMNone) const;
Rational sequence_to_media_time(const Rational &sequence_time,
uint64_t flags = k_stm_none) const;
rational MediaToSequenceTime(const rational &media_time) const;
Rational media_to_sequence_time(const Rational &media_time) const;
void RequestRangeFromConnected(const TimeRange &range);
void request_range_from_connected(const TimeRange &range);
void RequestRangeForCache(PlaybackCache *cache, const TimeRange &max_range,
void request_range_for_cache(PlaybackCache *cache, const TimeRange &max_range,
const TimeRange &range, bool invalidate,
bool request);
void RequestInvalidatedForCache(PlaybackCache *cache,
void request_invalidated_for_cache(PlaybackCache *cache,
const TimeRange &max_range);
bool GetAdjustedThumbnailRange(TimeRange *r) const;
bool get_adjusted_thumbnail_range(TimeRange *r) const;
QVector<Block *> block_links_;
@@ -268,7 +268,7 @@ private:
ViewerOutput *connected_viewer_;
private:
rational last_media_in_;
Rational last_media_in_;
};
}
+2 -2
View File
@@ -28,7 +28,7 @@ GapBlock::GapBlock()
{
}
QString GapBlock::Name() const
QString GapBlock::name() const
{
return tr("Gap");
}
@@ -38,7 +38,7 @@ QString GapBlock::id() const
return QStringLiteral("org.olivevideoeditor.Olive.gap");
}
QString GapBlock::Description() const
QString GapBlock::description() const
{
return tr("A time-based node that represents an empty space.");
}
+4 -4
View File
@@ -19,8 +19,8 @@
***/
#ifndef GAPBLOCK_H
#define GAPBLOCK_H
#ifndef OAK_GAPBLOCK_H
#define OAK_GAPBLOCK_H
#include "node/block/block.h"
@@ -37,9 +37,9 @@ public:
NODE_DEFAULT_FUNCTIONS(GapBlock)
virtual QString Name() const override;
virtual QString name() const override;
virtual QString id() const override;
virtual QString Description() const override;
virtual QString description() const override;
};
}
+17 -17
View File
@@ -26,30 +26,30 @@ namespace olive
#define super ClipBlock
const QString SubtitleBlock::kTextIn = QStringLiteral("text_in");
const QString SubtitleBlock::k_text_in = QStringLiteral("text_in");
SubtitleBlock::SubtitleBlock()
{
AddInput(kTextIn, NodeValue::kText,
InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable));
add_input(k_text_in, NodeValue::k_text,
InputFlags(k_input_flag_not_connectable | k_input_flag_not_keyframable));
SetInputFlag(kBufferIn, kInputFlagHidden);
SetInputFlag(kLengthInput, kInputFlagHidden);
SetInputFlag(kMediaInInput, kInputFlagHidden);
SetInputFlag(kSpeedInput, kInputFlagHidden);
SetInputFlag(kReverseInput, kInputFlagHidden);
SetInputFlag(kMaintainAudioPitchInput, kInputFlagHidden);
set_input_flag(k_buffer_in, k_input_flag_hidden);
set_input_flag(k_length_input, k_input_flag_hidden);
set_input_flag(k_media_in_input, k_input_flag_hidden);
set_input_flag(k_speed_input, k_input_flag_hidden);
set_input_flag(k_reverse_input, k_input_flag_hidden);
set_input_flag(k_maintain_audio_pitch_input, k_input_flag_hidden);
// Undo block flag that hides in param view
SetFlag(kDontShowInParamView, false);
set_flag(k_dont_show_in_param_view, false);
}
QString SubtitleBlock::Name() const
QString SubtitleBlock::name() const
{
if (GetText().isEmpty()) {
if (get_text().isEmpty()) {
return tr("Subtitle");
} else {
return GetText();
return get_text();
}
}
@@ -58,17 +58,17 @@ QString SubtitleBlock::id() const
return QStringLiteral("org.olivevideoeditor.Olive.subtitle");
}
QString SubtitleBlock::Description() const
QString SubtitleBlock::description() const
{
return tr(
"A time-based node representing a single subtitle element for a certain period of time.");
}
void SubtitleBlock::Retranslate()
void SubtitleBlock::retranslate()
{
super::Retranslate();
super::retranslate();
SetInputName(kTextIn, tr("Text"));
set_input_name(k_text_in, tr("Text"));
}
}
+11 -11
View File
@@ -19,8 +19,8 @@
***/
#ifndef SUBTITLEBLOCK_H
#define SUBTITLEBLOCK_H
#ifndef OAK_SUBTITLEBLOCK_H
#define OAK_SUBTITLEBLOCK_H
#include "node/block/clip/clip.h"
@@ -34,25 +34,25 @@ public:
NODE_DEFAULT_FUNCTIONS(SubtitleBlock)
virtual QString Name() const override;
virtual QString name() const override;
virtual QString id() const override;
virtual QString Description() const override;
virtual QString description() const override;
virtual void Retranslate() override;
virtual void retranslate() override;
static const QString kTextIn;
static const QString k_text_in;
QString GetText() const
QString get_text() const
{
return GetStandardValue(kTextIn).toString();
return get_standard_value(k_text_in).toString();
}
void SetText(const QString &text)
void set_text(const QString &text)
{
SetStandardValue(kTextIn, text);
set_standard_value(k_text_in, text);
}
};
}
#endif // SUBTITLEBLOCK_H
#endif // OAK_SUBTITLEBLOCK_H
@@ -28,7 +28,7 @@ CrossDissolveTransition::CrossDissolveTransition()
{
}
QString CrossDissolveTransition::Name() const
QString CrossDissolveTransition::name() const
{
return tr("Cross Dissolve");
}
@@ -38,23 +38,23 @@ QString CrossDissolveTransition::id() const
return QStringLiteral("org.olivevideoeditor.Olive.crossdissolve");
}
QVector<Node::CategoryID> CrossDissolveTransition::Category() const
QVector<Node::CategoryID> CrossDissolveTransition::category() const
{
return { kCategoryTransition };
return { k_category_transition };
}
QString CrossDissolveTransition::Description() const
QString CrossDissolveTransition::description() const
{
return tr("Smoothly transition between two clips.");
}
ShaderCode
CrossDissolveTransition::GetShaderCode(const ShaderRequest &request) const
CrossDissolveTransition::get_shader_code(const ShaderRequest &request) const
{
Q_UNUSED(request)
return ShaderCode(
FileFunctions::ReadFileAsString(":/shaders/crossdissolve.frag"),
FileFunctions::read_file_as_string(":/shaders/crossdissolve.frag"),
QString());
}
@@ -65,8 +65,8 @@ void CrossDissolveTransition::SampleJobEvent(const SampleBuffer &from_samples,
{
for (size_t i = 0; i < out_samples.sample_count(); i++) {
double this_sample_time =
out_samples.audio_params().samples_to_time(i).toDouble() + time_in;
double progress = GetTotalProgress(this_sample_time);
out_samples.audio_params().samples_to_time(i).to_double() + time_in;
double progress = get_total_progress(this_sample_time);
for (int j = 0; j < out_samples.audio_params().channel_count(); j++) {
out_samples.data(j)[i] = 0;
@@ -74,7 +74,7 @@ void CrossDissolveTransition::SampleJobEvent(const SampleBuffer &from_samples,
if (from_samples.is_allocated()) {
if (i < from_samples.sample_count()) {
out_samples.data(j)[i] += from_samples.data(j)[i] *
TransformCurve(1.0 - progress);
transform_curve(1.0 - progress);
}
}
@@ -85,7 +85,7 @@ void CrossDissolveTransition::SampleJobEvent(const SampleBuffer &from_samples,
if (i >= remain) {
qint64 in_index = i - remain;
out_samples.data(j)[i] +=
to_samples.data(j)[in_index] * TransformCurve(progress);
to_samples.data(j)[in_index] * transform_curve(progress);
}
}
}
@@ -19,8 +19,8 @@
***/
#ifndef CROSSDISSOLVETRANSITION_H
#define CROSSDISSOLVETRANSITION_H
#ifndef OAK_CROSSDISSOLVETRANSITION_H
#define OAK_CROSSDISSOLVETRANSITION_H
#include "node/block/transition/transition.h"
@@ -34,15 +34,15 @@ public:
NODE_DEFAULT_FUNCTIONS(CrossDissolveTransition)
virtual QString Name() const override;
virtual QString name() const override;
virtual QString id() const override;
virtual QVector<CategoryID> Category() const override;
virtual QString Description() const override;
virtual QVector<CategoryID> category() const override;
virtual QString description() const override;
//virtual void Retranslate() override;
virtual ShaderCode
GetShaderCode(const ShaderRequest &request) const override;
get_shader_code(const ShaderRequest &request) const override;
protected:
virtual void SampleJobEvent(const SampleBuffer &from_samples,
@@ -53,4 +53,4 @@ protected:
}
#endif // CROSSDISSOLVETRANSITION_H
#endif // OAK_CROSSDISSOLVETRANSITION_H
@@ -24,17 +24,17 @@
namespace olive
{
const QString DipToColorTransition::kColorInput = QStringLiteral("color_in");
const QString DipToColorTransition::k_color_input = QStringLiteral("color_in");
#define super TransitionBlock
DipToColorTransition::DipToColorTransition()
{
AddInput(kColorInput, NodeValue::kColor,
add_input(k_color_input, NodeValue::k_color,
QVariant::fromValue(Color(0, 0, 0)));
}
QString DipToColorTransition::Name() const
QString DipToColorTransition::name() const
{
return tr("Dip To Color");
}
@@ -44,37 +44,37 @@ QString DipToColorTransition::id() const
return QStringLiteral("org.olivevideoeditor.Olive.diptocolor");
}
QVector<Node::CategoryID> DipToColorTransition::Category() const
QVector<Node::CategoryID> DipToColorTransition::category() const
{
return { kCategoryTransition };
return { k_category_transition };
}
QString DipToColorTransition::Description() const
QString DipToColorTransition::description() const
{
return tr("Transition between clips by dipping to a color.");
}
ShaderCode
DipToColorTransition::GetShaderCode(const ShaderRequest &request) const
DipToColorTransition::get_shader_code(const ShaderRequest &request) const
{
Q_UNUSED(request)
return ShaderCode(
FileFunctions::ReadFileAsString(":/shaders/diptoblack.frag"),
FileFunctions::read_file_as_string(":/shaders/diptoblack.frag"),
QString());
}
void DipToColorTransition::Retranslate()
void DipToColorTransition::retranslate()
{
super::Retranslate();
super::retranslate();
SetInputName(kColorInput, tr("Color"));
set_input_name(k_color_input, tr("Color"));
}
void DipToColorTransition::ShaderJobEvent(const NodeValueRow &value,
ShaderJob *job) const
{
job->Insert(kColorInput, value);
job->insert(k_color_input, value);
}
}
@@ -19,8 +19,8 @@
***/
#ifndef DIPTOCOLORTRANSITION_H
#define DIPTOCOLORTRANSITION_H
#ifndef OAK_DIPTOCOLORTRANSITION_H
#define OAK_DIPTOCOLORTRANSITION_H
#include "node/block/transition/transition.h"
@@ -34,17 +34,17 @@ public:
NODE_DEFAULT_FUNCTIONS(DipToColorTransition)
virtual QString Name() const override;
virtual QString name() const override;
virtual QString id() const override;
virtual QVector<CategoryID> Category() const override;
virtual QString Description() const override;
virtual QVector<CategoryID> category() const override;
virtual QString description() const override;
virtual ShaderCode
GetShaderCode(const ShaderRequest &request) const override;
get_shader_code(const ShaderRequest &request) const override;
virtual void Retranslate() override;
virtual void retranslate() override;
static const QString kColorInput;
static const QString k_color_input;
protected:
virtual void ShaderJobEvent(const NodeValueRow &value,
@@ -53,4 +53,4 @@ protected:
}
#endif // DIPTOCOLORTRANSITION_H
#endif // OAK_DIPTOCOLORTRANSITION_H
+94 -94
View File
@@ -30,48 +30,48 @@ namespace olive
#define super Block
const QString TransitionBlock::kOutBlockInput = QStringLiteral("out_block_in");
const QString TransitionBlock::kInBlockInput = QStringLiteral("in_block_in");
const QString TransitionBlock::kCurveInput = QStringLiteral("curve_in");
const QString TransitionBlock::kCenterInput = QStringLiteral("center_in");
const QString TransitionBlock::k_out_block_input = QStringLiteral("out_block_in");
const QString TransitionBlock::k_in_block_input = QStringLiteral("in_block_in");
const QString TransitionBlock::k_curve_input = QStringLiteral("curve_in");
const QString TransitionBlock::k_center_input = QStringLiteral("center_in");
TransitionBlock::TransitionBlock()
: connected_out_block_(nullptr)
, connected_in_block_(nullptr)
{
AddInput(kOutBlockInput, NodeValue::kNone,
InputFlags(kInputFlagNotKeyframable));
add_input(k_out_block_input, NodeValue::k_none,
InputFlags(k_input_flag_not_keyframable));
AddInput(kInBlockInput, NodeValue::kNone,
InputFlags(kInputFlagNotKeyframable));
add_input(k_in_block_input, NodeValue::k_none,
InputFlags(k_input_flag_not_keyframable));
AddInput(kCurveInput, NodeValue::kCombo,
InputFlags(kInputFlagNotKeyframable | kInputFlagNotConnectable));
add_input(k_curve_input, NodeValue::k_combo,
InputFlags(k_input_flag_not_keyframable | k_input_flag_not_connectable));
AddInput(kCenterInput, NodeValue::kRational,
InputFlags(kInputFlagNotKeyframable | kInputFlagNotConnectable));
SetInputProperty(kCenterInput, QStringLiteral("view"),
RationalSlider::kTime);
SetInputProperty(kCenterInput, QStringLiteral("viewlock"), true);
add_input(k_center_input, NodeValue::k_rational,
InputFlags(k_input_flag_not_keyframable | k_input_flag_not_connectable));
set_input_property(k_center_input, QStringLiteral("view"),
RationalSlider::k_time);
set_input_property(k_center_input, QStringLiteral("viewlock"), true);
SetFlag(kDontShowInParamView, false);
set_flag(k_dont_show_in_param_view, false);
}
void TransitionBlock::Retranslate()
void TransitionBlock::retranslate()
{
super::Retranslate();
super::retranslate();
SetInputName(kOutBlockInput, tr("From"));
SetInputName(kInBlockInput, tr("To"));
SetInputName(kCurveInput, tr("Curve"));
SetInputName(kCenterInput, tr("Center Offset"));
set_input_name(k_out_block_input, tr("From"));
set_input_name(k_in_block_input, tr("To"));
set_input_name(k_curve_input, tr("Curve"));
set_input_name(k_center_input, tr("Center Offset"));
// These must correspond to the CurveType enum
SetComboBoxStrings(kCurveInput,
set_combo_box_strings(k_curve_input,
{ tr("Linear"), tr("Exponential"), tr("Logarithmic") });
}
rational TransitionBlock::in_offset() const
Rational TransitionBlock::in_offset() const
{
if (is_dual_transition()) {
return length() / 2 + offset_center();
@@ -82,7 +82,7 @@ rational TransitionBlock::in_offset() const
}
}
rational TransitionBlock::out_offset() const
Rational TransitionBlock::out_offset() const
{
if (is_dual_transition()) {
return length() / 2 - offset_center();
@@ -93,21 +93,21 @@ rational TransitionBlock::out_offset() const
}
}
rational TransitionBlock::offset_center() const
Rational TransitionBlock::offset_center() const
{
return GetStandardValue(kCenterInput).value<rational>();
return get_standard_value(k_center_input).value<Rational>();
}
void TransitionBlock::set_offset_center(const rational &r)
void TransitionBlock::set_offset_center(const Rational &r)
{
SetStandardValue(kCenterInput, QVariant::fromValue(r));
set_standard_value(k_center_input, QVariant::fromValue(r));
}
void TransitionBlock::set_offsets_and_length(const rational &in_offset,
const rational &out_offset)
void TransitionBlock::set_offsets_and_length(const Rational &in_offset,
const Rational &out_offset)
{
rational len = in_offset + out_offset;
rational center = len / 2 - in_offset;
Rational len = in_offset + out_offset;
Rational center = len / 2 - in_offset;
set_length_and_media_out(len);
set_offset_center(center);
@@ -123,101 +123,101 @@ Block *TransitionBlock::connected_in_block() const
return connected_in_block_;
}
double TransitionBlock::GetTotalProgress(const double &time) const
double TransitionBlock::get_total_progress(const double &time) const
{
return GetInternalTransitionTime(time) / length().toDouble();
return get_internal_transition_time(time) / length().to_double();
}
double TransitionBlock::GetOutProgress(const double &time) const
double TransitionBlock::get_out_progress(const double &time) const
{
if (out_offset() == 0) {
return 0;
}
return std::clamp(
1.0 - (GetInternalTransitionTime(time) / out_offset().toDouble()), 0.0,
1.0 - (get_internal_transition_time(time) / out_offset().to_double()), 0.0,
1.0);
}
double TransitionBlock::GetInProgress(const double &time) const
double TransitionBlock::get_in_progress(const double &time) const
{
if (in_offset() == 0) {
return 0;
}
return std::clamp(
(GetInternalTransitionTime(time) - out_offset().toDouble()) /
in_offset().toDouble(),
(get_internal_transition_time(time) - out_offset().to_double()) /
in_offset().to_double(),
0.0, 1.0);
}
double TransitionBlock::GetInternalTransitionTime(const double &time) const
double TransitionBlock::get_internal_transition_time(const double &time) const
{
return time;
}
void TransitionBlock::InsertTransitionTimes(AcceleratedJob *job,
void TransitionBlock::insert_transition_times(AcceleratedJob *job,
const double &time) const
{
// Provides total transition progress from 0.0 (start) - 1.0 (end)
job->Insert(QStringLiteral("ove_tprog_all"),
NodeValue(NodeValue::kFloat, GetTotalProgress(time), this));
job->insert(QStringLiteral("ove_tprog_all"),
NodeValue(NodeValue::k_float, get_total_progress(time), this));
// Provides progress of out section from 1.0 (start) - 0.0 (end)
job->Insert(QStringLiteral("ove_tprog_out"),
NodeValue(NodeValue::kFloat, GetOutProgress(time), this));
job->insert(QStringLiteral("ove_tprog_out"),
NodeValue(NodeValue::k_float, get_out_progress(time), this));
// Provides progress of in section from 0.0 (start) - 1.0 (end)
job->Insert(QStringLiteral("ove_tprog_in"),
NodeValue(NodeValue::kFloat, GetInProgress(time), this));
job->insert(QStringLiteral("ove_tprog_in"),
NodeValue(NodeValue::k_float, get_in_progress(time), this));
}
void TransitionBlock::Value(const NodeValueRow &value,
void TransitionBlock::value(const NodeValueRow &value,
const NodeGlobals &globals,
NodeValueTable *table) const
{
NodeValue out_buffer = value[kOutBlockInput];
NodeValue in_buffer = value[kInBlockInput];
NodeValue::Type data_type = (out_buffer.type() != NodeValue::kNone) ?
NodeValue out_buffer = value[k_out_block_input];
NodeValue in_buffer = value[k_in_block_input];
NodeValue::Type data_type = (out_buffer.type() != NodeValue::k_none) ?
out_buffer.type() :
in_buffer.type();
NodeValue::Type job_type = NodeValue::kNone;
NodeValue::Type job_type = NodeValue::k_none;
QVariant push_job;
if (data_type == NodeValue::kTexture) {
if (data_type == NodeValue::k_texture) {
// This must be a visual transition
ShaderJob job;
if (out_buffer.type() != NodeValue::kNone) {
job.Insert(kOutBlockInput, out_buffer);
if (out_buffer.type() != NodeValue::k_none) {
job.insert(k_out_block_input, out_buffer);
} else {
job.Insert(kOutBlockInput, NodeValue(NodeValue::kTexture, nullptr));
job.insert(k_out_block_input, NodeValue(NodeValue::k_texture, nullptr));
}
if (in_buffer.type() != NodeValue::kNone) {
job.Insert(kInBlockInput, in_buffer);
if (in_buffer.type() != NodeValue::k_none) {
job.insert(k_in_block_input, in_buffer);
} else {
job.Insert(kInBlockInput, NodeValue(NodeValue::kTexture, nullptr));
job.insert(k_in_block_input, NodeValue(NodeValue::k_texture, nullptr));
}
job.Insert(kCurveInput, value);
job.insert(k_curve_input, value);
double time = globals.time().in().toDouble();
InsertTransitionTimes(&job, time);
double time = globals.time().in().to_double();
insert_transition_times(&job, time);
ShaderJobEvent(value, &job);
job_type = NodeValue::kTexture;
push_job = QVariant::fromValue(Texture::Job(globals.vparams(), job));
} else if (data_type == NodeValue::kSamples) {
job_type = NodeValue::k_texture;
push_job = QVariant::fromValue(Texture::job(globals.vparams(), job));
} else if (data_type == NodeValue::k_samples) {
// This must be an audio transition
SampleBuffer from_samples = out_buffer.toSamples();
SampleBuffer to_samples = in_buffer.toSamples();
SampleBuffer from_samples = out_buffer.to_samples();
SampleBuffer to_samples = in_buffer.to_samples();
if (from_samples.is_allocated() || to_samples.is_allocated()) {
double time_in = globals.time().in().toDouble();
double time_out = globals.time().out().toDouble();
double time_in = globals.time().in().to_double();
double time_out = globals.time().out().to_double();
const AudioParams &params = (from_samples.is_allocated()) ?
from_samples.audio_params() :
@@ -232,41 +232,41 @@ void TransitionBlock::Value(const NodeValueRow &value,
SampleJobEvent(from_samples, to_samples, out_samples, time_in);
}
job_type = NodeValue::kSamples;
job_type = NodeValue::k_samples;
push_job = QVariant::fromValue(out_samples);
}
}
if (!push_job.isNull()) {
table->Push(job_type, push_job, this);
table->push(job_type, push_job, this);
}
}
void TransitionBlock::InvalidateCache(const TimeRange &range,
void TransitionBlock::invalidate_cache(const TimeRange &range,
const QString &from, int element,
InvalidateCacheOptions options)
{
TimeRange r = range;
if (from == kOutBlockInput || from == kInBlockInput) {
Block *n = dynamic_cast<Block *>(GetConnectedOutput(from));
if (from == k_out_block_input || from == k_in_block_input) {
Block *n = dynamic_cast<Block *>(get_connected_output(from));
if (n) {
r = Track::TransformRangeFromBlock(n, r);
r = Track::transform_range_from_block(n, r);
}
}
super::InvalidateCache(r, from, element, options);
super::invalidate_cache(r, from, element, options);
}
double TransitionBlock::TransformCurve(double linear) const
double TransitionBlock::transform_curve(double linear) const
{
switch (static_cast<CurveType>(GetStandardValue(kCurveInput).toInt())) {
case kLinear:
switch (static_cast<CurveType>(get_standard_value(k_curve_input).toInt())) {
case k_linear:
break;
case kExponential:
case k_exponential:
linear *= linear;
break;
case kLogarithmic:
case k_logarithmic:
linear = std::sqrt(linear);
break;
}
@@ -279,12 +279,12 @@ void TransitionBlock::InputConnectedEvent(const QString &input, int element,
{
Q_UNUSED(element)
if (input == kOutBlockInput) {
if (input == k_out_block_input) {
// If node is not a block, this will just be null
if ((connected_out_block_ = dynamic_cast<ClipBlock *>(output))) {
connected_out_block_->set_out_transition(this);
}
} else if (input == kInBlockInput) {
} else if (input == k_in_block_input) {
// If node is not a block, this will just be null
if ((connected_in_block_ = dynamic_cast<ClipBlock *>(output))) {
connected_in_block_->set_in_transition(this);
@@ -298,12 +298,12 @@ void TransitionBlock::InputDisconnectedEvent(const QString &input, int element,
Q_UNUSED(element)
Q_UNUSED(output)
if (input == kOutBlockInput) {
if (input == k_out_block_input) {
if (connected_out_block_) {
connected_out_block_->set_out_transition(nullptr);
connected_out_block_ = nullptr;
}
} else if (input == kInBlockInput) {
} else if (input == k_in_block_input) {
if (connected_in_block_) {
connected_in_block_->set_in_transition(nullptr);
connected_in_block_ = nullptr;
@@ -311,34 +311,34 @@ void TransitionBlock::InputDisconnectedEvent(const QString &input, int element,
}
}
TimeRange TransitionBlock::InputTimeAdjustment(const QString &input,
TimeRange TransitionBlock::input_time_adjustment(const QString &input,
int element,
const TimeRange &input_time,
bool clamp) const
{
if (input == kInBlockInput || input == kOutBlockInput) {
Block *block = dynamic_cast<Block *>(GetConnectedOutput(input));
if (input == k_in_block_input || input == k_out_block_input) {
Block *block = dynamic_cast<Block *>(get_connected_output(input));
if (block) {
// Retransform time as if it came from the track
return input_time + in() - block->in();
}
}
return super::InputTimeAdjustment(input, element, input_time, clamp);
return super::input_time_adjustment(input, element, input_time, clamp);
}
TimeRange
TransitionBlock::OutputTimeAdjustment(const QString &input, int element,
TransitionBlock::output_time_adjustment(const QString &input, int element,
const TimeRange &input_time) const
{
if (input == kInBlockInput || input == kOutBlockInput) {
Block *block = dynamic_cast<Block *>(GetConnectedOutput(input));
if (input == k_in_block_input || input == k_out_block_input) {
Block *block = dynamic_cast<Block *>(get_connected_output(input));
if (block) {
return input_time + block->in() - in();
}
}
return super::OutputTimeAdjustment(input, element, input_time);
return super::output_time_adjustment(input, element, input_time);
}
}
+25 -25
View File
@@ -19,8 +19,8 @@
***/
#ifndef TRANSITIONBLOCK_H
#define TRANSITIONBLOCK_H
#ifndef OAK_TRANSITIONBLOCK_H
#define OAK_TRANSITIONBLOCK_H
#include "node/block/block.h"
@@ -34,10 +34,10 @@ class TransitionBlock : public Block {
public:
TransitionBlock();
virtual void Retranslate() override;
virtual void retranslate() override;
rational in_offset() const;
rational out_offset() const;
Rational in_offset() const;
Rational out_offset() const;
/**
* @brief Return the "middle point" of the transition, relative to the transition
@@ -47,11 +47,11 @@ public:
* 0 means the center of the transition is right in the middle and the in and out offsets will
* be equal.
*/
rational offset_center() const;
void set_offset_center(const rational &r);
Rational offset_center() const;
void set_offset_center(const Rational &r);
void set_offsets_and_length(const rational &in_offset,
const rational &out_offset);
void set_offsets_and_length(const Rational &in_offset,
const Rational &out_offset);
bool is_dual_transition() const
{
@@ -61,21 +61,21 @@ public:
Block *connected_out_block() const;
Block *connected_in_block() const;
double GetTotalProgress(const double &time) const;
double GetOutProgress(const double &time) const;
double GetInProgress(const double &time) const;
double get_total_progress(const double &time) const;
double get_out_progress(const double &time) const;
double get_in_progress(const double &time) const;
virtual void Value(const NodeValueRow &value, const NodeGlobals &globals,
virtual void value(const NodeValueRow &value, const NodeGlobals &globals,
NodeValueTable *table) const override;
virtual void InvalidateCache(
virtual void invalidate_cache(
const TimeRange &range, const QString &from, int element = -1,
InvalidateCacheOptions options = InvalidateCacheOptions()) override;
static const QString kOutBlockInput;
static const QString kInBlockInput;
static const QString kCurveInput;
static const QString kCenterInput;
static const QString k_out_block_input;
static const QString k_in_block_input;
static const QString k_curve_input;
static const QString k_center_input;
protected:
virtual void ShaderJobEvent(const NodeValueRow &value, ShaderJob *job) const
@@ -88,7 +88,7 @@ protected:
{
}
double TransformCurve(double linear) const;
double transform_curve(double linear) const;
virtual void InputConnectedEvent(const QString &input, int element,
Node *output) override;
@@ -96,20 +96,20 @@ protected:
virtual void InputDisconnectedEvent(const QString &input, int element,
Node *output) override;
virtual TimeRange InputTimeAdjustment(const QString &input, int element,
virtual TimeRange input_time_adjustment(const QString &input, int element,
const TimeRange &input_time,
bool clamp) const override;
virtual TimeRange
OutputTimeAdjustment(const QString &input, int element,
output_time_adjustment(const QString &input, int element,
const TimeRange &input_time) const override;
private:
enum CurveType { kLinear, kExponential, kLogarithmic };
enum CurveType { k_linear, k_exponential, k_logarithmic };
double GetInternalTransitionTime(const double &time) const;
double get_internal_transition_time(const double &time) const;
void InsertTransitionTimes(AcceleratedJob *job, const double &time) const;
void insert_transition_times(AcceleratedJob *job, const double &time) const;
ClipBlock *connected_out_block_;
@@ -118,4 +118,4 @@ private:
}
#endif // TRANSITIONBLOCK_H
#endif // OAK_TRANSITIONBLOCK_H