mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 14:45:21 +00:00
Load frames for video preview from network
This commit is contained in:
@@ -12,6 +12,9 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa
|
||||
let readCount = min(resourceSize - context.readingOffset, Int(bufferSize))
|
||||
let requestRange: Range<Int> = context.readingOffset ..< (context.readingOffset + readCount)
|
||||
|
||||
context.currentNumberOfReads += 1
|
||||
context.currentReadBytes += readCount
|
||||
|
||||
let semaphore = DispatchSemaphore(value: 0)
|
||||
data = context.mediaBox.resourceData(context.fileReference.media.resource, size: context.size, in: requestRange, mode: .partial)
|
||||
let requiredDataIsNotLocallyAvailable = context.requiredDataIsNotLocallyAvailable
|
||||
@@ -29,10 +32,15 @@ private func readPacketCallback(userData: UnsafeMutableRawPointer?, buffer: Unsa
|
||||
semaphore.signal()
|
||||
}
|
||||
})
|
||||
var fetchDisposable: Disposable?
|
||||
if context.videoStream != nil {
|
||||
fetchDisposable = fetchedMediaResource(mediaBox: context.mediaBox, reference: context.fileReference.resourceReference(context.fileReference.media.resource), ranges: [(requestRange, .elevated)]).start()
|
||||
}
|
||||
semaphore.wait()
|
||||
|
||||
disposable.dispose()
|
||||
cancelDisposable.dispose()
|
||||
fetchDisposable?.dispose()
|
||||
|
||||
if let fetchedData = fetchedData {
|
||||
fetchedData.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) -> Void in
|
||||
@@ -91,6 +99,8 @@ private final class UniversalSoftwareVideoSourceImpl {
|
||||
|
||||
fileprivate var cancelRead: Signal<Bool, NoError>
|
||||
fileprivate var requiredDataIsNotLocallyAvailable: (() -> Void)?
|
||||
fileprivate var currentNumberOfReads: Int = 0
|
||||
fileprivate var currentReadBytes: Int = 0
|
||||
|
||||
init?(mediaBox: MediaBox, fileReference: FileMediaReference, state: ValuePromise<UniversalSoftwareVideoSourceState>, cancelInitialization: Signal<Bool, NoError>) {
|
||||
guard let size = fileReference.media.size else {
|
||||
@@ -229,10 +239,13 @@ private final class UniversalSoftwareVideoSourceImpl {
|
||||
|
||||
func readImage() -> (UIImage?, CGFloat, CGFloat, Bool) {
|
||||
if let videoStream = self.videoStream {
|
||||
for _ in 0 ..< 10 {
|
||||
self.currentNumberOfReads = 0
|
||||
self.currentReadBytes = 0
|
||||
for i in 0 ..< 10 {
|
||||
let (decodableFrame, loop) = self.readDecodableFrame()
|
||||
if let decodableFrame = decodableFrame {
|
||||
if let renderedFrame = videoStream.decoder.render(frame: decodableFrame) {
|
||||
print("Frame rendered in \(self.currentNumberOfReads) reads, \(self.currentReadBytes) bytes, total frames read: \(i + 1)")
|
||||
return (renderedFrame, CGFloat(videoStream.rotationAngle), CGFloat(videoStream.aspect), loop)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user