Skip to content

Commit 3748477

Browse files
committed
Add defensive checks to our missing asset to ensure we only add it if our track matches the media type
1 parent 65532c3 commit 3748477

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

Sources/OpenTimelineIO-AVFoundation/OpenTimelineIO-Extensions/Clip.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,29 @@ import TimecodeKit
1313
extension Clip
1414
{
1515
// see https://opentimelineio.readthedocs.io/en/latest/tutorials/time-ranges.html
16-
func toAVAssetAndMapping(baseURL:URL? = nil, useTimecode:Bool = true, rescaleToAsset:Bool = true) throws -> (asset:AVAsset, timeMaping:CMTimeMapping)?
16+
func toAVAssetAndMapping(baseURL:URL? = nil, trackType:AVMediaType, useTimecode:Bool = true, rescaleToAsset:Bool = true) throws -> (asset:AVAsset, timeMaping:CMTimeMapping)?
1717
{
1818

1919
let asset:AVURLAsset
2020

2121
if let externalReference = self.mediaReference as? ExternalReference,
2222
let maybeAsset = externalReference.toAVAsset(baseURL: baseURL)
2323
{
24+
25+
guard !maybeAsset.tracks(withMediaType: trackType).isEmpty else { return nil }
26+
2427
asset = maybeAsset
2528
}
2629
else
2730
{
2831
//see AWS Picchu Edit - Premiere cant import either?
2932
//we have a generator or just a dead reference?
3033
let missingMediaURL = Bundle.main.url(forResource: "MediaNotFound", withExtension: "mp4")!
34+
let missingAsset = AVURLAsset(url: missingMediaURL)
35+
36+
guard !missingAsset.tracks(withMediaType: trackType).isEmpty else { return nil }
3137

32-
asset = AVURLAsset(url: missingMediaURL)
38+
asset = missingAsset
3339
}
3440

3541
var timeRangeInAsset = try self.trimmedRange()

Sources/OpenTimelineIO-AVFoundation/OpenTimelineIO-Extensions/Timeline.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public extension Timeline
7878
{
7979
guard
8080
let clip = item as? Clip,
81-
let (sourceAsset, clipTimeMapping) = try clip.toAVAssetAndMapping(baseURL: baseURL, useTimecode: useAssetTimecode, rescaleToAsset: rescaleToAsset),
81+
let (sourceAsset, clipTimeMapping) = try clip.toAVAssetAndMapping(baseURL: baseURL, trackType:.video, useTimecode: useAssetTimecode, rescaleToAsset: rescaleToAsset),
8282
let sourceAssetFirstVideoTrack = try await sourceAsset.loadTracks(withMediaType: .video).first,
8383
let compositionVideoTrack = compositionVideoTrack //composition.mutableTrack(compatibleWith: sourceAssetFirstVideoTrack) ??
8484
else

0 commit comments

Comments
 (0)