Skip to content

Commit

Permalink
Work around incorrect dimensions for recording from iOS Simulator
Browse files Browse the repository at this point in the history
Related to #76
  • Loading branch information
sindresorhus committed May 5, 2019
1 parent 96c60bb commit 7ea2e21
Showing 1 changed file with 41 additions and 1 deletion.
42 changes: 41 additions & 1 deletion Gifski/util.swift
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,39 @@ extension CGSize {
}


extension NSImage {
/// UIImage polyfill
convenience init(cgImage: CGImage) {
let size = CGSize(width: cgImage.width, height: cgImage.height)
self.init(cgImage: cgImage, size: size)
}
}


extension CGImage {
var nsImage: NSImage {
return NSImage(cgImage: self)
}
}


extension AVAssetImageGenerator {
func image(at time: CMTime) -> NSImage? {
return (try? copyCGImage(at: time, actualTime: nil))?.nsImage
}
}

extension AVAsset {
func image(at time: CMTime) -> NSImage? {
let imageGenerator = AVAssetImageGenerator(asset: self)
imageGenerator.appliesPreferredTrackTransform = true
imageGenerator.requestedTimeToleranceAfter = .zero
imageGenerator.requestedTimeToleranceBefore = .zero
return imageGenerator.image(at: time)
}
}


extension AVAssetTrack {
/// Returns the dimensions of the track if it's a video.
var dimensions: CGSize? {
Expand All @@ -500,7 +533,14 @@ extension AVAssetTrack {
}

let size = naturalSize.applying(preferredTransform)
return CGSize(width: abs(size.width), height: abs(size.height))
let preferredSize = CGSize(width: abs(size.width), height: abs(size.height))

// Workaround for https://github.com/sindresorhus/gifski-app/issues/76
guard preferredSize != .zero else {
return asset?.image(at: CMTime(seconds: 0, preferredTimescale: .video))?.size
}

return preferredSize
}

/// Returns the frame rate of the track if it's a video.
Expand Down

0 comments on commit 7ea2e21

Please sign in to comment.