From cb0ebb24a43193ebc14d150df4f056d7fbed80d2 Mon Sep 17 00:00:00 2001 From: Thomas Wilshaw Date: Thu, 25 Nov 2021 13:18:01 +0000 Subject: [PATCH] saveotio: Fix external reference available media --- app/task/project/saveotio/saveotio.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/app/task/project/saveotio/saveotio.cpp b/app/task/project/saveotio/saveotio.cpp index 92af6753b..107e36ec0 100644 --- a/app/task/project/saveotio/saveotio.cpp +++ b/app/task/project/saveotio/saveotio.cpp @@ -135,12 +135,33 @@ OTIO::Track *SaveOTIOTask::SerializeTrack(Track *track) if (dynamic_cast(block)) { auto otio_clip = new OTIO::Clip(block->GetLabel().toStdString()); + auto rate = 0.0; + rational frame_rate = static_cast(block)->connected_viewer()->GetVideoParams().frame_rate(); + if (frame_rate.denominator() == 1) { + rate = frame_rate.numerator(); + } else { + // Handle strange rates + rate = static_cast(frame_rate.numerator()) / + static_cast(frame_rate.denominator()); + } + otio_clip->set_source_range(OTIO::TimeRange(block->in().toRationalTime(), - block->length().toRationalTime())); + block->length().toRationalTime(rate))); QVector media_nodes = block->FindInputNodes(); if (!media_nodes.isEmpty()) { - auto media_ref = new OTIO::ExternalReference(media_nodes.first()->filename().toStdString()); + + OTIO::TimeRange range; + if (otio_track->kind().compare("Video") == 0) { + range = OTIO::TimeRange(OTIO::RationalTime(0, rate), + OTIO::RationalTime(media_nodes.first()->GetVideoParams().duration(), + rate)); + } else if (otio_track->kind().compare("Audio") == 0) { + range = OTIO::TimeRange(OTIO::RationalTime(0, media_nodes.first()->GetAudioParams().sample_rate()), + OTIO::RationalTime(media_nodes.first()->GetAudioParams().duration(), + media_nodes.first()->GetAudioParams().sample_rate())); + } + auto media_ref = new OTIO::ExternalReference(media_nodes.first()->filename().toStdString(), range); otio_clip->set_media_reference(media_ref); }