OpenTimelineIO task (C++)
The goal is to implement an [OpenTimelineIO](https://github.com/AcademySoftwareFoundation/OpenTimelineIO/) adapter in C++ in Kdenlive to allow importing and exporting project files to/from other applications implementing this open standard.
A previous implementation (not working anymore) was done in Kdenlive using Python, but is now deprecated.
The adapter should be able to export multiple timeline projects and all necessary informations, which means:
- All clips referenced in the project (can be obtained from the [ProjectItemModel class](https://invent.kde.org/multimedia/kdenlive/-/blob/master/src/bin/projectitemmodel.cpp), using `ProjectItemModel::getAllClipIds` and `ProjectItemModel::getClipByBinID`)
- All timelines inside the project (can be obtained from [KdenliveDoc class](https://invent.kde.org/multimedia/kdenlive/-/blob/master/src/doc/kdenlivedoc.cpp), using `KdenliveDoc::getTimelinesUuids()` and `KdenliveDoc::getTimeline`)
- All tracks contained in each timeline ((can be obtained from the [TimelineModel class](https://invent.kde.org/multimedia/kdenlive/-/blob/master/src/timeline2/model/timelinemodel.cpp), using `TimelineModel::getAllTracksIds()` and `TimelineModel::getTrackById_const`)
- All clips in each track (can be obtained from the [TrackModel class](https://invent.kde.org/multimedia/kdenlive/-/blob/master/src/timeline2/model/trackmodel.cpp), using `TrackModel::getClipByRow`)
- Transitions between clips in the same track (To create such transitions, Kdenlive uses 2 MLT playlists inside the TrackModel class, and adds a transition (called Mix in Kdenlive's code) between these 2 playlists, can be obtained for example with `TrackModel::getMixInfo`
- Markers and Guides, these can be obtained for each Project Bin clips using the marker model from the `ClipController::getMarkerModel` method, then `MarkerListModel::getAllMarkers`
- Nested timelines, needs to be checked how OpenTimelineIO handles this
- Compositions (performed between items on different tracks) - requires checking if OpenTimelineIO handles this or not
To import a project, the code should take inspiration from the [MeltBuilder class](https://invent.kde.org/multimedia/kdenlive/-/blob/master/src/timeline2/model/builders/meltBuilder.cpp), which allows creating timelines, tracks, clips and transitions from MLT's xml file.
The adapter should be able to export a project in OpenTimelineIO format, then reopening it should preserve all the above described properties.
Some code demonstrating a basic implementation can be found in this Proof of Concept [Merge Request](https://invent.kde.org/multimedia/kdenlive/-/merge_requests/473).
issue