sequence encapsulation
This commit is contained in:
+10
-10
@@ -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
@@ -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
@@ -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>;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user