mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Video Stickers Fixes
This commit is contained in:
parent
363d4d7f3a
commit
6ebb6d5269
@ -33,6 +33,7 @@ swift_library(
|
|||||||
"//submodules/MediaResources:MediaResources",
|
"//submodules/MediaResources:MediaResources",
|
||||||
"//submodules/MediaPlayer:UniversalMediaPlayer",
|
"//submodules/MediaPlayer:UniversalMediaPlayer",
|
||||||
"//submodules/ManagedFile:ManagedFile",
|
"//submodules/ManagedFile:ManagedFile",
|
||||||
|
"//submodules/TelegramCore:TelegramCore",
|
||||||
],
|
],
|
||||||
visibility = [
|
visibility = [
|
||||||
"//visibility:public",
|
"//visibility:public",
|
||||||
|
@ -6,6 +6,7 @@ import UniversalMediaPlayer
|
|||||||
import CoreMedia
|
import CoreMedia
|
||||||
import ManagedFile
|
import ManagedFile
|
||||||
import Accelerate
|
import Accelerate
|
||||||
|
import TelegramCore
|
||||||
|
|
||||||
private let sharedStoreQueue = Queue.concurrentDefaultQueue()
|
private let sharedStoreQueue = Queue.concurrentDefaultQueue()
|
||||||
|
|
||||||
@ -29,6 +30,9 @@ private final class VideoStickerFrameSourceCache {
|
|||||||
public private(set) var frameCount: Int32 = 0
|
public private(set) var frameCount: Int32 = 0
|
||||||
|
|
||||||
private var isStoringFrames = Set<Int>()
|
private var isStoringFrames = Set<Int>()
|
||||||
|
var storedFrames: Int {
|
||||||
|
return self.isStoringFrames.count
|
||||||
|
}
|
||||||
|
|
||||||
private var scratchBuffer: Data
|
private var scratchBuffer: Data
|
||||||
private var decodeBuffer: Data
|
private var decodeBuffer: Data
|
||||||
@ -114,6 +118,7 @@ private final class VideoStickerFrameSourceCache {
|
|||||||
if self.file.read(&frameCount, 4) != 4 {
|
if self.file.read(&frameCount, 4) != 4 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
if frameCount < 0 {
|
if frameCount < 0 {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -325,9 +330,22 @@ final class VideoStickerDirectFrameSource: AnimatedStickerFrameSource {
|
|||||||
} else if let source = self.source {
|
} else if let source = self.source {
|
||||||
let frameAndLoop = source.readFrame(maxPts: nil)
|
let frameAndLoop = source.readFrame(maxPts: nil)
|
||||||
if frameAndLoop.0 == 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.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
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user