Skip to content

Instantly share code, notes, and snippets.

@anupamchugh
Last active February 14, 2023 00:19
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anupamchugh/165dae0ee5aa081bcefc22629821f06d to your computer and use it in GitHub Desktop.
Save anupamchugh/165dae0ee5aa081bcefc22629821f06d to your computer and use it in GitHub Desktop.
import SwiftUI
import AVKit
import CoreImage
import CoreImage.CIFilterBuiltins
struct ContentView: View {
@State private var currentFilter = 0
var filters : [CIFilter?] = [nil, CIFilter.sepiaTone(), CIFilter.pixellate(), CIFilter.comicEffect()]
let player = AVPlayer(url: Bundle.main.url(forResource: "tennis", withExtension: "mp4")!)
var body: some View {
VStack{
VideoPlayer(player: player)
.onAppear{
player.currentItem!.videoComposition = AVVideoComposition(asset: player.currentItem!.asset, applyingCIFiltersWithHandler: { request in
if let filter = self.filters[currentFilter]{
let source = request.sourceImage.clampedToExtent()
filter.setValue(source, forKey: kCIInputImageKey)
if filter.inputKeys.contains(kCIInputScaleKey){
filter.setValue(30, forKey: kCIInputScaleKey)
}
let output = filter.outputImage!.cropped(to: request.sourceImage.extent)
request.finish(with: output, context: nil)
}
else{
request.finish(with: request.sourceImage, context: nil)
}
})
}
Picker(selection: $currentFilter, label: Text("Select Filter")) {
ForEach(0..<filters.count) { index in
Text(self.filters[index]?.name ?? "None").tag(index)
}
}.pickerStyle(SegmentedPickerStyle())
Text("Value: \(self.filters[currentFilter]?.name ?? "None")")
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment