Skip to content

Commit 5fe9a6c

Browse files
committed
Moved the max duration to the trimmer view parent class.
Changed the generate images step to use a composition with a render size derived from the smallest video in the asset's video tracks.
1 parent b6b3897 commit 5fe9a6c

File tree

4 files changed

+22
-12
lines changed

4 files changed

+22
-12
lines changed

Diff for: .gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,6 @@ DerivedData
2525
Carthage
2626

2727
Pods/
28+
29+
#Jetbrains IDE
30+
.idea/

Diff for: PryntTrimmerView/Classes/Parents/AVAssetTimeSelector.swift

+7
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ public class AVAssetTimeSelector: UIView, UIScrollViewDelegate {
1515

1616
let assetPreview = AssetVideoScrollView()
1717

18+
/// The maximum duration allowed for the trimming. Change it before setting the asset, as the asset preview
19+
public var maxDuration: Double = 15 {
20+
didSet {
21+
assetPreview.maxDuration = maxDuration
22+
}
23+
}
24+
1825
/// The asset to be displayed in the underlying scroll view. Setting a new asset will automatically refresh the thumbnails.
1926
public var asset: AVAsset? {
2027
didSet {

Diff for: PryntTrimmerView/Classes/Parents/AssetVideoScrollView.swift

+12-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class AssetVideoScrollView: UIScrollView {
1414
private var widthConstraint: NSLayoutConstraint?
1515

1616
let contentView = UIView()
17-
var maxDuration: Double = 15
17+
public var maxDuration: Double = 15
1818
private var generator: AVAssetImageGenerator?
1919

2020
override init(frame: CGRect) {
@@ -116,7 +116,6 @@ class AssetVideoScrollView: UIScrollView {
116116
}
117117

118118
private func getThumbnailTimes(for asset: AVAsset, numberOfThumbnails: Int) -> [NSValue] {
119-
120119
let timeIncrement = (asset.duration.seconds * 1000) / Double(numberOfThumbnails)
121120
var timesForThumbnails = [NSValue]()
122121
for index in 0..<numberOfThumbnails {
@@ -128,11 +127,19 @@ class AssetVideoScrollView: UIScrollView {
128127
}
129128

130129
private func generateImages(for asset: AVAsset, at times: [NSValue], with maximumSize: CGSize, visibleThumnails: Int) {
131-
132130
generator = AVAssetImageGenerator(asset: asset)
133-
generator?.appliesPreferredTrackTransform = true
134-
let scaledSize = CGSize(width: maximumSize.width * UIScreen.main.scale, height: maximumSize.height * UIScreen.main.scale)
131+
let scaledSize = CGSize(width: maximumSize.width * UIScreen.main.scale, height: maximumSize.height * UIScreen.main.scale)
132+
let composition = AVMutableVideoComposition(propertiesOf: asset)
133+
var renderSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)
134+
for track in asset.tracks where track.mediaType == .video {
135+
let size = track.naturalSize
136+
if size.width <= renderSize.width && size.height <= renderSize.height {
137+
renderSize = size
138+
}
139+
}
140+
composition.renderSize = renderSize
135141
generator?.maximumSize = scaledSize
142+
generator?.videoComposition = composition
136143
var count = 0
137144

138145
let handler: AVAssetImageGeneratorCompletionHandler = { [weak self] (_, cgimage, _, result, error) in

Diff for: PryntTrimmerView/Classes/Trimmer/PryntTrimmerView.swift

-7
Original file line numberDiff line numberDiff line change
@@ -71,13 +71,6 @@ public protocol TrimmerViewDelegate: class {
7171

7272
private let handleWidth: CGFloat = 15
7373

74-
/// The maximum duration allowed for the trimming. Change it before setting the asset, as the asset preview
75-
public var maxDuration: Double = 15 {
76-
didSet {
77-
assetPreview.maxDuration = maxDuration
78-
}
79-
}
80-
8174
/// The minimum duration allowed for the trimming. The handles won't pan further if the minimum duration is attained.
8275
public var minDuration: Double = 3
8376

0 commit comments

Comments
 (0)