Skip to content

Commit

Permalink
Media Processing DataDog Observability Support (#49)
Browse files Browse the repository at this point in the history
* feat: processing wip

* feat: [CC-1000] remove videosize parameter

* feat: [CC-1000] supply initializer and assign pixel width / height to absolute values

* feat: [CC-1000] add tracking delegate

* feat: [CC-1000] remove todo

* update processed video + add new error type

* use result type response

* use result callback

* use result callback

* use result based responses

* add processing result typealias

* provide asset id on failures

* handle cancelled case

* remove unused parameter
  • Loading branch information
zeph-cohen10 committed May 28, 2024
1 parent 85bafee commit 5677fac
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 55 deletions.
42 changes: 29 additions & 13 deletions Source/Filters/Video/YPVideoFiltersVC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ public enum YPVideoFiltersType {
case Cover
}

public protocol YPVideoProcessingDelegate: AnyObject {
func willBeginVideoProcessing(assetIdentifier: String)
func didCompleteVideoProcessing(processedVideo: ProcessedVideo)
func didFailVideoProcessing(error: LibraryMediaManagerError)
}

open class YPVideoFiltersVC: UIViewController, IsMediaFilterVC {

/// Designated initializer
Expand Down Expand Up @@ -46,6 +52,7 @@ open class YPVideoFiltersVC: UIViewController, IsMediaFilterVC {
public var isFromSelectionVC = false
public var shouldMute = false
public var shouldShowDone = false
public weak var videoProcessingDelegate: YPVideoProcessingDelegate?

var coverImageTime: CMTime?
var coverTrimTimes: (startTime: CMTime, endTime: CMTime)?
Expand Down Expand Up @@ -357,21 +364,26 @@ open class YPVideoFiltersVC: UIViewController, IsMediaFilterVC {

// cropping and trimming simultaneously to reduce total transcoding time

let callback: (_ videoURL: URL?) -> Void = { [weak self] (url) in
let result: ProcessingResult = { [weak self] result in
DispatchQueue.main.async {
if let url = url {
self?.completeSave(thumbnail: self?.croppedImage ?? UIImage(), videoUrl: url, asset: self?.inputVideo.asset, timeRange: timeRange)
} else {
switch result {
case let .success(video):
self?.videoProcessingDelegate?.didCompleteVideoProcessing(processedVideo: video)
self?.completeSave(thumbnail: self?.croppedImage ?? UIImage(), videoUrl: video.videoUrl, asset: self?.inputVideo.asset, timeRange: timeRange)
case let .failure(error):
self?.videoProcessingDelegate?.didFailVideoProcessing(error: error)
ypLog("YPVideoFiltersVC -> Invalid asset url.")
self?.resetView()
}
}
}

if let videoAsset = inputVideo.asset {
mediaManager.fetchVideoUrlAndCrop(for: videoAsset, cropRect: inputVideo.cropRect!, timeRange: timeRange, shouldMute: shouldMute, callback: callback)
videoProcessingDelegate?.willBeginVideoProcessing(assetIdentifier: videoAsset.localIdentifier)
mediaManager.fetchVideoUrlAndCrop(for: videoAsset, cropRect: inputVideo.cropRect!, timeRange: timeRange, shouldMute: shouldMute, result: result)
} else {
mediaManager.fetchVideoUrlAndCrop(for: inputVideo.url, cropRect: inputVideo.cropRect!, timeRange: timeRange, shouldMute: shouldMute, callback: callback)
videoProcessingDelegate?.willBeginVideoProcessing(assetIdentifier: inputVideo.url.absoluteString)
mediaManager.fetchVideoUrlAndCrop(for: inputVideo.url, cropRect: inputVideo.cropRect!, timeRange: timeRange, shouldMute: shouldMute, result: result)
}

// set up notification listener
Expand Down Expand Up @@ -536,24 +548,28 @@ open class YPVideoFiltersVC: UIViewController, IsMediaFilterVC {
startTime != coverTrimTimes?.startTime || endTime != coverTrimTimes?.endTime {
let timerange = CMTimeRange(start: startTime, end: endTime)

let callback: (_ videoURL: URL?) -> Void = { [weak self] (url) in
let result: ProcessingResult = { [weak self] result in
DispatchQueue.main.async {
if let url = url {
let trimmedAsset = AVAsset(url: url)
switch result {
case let .success(video):
self?.videoProcessingDelegate?.didCompleteVideoProcessing(processedVideo: video)
let trimmedAsset = AVAsset(url: video.videoUrl)
self?.setupGenerator(trimmedAsset)
self?.coverThumbSelectorView.asset = trimmedAsset
self?.coverTrimTimes = (startTime: startTime, endTime: endTime)
self?.generateCoverImageAtTime(startTime)
} else {
case let .failure(error):
self?.videoProcessingDelegate?.didFailVideoProcessing(error: error)
ypLog("YPVideoFiltersVC -> Invalid asset url.")

}
}
}
if let videoAsset = inputVideo.asset {
mediaManager.fetchVideoUrlAndCrop(for: videoAsset, cropRect: inputVideo.cropRect!, timeRange: timerange, shouldMute: false, compressionTypeOverride: AVAssetExportPresetPassthrough, callback: callback)
videoProcessingDelegate?.willBeginVideoProcessing(assetIdentifier: videoAsset.localIdentifier)
mediaManager.fetchVideoUrlAndCrop(for: videoAsset, cropRect: inputVideo.cropRect!, timeRange: timerange, shouldMute: false, compressionTypeOverride: AVAssetExportPresetPassthrough, result: result)
} else {
mediaManager.fetchVideoUrlAndCrop(for: inputVideo.url, cropRect: inputVideo.cropRect!, timeRange: timerange, shouldMute: false, compressionTypeOverride: AVAssetExportPresetPassthrough, callback: callback)
videoProcessingDelegate?.willBeginVideoProcessing(assetIdentifier: inputVideo.url.absoluteString)
mediaManager.fetchVideoUrlAndCrop(for: inputVideo.url, cropRect: inputVideo.cropRect!, timeRange: timerange, shouldMute: false, compressionTypeOverride: AVAssetExportPresetPassthrough, result: result)
}
return true
} else {
Expand Down
Loading

0 comments on commit 5677fac

Please sign in to comment.