Video Stickers Fixes

This commit is contained in:
Ilya Laktyushin 2022-01-28 15:19:21 +03:00
parent 363d4d7f3a
commit 6ebb6d5269
2 changed files with 22 additions and 3 deletions

View File

@ -33,6 +33,7 @@ swift_library(
"//submodules/MediaResources:MediaResources",
"//submodules/MediaPlayer:UniversalMediaPlayer",
"//submodules/ManagedFile:ManagedFile",
"//submodules/TelegramCore:TelegramCore",
],
visibility = [
"//visibility:public",

View File

@ -6,6 +6,7 @@ import UniversalMediaPlayer
import CoreMedia
import ManagedFile
import Accelerate
import TelegramCore
private let sharedStoreQueue = Queue.concurrentDefaultQueue()
@ -29,6 +30,9 @@ private final class VideoStickerFrameSourceCache {
public private(set) var frameCount: Int32 = 0
private var isStoringFrames = Set<Int>()
var storedFrames: Int {
return self.isStoringFrames.count
}
private var scratchBuffer: Data
private var decodeBuffer: Data
@ -114,6 +118,7 @@ private final class VideoStickerFrameSourceCache {
if self.file.read(&frameCount, 4) != 4 {
return false
}
if frameCount < 0 {
return false
}
@ -325,9 +330,22 @@ final class VideoStickerDirectFrameSource: AnimatedStickerFrameSource {
} else if let source = self.source {
let frameAndLoop = source.readFrame(maxPts: nil)
if frameAndLoop.0 == nil {
if frameAndLoop.3 && self.frameCount == 0 {
if frameAndLoop.3 {
if self.frameCount == 0 {
if let cache = self.cache {
if cache.storedFrames == frameIndex {
self.frameCount = frameIndex
self.cache?.storeFrameRateAndCount(frameRate: self.frameRate, frameCount: self.frameCount)
cache.storeFrameRateAndCount(frameRate: self.frameRate, frameCount: self.frameCount)
} else {
Logger.shared.log("VideoSticker", "Missed a frame? \(frameIndex) \(cache.storedFrames)")
}
} else {
self.frameCount = frameIndex
}
}
self.currentFrame = 0
} else {
Logger.shared.log("VideoSticker", "Skipped a frame?")
}
return nil
}