onevcat 5 years ago
parent
commit
e5cedd79a7
1 changed files with 29 additions and 0 deletions
  1. 29 0
      Sources/General/ImageSource/AVAssetImageDataProvider.swift

+ 29 - 0
Sources/General/ImageSource/AVAssetImageDataProvider.swift

@@ -35,35 +35,64 @@ import MobileCoreServices
 import CoreServices
 import CoreServices
 #endif
 #endif
 
 
+/// A data provider to provide thumbnail data from a given AVKit asset.
 public struct AVAssetImageDataProvider: ImageDataProvider {
 public struct AVAssetImageDataProvider: ImageDataProvider {
 
 
+    /// The possible error might be caused by the `AVAssetImageDataProvider`.
+    /// - userCancelled: The data provider process is cancelled.
+    /// - invalidImage: The retrieved image is invalid.
     public enum AVAssetImageDataProviderError: Error {
     public enum AVAssetImageDataProviderError: Error {
         case userCancelled
         case userCancelled
         case invalidImage(_ image: CGImage?)
         case invalidImage(_ image: CGImage?)
     }
     }
 
 
+    /// The asset image generator bound to `self`.
     public let assetImageGenerator: AVAssetImageGenerator
     public let assetImageGenerator: AVAssetImageGenerator
+
+    /// The time at which the image should be generate in the asset.
     public let time: CMTime
     public let time: CMTime
 
 
     private var internalKey: String {
     private var internalKey: String {
         return (assetImageGenerator.asset as? AVURLAsset)?.url.absoluteString ?? UUID().uuidString
         return (assetImageGenerator.asset as? AVURLAsset)?.url.absoluteString ?? UUID().uuidString
     }
     }
 
 
+    /// The cache key used by `self`.
     public var cacheKey: String {
     public var cacheKey: String {
         return "\(internalKey)_\(time.seconds)"
         return "\(internalKey)_\(time.seconds)"
     }
     }
 
 
+    /// Creates an asset image data provider.
+    /// - Parameters:
+    ///   - assetImageGenerator: The asset image generator controls data providing behaviors.
+    ///   - time: At which time in the asset the image should be generated.
     public init(assetImageGenerator: AVAssetImageGenerator, time: CMTime) {
     public init(assetImageGenerator: AVAssetImageGenerator, time: CMTime) {
         self.assetImageGenerator = assetImageGenerator
         self.assetImageGenerator = assetImageGenerator
         self.time = time
         self.time = time
     }
     }
 
 
+    /// Creates an asset image data provider.
+    /// - Parameters:
+    ///   - assetURL: The URL of asset for providing image data.
+    ///   - time: At which time in the asset the image should be generated.
+    ///
+    /// This method uses `assetURL` to create an `AVAssetImageGenerator` object and calls
+    /// the `init(assetImageGenerator:time:)` initializer.
+    ///
     public init(assetURL: URL, time: CMTime) {
     public init(assetURL: URL, time: CMTime) {
         let asset = AVAsset(url: assetURL)
         let asset = AVAsset(url: assetURL)
         let generator = AVAssetImageGenerator(asset: asset)
         let generator = AVAssetImageGenerator(asset: asset)
         self.init(assetImageGenerator: generator, time: time)
         self.init(assetImageGenerator: generator, time: time)
     }
     }
 
 
+    /// Creates an asset image data provider.
+    ///
+    /// - Parameters:
+    ///   - assetURL: The URL of asset for providing image data.
+    ///   - seconds: At which time in seconds in the asset the image should be generated.
+    ///
+    /// This method uses `assetURL` to create an `AVAssetImageGenerator` object, uses `seconds` to create a `CMTime`,
+    /// and calls the `init(assetImageGenerator:time:)` initializer.
+    ///
     public init(assetURL: URL, seconds: TimeInterval) {
     public init(assetURL: URL, seconds: TimeInterval) {
         let time = CMTime(seconds: seconds, preferredTimescale: 600)
         let time = CMTime(seconds: seconds, preferredTimescale: 600)
         self.init(assetURL: assetURL, time: time)
         self.init(assetURL: assetURL, time: time)