-
Notifications
You must be signed in to change notification settings - Fork 371
Open
Description
The Phones memory fills up too quickly and it crashes pretty quickly even on a 3 second video.
import UIKit
import GPUImage
class MainThreadRenderer: ImageConsumer {
var maximumInputs: UInt = 1
var isProcessing: Bool = false
var sources: SourceContainer = SourceContainer()
private let renderView: RenderView
private let lock = NSLock()
init(renderView: RenderView) {
self.renderView = renderView
}
func newTextureAvailable(_ texture: Texture, fromSourceIndex: UInt) {
lock.lock()
DispatchQueue.main.async { [weak self] in
print("Processing")
self?.renderView.newTextureAvailable(texture, fromSourceIndex: fromSourceIndex)
self?.lock.unlock()
}
}
}
class ViewController: UIViewController {
var renderView: RenderView!
var mainRenderer: MainThreadRenderer!
var camera: Camera!
var movie: MovieInput!
var hue: HueAdjustment!
var saturation: SaturationAdjustment!
var contrast: ContrastAdjustment!
var contrastSlider: UISlider!
var lookupFilter: LookupFilter!
override func viewDidLoad() {
super.viewDidLoad()
guard let bundleURL = Bundle.main.resourceURL else {
return
}
let movieURL = URL(string: "test2.MP4", relativeTo: bundleURL)!
print("MOVIE URL: \(movieURL)")
do {
movie = try MovieInput(url: movieURL, playAtActualSpeed: true, loop: true)
renderView = RenderView(frame: view.bounds)
view.addSubview(renderView)
mainRenderer = MainThreadRenderer(renderView: renderView)
camera = try Camera(sessionPreset: .vga640x480)
print("MOVIE READY \(movie != nil)")
// contrastSlider = createSlider(min: -1, max: 1, value: 0, action: #selector(contrastChanged(_:)))
// let stack = UIStackView(arrangedSubviews: [
// contrastSlider
//// labeledSlider("Exposure", slider: exposureSlider),
//// labeledSlider("Contrast", slider: contrastSlider),
//// labeledSlider("Saturation", slider: saturationSlider),
//// labeledSlider("Temperature", slider: temperatureSlider),
//// labeledSlider("Tint", slider: tintSlider)
// ])
// stack.axis = .vertical
// stack.spacing = 12
// stack.translatesAutoresizingMaskIntoConstraints = false
// view.addSubview(stack)
//
// NSLayoutConstraint.activate([
// stack.topAnchor.constraint(equalTo: renderView.bottomAnchor, constant: 16),
// stack.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16),
// stack.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16)
// ])
hue = HueAdjustment()
saturation = SaturationAdjustment()
contrast = ContrastAdjustment()
lookupFilter = LookupFilter()
lookupFilter.lookupImage = PictureInput(imageName: "lookup_old")
print("AFTER LOOKUP FILTER")
movie --> lookupFilter --> hue --> saturation --> contrast --> mainRenderer
movie.runBenchmark = false
movie.start()
} catch {
print("Couldn't process movie with error: \(error)")
}
}
@objc func contrastChanged(_ sender: UISlider) {
// hue.hue = sender.value
}
func changeHue(newValue: Float) {
guard let hue = hue else { return }
hue.hue = newValue
}
func changeSaturation(newValue: Float) {
guard let saturation = saturation else { return }
saturation.saturation = newValue
}
func changeContrast(newValue: Float) {
guard let contrast = contrast else { return }
contrast.contrast = newValue
}
func createSlider(min: Float, max: Float, value: Float, action: Selector) -> UISlider {
let slider = UISlider()
slider.minimumValue = min
slider.maximumValue = max
slider.value = value
slider.addTarget(self, action: action, for: .valueChanged)
return slider
}
}
Metadata
Metadata
Assignees
Labels
No labels