/*** Olive - Non-Linear Video Editor Copyright (C) 2020 Olive Team This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ***/ #include "media.h" #include "common/timecodefunctions.h" #include "common/tohex.h" namespace olive { const QString MediaInput::kFootageInput = QStringLiteral("footage_in"); MediaInput::MediaInput() : connected_footage_(nullptr) { AddInput(kFootageInput, NodeValue::kFootage, InputFlags(kInputFlagNotConnectable | kInputFlagNotKeyframable)); } QVector MediaInput::Category() const { return {kCategoryInput}; } Stream *MediaInput::stream() const { return Node::ValueToPtr(GetStandardValue(kFootageInput)); } void MediaInput::SetStream(Stream* s) { SetStandardValue(kFootageInput, Node::PtrToValue(s)); } void MediaInput::Retranslate() { SetInputName(kFootageInput, tr("Media")); } NodeValueTable MediaInput::Value(const QString &output, NodeValueDatabase &value) const { Q_UNUSED(output) NodeValueTable table = value.Merge(); if (connected_footage_) { rational media_duration = Timecode::timestamp_to_time(connected_footage_->duration(), connected_footage_->timebase()); table.Push(NodeValue::kRational, QVariant::fromValue(media_duration), this, false, QStringLiteral("length")); } return table; } void MediaInput::InputValueChangedEvent(const QString &input, int element) { Q_UNUSED(element) if (input == kFootageInput) { Stream* new_footage = stream(); if (new_footage == connected_footage_) { return; } if (connected_footage_) { disconnect(connected_footage_, &Stream::ParametersChanged, this, &MediaInput::FootageParametersChanged); } connected_footage_ = new_footage; if (connected_footage_) { connect(connected_footage_, &Stream::ParametersChanged, this, &MediaInput::FootageParametersChanged); } } } void MediaInput::FootageParametersChanged() { InvalidateCache(TimeRange(0, RATIONAL_MAX), kFootageInput); } }