Merge branch 'master' of gitlab.com:peter-iakovlev/telegram-ios

This commit is contained in:
Ilya Laktyushin 2021-06-18 20:13:52 +03:00
commit 0695fd13cf
2 changed files with 31 additions and 31 deletions

View File

@ -284,15 +284,11 @@ private final class MediaPlayerContext {
}
let currentTimestamp = CMTimeGetSeconds(CMTimebaseGetTime(loadedState.controlTimebase.timebase))
var duration: Double = 0.0
var videoStatus: MediaTrackFrameBufferStatus?
if let videoTrackFrameBuffer = loadedState.mediaBuffers.videoBuffer {
videoStatus = videoTrackFrameBuffer.status(at: currentTimestamp)
duration = max(duration, CMTimeGetSeconds(videoTrackFrameBuffer.duration))
}
var audioStatus: MediaTrackFrameBufferStatus?
if let audioTrackFrameBuffer = loadedState.mediaBuffers.audioBuffer {
audioStatus = audioTrackFrameBuffer.status(at: currentTimestamp)
duration = max(duration, CMTimeGetSeconds(audioTrackFrameBuffer.duration))
}
loadedDuration = duration
@ -447,6 +443,7 @@ private final class MediaPlayerContext {
switch self.state {
case .empty:
self.stoppedAtEnd = false
self.lastStatusUpdateTimestamp = nil
if self.enableSound {
let queue = self.queue
@ -476,6 +473,7 @@ private final class MediaPlayerContext {
}
self.seek(timestamp: 0.0, action: .play)
case let .seeking(frameSource, timestamp, seekState, disposable, _, enableSound):
self.stoppedAtEnd = false
self.state = .seeking(frameSource: frameSource, timestamp: timestamp, seekState: seekState, disposable: disposable, action: .play, enableSound: enableSound)
self.lastStatusUpdateTimestamp = nil
case let .paused(loadedState):
@ -499,12 +497,14 @@ private final class MediaPlayerContext {
fadeTimer.start()
}
if loadedState.lostAudioSession {
if loadedState.lostAudioSession && !self.stoppedAtEnd {
self.stoppedAtEnd = false
let timestamp = CMTimeGetSeconds(CMTimebaseGetTime(loadedState.controlTimebase.timebase))
self.seek(timestamp: timestamp, action: .play)
} else {
self.lastStatusUpdateTimestamp = nil
if self.stoppedAtEnd {
self.stoppedAtEnd = false
self.seek(timestamp: 0.0, action: .play)
} else {
self.state = .playing(loadedState)
@ -512,10 +512,8 @@ private final class MediaPlayerContext {
}
}
case .playing:
break
self.stoppedAtEnd = false
}
self.stoppedAtEnd = false
}
fileprivate func playOnceWithSound(playAndRecord: Bool, seek: MediaPlayerSeek = .start) {
@ -962,28 +960,28 @@ private final class MediaPlayerContext {
self.playerStatus.set(.single(status))
let _ = self.playerStatusValue.swap(status)
}
if performActionAtEndNow && !self.stoppedAtEnd {
switch self.actionAtEnd {
case let .loop(f):
self.stoppedAtEnd = false
self.seek(timestamp: 0.0, action: .play)
f?()
case .stop:
self.stoppedAtEnd = true
self.pause(lostAudioSession: false)
case let .action(f):
self.stoppedAtEnd = true
self.pause(lostAudioSession: false)
f()
case let .loopDisablingSound(f):
self.stoppedAtEnd = false
self.enableSound = false
self.seek(timestamp: 0.0, action: .play)
f()
if performActionAtEndNow {
if !self.stoppedAtEnd {
switch self.actionAtEnd {
case let .loop(f):
self.stoppedAtEnd = false
self.seek(timestamp: 0.0, action: .play)
f?()
case .stop:
self.stoppedAtEnd = true
self.pause(lostAudioSession: false)
case let .action(f):
self.stoppedAtEnd = true
self.pause(lostAudioSession: false)
f()
case let .loopDisablingSound(f):
self.stoppedAtEnd = false
self.enableSound = false
self.seek(timestamp: 0.0, action: .play)
f()
}
}
} else {
self.stoppedAtEnd = false
}
}
}

View File

@ -229,7 +229,9 @@ class ChatMessageBackground: ASDisplayNode {
}
} else if transition.isAnimated {
if let previousContents = self.imageNode.layer.contents, let image = image {
self.imageNode.layer.animate(from: previousContents as AnyObject, to: image.cgImage! as AnyObject, keyPath: "contents", timingFunction: CAMediaTimingFunctionName.easeInEaseOut.rawValue, duration: 0.42)
if (previousContents as AnyObject) !== image.cgImage {
self.imageNode.layer.animate(from: previousContents as AnyObject, to: image.cgImage! as AnyObject, keyPath: "contents", timingFunction: CAMediaTimingFunctionName.easeInEaseOut.rawValue, duration: 0.42)
}
}
}