Camera and media editor improvements

This commit is contained in:
Ilya Laktyushin
2023-05-10 17:10:27 +04:00
parent c114f218b9
commit d15c48ff07
104 changed files with 9805 additions and 676 deletions

View File

@@ -0,0 +1,52 @@
import Foundation
import AVFoundation
import Metal
import MetalKit
final class ImageTextureSource: TextureSource {
weak var output: TextureConsumer?
var textureLoader: MTKTextureLoader?
var texture: MTLTexture?
init(image: UIImage, renderTarget: RenderTarget) {
guard let device = renderTarget.mtlDevice, let cgImage = image.cgImage else {
return
}
let textureLoader = MTKTextureLoader(device: device)
self.textureLoader = textureLoader
self.texture = try? textureLoader.newTexture(cgImage: cgImage, options: nil)
}
func start() {
}
func pause() {
}
func connect(to consumer: TextureConsumer) {
self.output = consumer
if let texture = self.texture {
self.output?.consumeTexture(texture, rotation: .rotate0Degrees)
}
}
}
func pixelBufferToMTLTexture(pixelBuffer:CVPixelBuffer, textureCache: CVMetalTextureCache) -> MTLTexture?
{
let width = CVPixelBufferGetWidth(pixelBuffer)
let height = CVPixelBufferGetHeight(pixelBuffer)
let format: MTLPixelFormat = .r8Unorm
var textureRef : CVMetalTexture?
let status = CVMetalTextureCacheCreateTextureFromImage(nil, textureCache, pixelBuffer, nil, format, width, height, 0, &textureRef)
if status == kCVReturnSuccess {
return CVMetalTextureGetTexture(textureRef!)
}
return nil
}