mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Fix stuck frames while scrubbing video
This commit is contained in:
parent
209319ec23
commit
db4aa60e6e
@ -63,12 +63,13 @@ private final class MediaPlayerFramePreviewImpl {
|
||||
let takeDisposable = MetaDisposable()
|
||||
let disposable = (self.context.get()
|
||||
|> take(1)).start(next: { [weak self] context in
|
||||
queue.async {
|
||||
queue.justDispatch {
|
||||
guard context.queue === queue else {
|
||||
return
|
||||
}
|
||||
context.with { context in
|
||||
let disposable = context.source.takeFrame(at: timestamp).start(next: { result in
|
||||
queue.async {
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
@ -85,14 +86,17 @@ private final class MediaPlayerFramePreviewImpl {
|
||||
strongSelf.generateFrame(at: nextFrameTimestamp)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
takeDisposable.set(disposable)
|
||||
}
|
||||
}
|
||||
})
|
||||
self.currentFrameDisposable.set(ActionDisposable {
|
||||
queue.async {
|
||||
takeDisposable.dispose()
|
||||
disposable.dispose()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -249,11 +249,11 @@ private final class UniversalSoftwareVideoSourceImpl {
|
||||
|
||||
self.currentNumberOfReads = 0
|
||||
self.currentReadBytes = 0
|
||||
for i in 0 ..< 10 {
|
||||
for _ 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)")
|
||||
//print("Frame rendered in \(self.currentNumberOfReads) reads, \(self.currentReadBytes) bytes, total frames read: \(i + 1)")
|
||||
return (renderedFrame, CGFloat(videoStream.rotationAngle), CGFloat(videoStream.aspect), loop)
|
||||
}
|
||||
}
|
||||
@ -332,11 +332,11 @@ private final class UniversalSoftwareVideoSourceThread: NSObject {
|
||||
source.cancelRead = params.cancel
|
||||
source.requiredDataIsNotLocallyAvailable = params.requiredDataIsNotLocallyAvailable
|
||||
source.state.set(.generatingFrame)
|
||||
let startTime = CFAbsoluteTimeGetCurrent()
|
||||
let image = source.readImage(at: params.timestamp).0
|
||||
params.completion(image)
|
||||
source.cancelRead = .single(false)
|
||||
source.requiredDataIsNotLocallyAvailable = nil
|
||||
source.state.set(.ready)
|
||||
print("take frame: \(CFAbsoluteTimeGetCurrent() - startTime) s")
|
||||
params.completion(image)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -605,9 +605,6 @@ private final class MultipartFetchManager {
|
||||
while 1024 * 1024 % downloadRange.count != 0 {
|
||||
downloadRange = downloadRange.lowerBound ..< (downloadRange.upperBound - 1)
|
||||
}
|
||||
if case .maximum = priority {
|
||||
print("fetch maximum \(downloadRange.lowerBound), \(downloadRange.count)")
|
||||
}
|
||||
|
||||
var intervalIndexSet = IndexSet(integersIn: intervalsToFetch[currentIntervalIndex].0)
|
||||
intervalIndexSet.remove(integersIn: downloadRange)
|
||||
|
Loading…
x
Reference in New Issue
Block a user