Files
MetalVideoProcess/Examples/SimpleVideoTransitionSwitch/SimpleVideoTransition/ViewController+UIImagePickerControllerDelegate.swift
T

105 lines
3.3 KiB
Swift

//
// ViewController+UIImagePickerControllerDelegate.swift
// SimpleVideoEditor
//
// Created by RenZhu Macro on 2020/7/9.
// Copyright © 2020 RenZhu Macro. All rights reserved.
//
import Foundation
import AVFoundation
import MobileCoreServices
func orientationForTrack(asset: AVAsset) -> UIInterfaceOrientation {
let track = asset.tracks(withMediaType: .video).first
guard let txf = track?.preferredTransform else {
return .portrait
}
if txf.a == 0 && txf.b == 1.0 && txf.c == -1.0 && txf.d == 0 {
return .landscapeRight
} else if txf.a == 0 && txf.b == -1.0 && txf.c == 1.0 && txf.d == 0 {
return .landscapeLeft
} else if txf.a == 1.0 && txf.b == 0 && txf.c == 0 && txf.d == 1.0 {
return .portrait
} else if txf.a == -1.0 && txf.b == 0 && txf.c == 0 && txf.d == -1.0 {
return .portraitUpsideDown
} else {
return .unknown
}
}
extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
debugPrint("info:", info)
picker.dismiss(animated: true, completion: nil)
guard let mediaType = info[.mediaType] else {
return
}
if mediaType as! CFString == kUTTypeMovie {
debugPrint("video")
guard let url = info[.mediaURL] as? URL else {
return
}
let asset = AVAsset(url: url)
let orientation = orientationForTrack(asset: asset)
debugPrint("asset:", asset)
let item = ResourceItem(asset: asset)
item.fillType = .aspectToFill
item.orientation = orientation
switch item.orientation {
case .portrait:
break
case .landscapeLeft:
item.rotate = 90.0
break
case .landscapeRight:
item.rotate = -90.0
break
case .portraitUpsideDown:
item.rotate = 180.0
break
default:
break
}
if picker == self.subPicker {
try? self.videoEditor?.insertOverlayItem(overlayItem: item)
item.roi = CGRect(x: 0.4, y: 0.4, width: 0.8, height: 0.8)
self.subResources.append(item)
} else {
try? self.videoEditor?.insertItem(videoItem: item)
item.roi = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
self.mainResources.append(item)
}
self.rebuildPipeline()
self.subTableView.reloadData()
self.mainTableView.reloadData()
} else {
debugPrint("unsupported")
return
}
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
}
}