The function to_json_file can delete it's SerializableObject if it
doesn't have a Retainer associated with it. This fix adds said
Retainer. Retainers clean them selves up when possibly_delete is
called on their associated object.
Add a frame rate option to the conversion to opentime rationals as
otio generaly expects rationals to be in the form value/framerate.
Also add a check to make sure the rational is not in the form 0/0
as this can cause errors with OTIO.
- Abstracts all OpenGL functionality including UI objects
- Cleans up several rendering codepaths
- Improves threading functionality
- Removes old code and problematic functions
OTIO transitions are now added to the timeline as cross dissolves with
the appropriate in/out points,
Also added a safety check when dealing with media references.
Change MediaInput::footage() to MediaInput::stream() and
MediaInput::SetFootage() to MediaInput::SetStream() as they access
streams not footage.
Also update all instances of access methods to reflect this change.
Image streams were initially separated from video streams, but they're now
joined with a parameter defining if they're a still image, image sequence,
or regular video. The image sequence import process has also improved so
that if images from the same sequence are imported too, they'll either be
ignored or the user won't be asked again for those if they should be an
image sequence (fixes#1193). Also shifts decoder "probe" process to return
an item, useful if the decoder returns a non-footage item.
Shifted from CacheTask to functionality built into RenderBackend. It was
a lot easier to control behavior this way without having to juggle a ton
of threads and race conditions.
Could likely be multithreaded further.
I think there was an earlier commit with a similar name but turns out
I'd only done foundational work in that commit and never actually
properly set it up. Of course once I did, there were several issues that
needed fixing to make it work correctly, but now it works as expected.
Heavily optimizes larger projects by allowing cache jobs to only copy
what has changed.
Since auto-cache events start and stop fairly frequently (and are somewhat
heavy to create/destroy), we can save a lot of cycles over time by sharing
the same backend between them all.