mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
70 lines
2.0 KiB
Swift
70 lines
2.0 KiB
Swift
import Foundation
|
|
import AsyncDisplayKit
|
|
import Display
|
|
import AVFoundation
|
|
import SwiftSignalKit
|
|
|
|
private final class CameraPreviewNodeLayerNullAction: NSObject, CAAction {
|
|
@objc func run(forKey event: String, object anObject: Any, arguments dict: [AnyHashable : Any]?) {
|
|
}
|
|
}
|
|
|
|
private final class CameraPreviewNodeLayer: AVSampleBufferDisplayLayer {
|
|
override func action(forKey event: String) -> CAAction? {
|
|
return CameraPreviewNodeLayerNullAction()
|
|
}
|
|
}
|
|
|
|
public final class CameraPreviewNode: ASDisplayNode {
|
|
private var displayLayer: AVSampleBufferDisplayLayer
|
|
|
|
private let fadeNode: ASDisplayNode
|
|
private var fadedIn = false
|
|
|
|
public override init() {
|
|
self.displayLayer = AVSampleBufferDisplayLayer()
|
|
self.displayLayer.videoGravity = .resizeAspectFill
|
|
|
|
self.fadeNode = ASDisplayNode()
|
|
self.fadeNode.backgroundColor = .black
|
|
self.fadeNode.isUserInteractionEnabled = false
|
|
|
|
super.init()
|
|
|
|
self.clipsToBounds = true
|
|
|
|
self.layer.addSublayer(self.displayLayer)
|
|
|
|
self.addSubnode(self.fadeNode)
|
|
}
|
|
|
|
func prepare() {
|
|
DispatchQueue.main.async {
|
|
self.displayLayer.flushAndRemoveImage()
|
|
}
|
|
}
|
|
|
|
func enqueue(_ sampleBuffer: CMSampleBuffer) {
|
|
self.displayLayer.enqueue(sampleBuffer)
|
|
|
|
if !self.fadedIn {
|
|
self.fadedIn = true
|
|
Queue.mainQueue().after(0.2) {
|
|
self.fadeNode.alpha = 0.0
|
|
self.fadeNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.3)
|
|
}
|
|
}
|
|
}
|
|
|
|
override public func layout() {
|
|
super.layout()
|
|
|
|
var transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2.0)
|
|
transform = transform.scaledBy(x: 1.0, y: 1.0)
|
|
self.displayLayer.setAffineTransform(transform)
|
|
|
|
self.displayLayer.frame = self.bounds
|
|
self.fadeNode.frame = self.bounds
|
|
}
|
|
}
|