sequence encapsulation

This commit is contained in:
itsmattkc
2019-05-09 00:19:36 +10:00
parent 5f0debb7ec
commit 2905dce3d9
37 changed files with 380 additions and 293 deletions
+10 -10
View File
@@ -74,7 +74,7 @@ ClipPtr Clip::copy(Track* s) {
copy->effects.append(effects.at(i)->copy(copy.get()));
}
copy->set_cached_frame_rate((this->track_ == nullptr) ? cached_frame_rate() : this->track_->sequence()->frame_rate);
copy->set_cached_frame_rate((this->track_ == nullptr) ? cached_frame_rate() : this->track_->sequence()->frame_rate());
copy->refresh();
@@ -432,13 +432,13 @@ double Clip::media_frame_rate() {
double rate = media_->get_frame_rate(media_stream_index());
if (!qIsNaN(rate)) return rate;
}
if (track() != nullptr) return track()->sequence()->frame_rate;
if (track() != nullptr) return track()->sequence()->frame_rate();
return qSNaN();
}
long Clip::media_length() {
if (this->track() != nullptr) {
double fr = this->track()->sequence()->frame_rate;
double fr = this->track()->sequence()->frame_rate();
fr /= speed_.value;
@@ -459,7 +459,7 @@ long Clip::media_length() {
case MEDIA_TYPE_SEQUENCE:
{
Sequence* s = media_->to_sequence().get();
return rescale_frame_number(s->GetEndFrame(), s->frame_rate, fr);
return rescale_frame_number(s->GetEndFrame(), s->frame_rate(), fr);
}
}
}
@@ -468,38 +468,38 @@ long Clip::media_length() {
}
int Clip::media_width() {
if (media_ == nullptr && track() != nullptr) return track()->sequence()->width;
if (media_ == nullptr && track() != nullptr) return track()->sequence()->width();
switch (media_->get_type()) {
case MEDIA_TYPE_FOOTAGE:
{
const FootageStream* ms = media_stream();
if (ms != nullptr) return ms->video_width;
if (track() != nullptr) return track()->sequence()->width;
if (track() != nullptr) return track()->sequence()->width();
break;
}
case MEDIA_TYPE_SEQUENCE:
{
Sequence* s = media_->to_sequence().get();
return s->width;
return s->width();
}
}
return 0;
}
int Clip::media_height() {
if (media_ == nullptr && track() != nullptr) return track()->sequence()->height;
if (media_ == nullptr && track() != nullptr) return track()->sequence()->height();
switch (media_->get_type()) {
case MEDIA_TYPE_FOOTAGE:
{
const FootageStream* ms = media_stream();
if (ms != nullptr) return ms->video_height;
if (track() != nullptr) return track()->sequence()->height;
if (track() != nullptr) return track()->sequence()->height();
}
break;
case MEDIA_TYPE_SEQUENCE:
{
Sequence* s = media_->to_sequence().get();
return s->height;
return s->height();
}
}
return 0;
+79 -13
View File
@@ -39,12 +39,12 @@ Sequence::Sequence() :
SequencePtr Sequence::copy() {
SequencePtr s = std::make_shared<Sequence>();
s->name = QCoreApplication::translate("Sequence", "%1 (copy)").arg(name);
s->width = width;
s->height = height;
s->frame_rate = frame_rate;
s->audio_frequency = audio_frequency;
s->audio_layout = audio_layout;
s->name_ = tr("%1 (copy)").arg(name_);
s->width_ = width_;
s->height_ = height_;
s->frame_rate_ = frame_rate_;
s->audio_frequency_ = audio_frequency_;
s->audio_layout_ = audio_layout_;
/* FIXME
// deep copy all of the sequence's clips
@@ -69,12 +69,12 @@ void Sequence::Save(QXmlStreamWriter &stream)
stream.writeStartElement("sequence");
stream.writeAttribute("id", QString::number(save_id));
stream.writeAttribute("name", name);
stream.writeAttribute("width", QString::number(width));
stream.writeAttribute("height", QString::number(height));
stream.writeAttribute("framerate", QString::number(frame_rate, 'f', 10));
stream.writeAttribute("afreq", QString::number(audio_frequency));
stream.writeAttribute("alayout", QString::number(audio_layout));
stream.writeAttribute("name", name_);
stream.writeAttribute("width", QString::number(width_));
stream.writeAttribute("height", QString::number(height_));
stream.writeAttribute("framerate", QString::number(frame_rate_, 'f', 10));
stream.writeAttribute("afreq", QString::number(audio_frequency_));
stream.writeAttribute("alayout", QString::number(audio_layout_));
if (this == Timeline::GetTopSequence().get()) {
stream.writeAttribute("open", "1");
}
@@ -98,6 +98,72 @@ void Sequence::Save(QXmlStreamWriter &stream)
stream.writeEndElement();
}
const QString &Sequence::name()
{
return name_;
}
void Sequence::set_name(const QString &s)
{
name_ = s;
emit SequenceParametersChanged();
}
const int &Sequence::width()
{
return width_;
}
const int &Sequence::height()
{
return height_;
}
void Sequence::set_width(const int& w)
{
width_ = w;
emit SequenceParametersChanged();
}
void Sequence::set_height(const int& h)
{
height_ = h;
emit SequenceParametersChanged();
}
const double &Sequence::frame_rate()
{
return frame_rate_;
}
void Sequence::set_frame_rate(const double& d)
{
frame_rate_ = d;
emit SequenceParametersChanged();
}
const int &Sequence::audio_frequency()
{
return audio_frequency_;
}
void Sequence::set_audio_frequency(const int& f)
{
audio_frequency_ = f;
emit SequenceParametersChanged();
}
const int &Sequence::audio_layout()
{
return audio_layout_;
}
void Sequence::set_audio_layout(const int& l)
{
audio_layout_ = l;
emit SequenceParametersChanged();
}
long Sequence::GetEndFrame() {
long end_frame = 0;
@@ -203,7 +269,7 @@ void Sequence::AddClipsFromGhosts(ComboAction* ca, const QVector<Ghost>& ghosts)
// sequence (red?ish?)
c->set_color(192, 128, 128);
c->set_name(c->media()->to_sequence()->name);
c->set_name(c->media()->to_sequence()->name());
}
c->refresh();
added_clips.append(c);
+25 -7
View File
@@ -37,12 +37,23 @@ public:
void Save(QXmlStreamWriter& stream);
QString name;
int width;
int height;
double frame_rate;
int audio_frequency;
int audio_layout;
const QString& name();
void set_name(const QString& s);
const int& width();
void set_width(const int& w);
const int& height();
void set_height(const int& h);
const double& frame_rate();
void set_frame_rate(const double& d);
const int& audio_frequency();
void set_audio_frequency(const int& f);
const int& audio_layout();
void set_audio_layout(const int& l);
long GetEndFrame();
QVector<Clip*> GetAllClips();
@@ -126,13 +137,20 @@ public:
QVector<Marker> markers;
signals:
void Changed();
void SequenceParametersChanged();
private:
QVector<Track*> tracks_;
ClipPtr SplitClip(ComboAction* ca, bool transitions, Clip *clip, long frame);
ClipPtr SplitClip(ComboAction* ca, bool transitions, Clip *clip, long frame, long post_in);
bool SplitSelection(ComboAction* ca, QVector<Selection> selections);
QString name_;
int width_;
int height_;
double frame_rate_;
int audio_frequency_;
int audio_layout_;
};
using SequencePtr = std::shared_ptr<Sequence>;
+6 -6
View File
@@ -75,18 +75,18 @@ QVector<Ghost> olive::timeline::CreateGhostsFromMedia(Sequence *seq,
if (m->video_tracks.size() > 0 && !qIsNull(m->video_tracks.at(0).video_frame_rate)) {
source_fr = m->video_tracks.at(0).video_frame_rate * m->speed;
}
default_clip_in = rescale_frame_number(m->in, source_fr, seq->frame_rate);
default_clip_out = rescale_frame_number(m->out, source_fr, seq->frame_rate);
default_clip_in = rescale_frame_number(m->in, source_fr, seq->frame_rate());
default_clip_out = rescale_frame_number(m->out, source_fr, seq->frame_rate());
}
break;
case MEDIA_TYPE_SEQUENCE:
s = medium->to_sequence().get();
sequence_length = s->GetEndFrame();
if (seq != nullptr) sequence_length = rescale_frame_number(sequence_length, s->frame_rate, seq->frame_rate);
if (seq != nullptr) sequence_length = rescale_frame_number(sequence_length, s->frame_rate(), seq->frame_rate());
can_import = (s != seq && sequence_length != 0);
if (s->using_workarea) {
default_clip_in = rescale_frame_number(s->workarea_in, s->frame_rate, seq->frame_rate);
default_clip_out = rescale_frame_number(s->workarea_out, s->frame_rate, seq->frame_rate);
default_clip_in = rescale_frame_number(s->workarea_in, s->frame_rate(), seq->frame_rate());
default_clip_out = rescale_frame_number(s->workarea_out, s->frame_rate(), seq->frame_rate());
}
break;
default:
@@ -108,7 +108,7 @@ QVector<Ghost> olive::timeline::CreateGhostsFromMedia(Sequence *seq,
if (m->video_tracks.size() > 0 && m->video_tracks.at(0).infinite_length && m->audio_tracks.size() == 0) {
g.out = g.in + 100;
} else {
long length = m->get_length_in_frames(seq->frame_rate);
long length = m->get_length_in_frames(seq->frame_rate());
g.out = entry_point + length - default_clip_in;
if (m->using_inout) {
g.out -= (length - default_clip_out);