Files
GLEGram-iOS/submodules/SoftwareVideo/Sources/SampleBufferPool.swift
T
Leeksov 4647310322 GLEGram 12.5 — Initial public release
Based on Swiftgram 12.5 (Telegram iOS 12.5).
All GLEGram features ported and organized in GLEGram/ folder.

Features: Ghost Mode, Saved Deleted Messages, Content Protection Bypass,
Font Replacement, Fake Profile, Chat Export, Plugin System, and more.

See CHANGELOG_12.5.md for full details.
2026-04-06 09:48:12 +03:00

67 lines
1.8 KiB
Swift

import Foundation
import UIKit
import AVFoundation
import SwiftSignalKit
private final class SampleBufferLayerImplNullAction: NSObject, CAAction {
@objc func run(forKey event: String, object anObject: Any, arguments dict: [AnyHashable : Any]?) {
}
}
private final class SampleBufferLayerImpl: AVSampleBufferDisplayLayer {
override func action(forKey event: String) -> CAAction? {
return SampleBufferLayerImplNullAction()
}
}
public final class SampleBufferLayer {
public let layer: AVSampleBufferDisplayLayer
private let enqueue: (AVSampleBufferDisplayLayer) -> Void
public var isFreed: Bool = false
fileprivate init(layer: AVSampleBufferDisplayLayer, enqueue: @escaping (AVSampleBufferDisplayLayer) -> Void) {
self.layer = layer
self.enqueue = enqueue
}
deinit {
if !self.isFreed {
self.enqueue(self.layer)
}
}
}
private let pool = Atomic<[AVSampleBufferDisplayLayer]>(value: [])
public func clearSampleBufferLayerPoll() {
let _ = pool.modify { _ in return [] }
}
public func takeSampleBufferLayer() -> SampleBufferLayer {
var layer: AVSampleBufferDisplayLayer?
let _ = pool.modify { list in
var list = list
if !list.isEmpty {
layer = list.removeLast()
}
return list
}
if layer == nil {
layer = SampleBufferLayerImpl()
}
return SampleBufferLayer(layer: layer!, enqueue: { layer in
Queue.mainQueue().async {
layer.flushAndRemoveImage()
layer.setAffineTransform(CGAffineTransform.identity)
#if targetEnvironment(simulator)
#else
let _ = pool.modify { list in
var list = list
list.append(layer)
return list
}
#endif
}
})
}