mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-24 07:05:35 +00:00
Pre-release fixes
This commit is contained in:
@@ -24,7 +24,7 @@ final class PresentationCallToneRenderer {
|
||||
private var toneRendererAudioSessionActivated = false
|
||||
private let audioLevelPipe = ValuePipe<Float>()
|
||||
|
||||
init(tone: PresentationCallTone) {
|
||||
init(tone: PresentationCallTone, completed: (() -> Void)? = nil) {
|
||||
let queue = Queue.mainQueue()
|
||||
self.queue = queue
|
||||
|
||||
@@ -52,6 +52,7 @@ final class PresentationCallToneRenderer {
|
||||
let toneDataOffset = Atomic<Int>(value: 0)
|
||||
|
||||
let toneData = Atomic<Data?>(value: nil)
|
||||
let reportedCompletion = Atomic<Bool>(value: false)
|
||||
|
||||
self.toneRenderer.beginRequestingFrames(queue: DispatchQueue.global(), takeFrame: {
|
||||
var data = toneData.with { $0 }
|
||||
@@ -63,6 +64,9 @@ final class PresentationCallToneRenderer {
|
||||
}
|
||||
|
||||
guard let toneData = data else {
|
||||
if !reportedCompletion.swap(true) {
|
||||
completed?()
|
||||
}
|
||||
return .finished
|
||||
}
|
||||
|
||||
@@ -83,6 +87,11 @@ final class PresentationCallToneRenderer {
|
||||
|
||||
if let takeOffset = takeOffset {
|
||||
if let toneDataMaxOffset = toneDataMaxOffset, takeOffset >= toneDataMaxOffset {
|
||||
if !reportedCompletion.swap(true) {
|
||||
Queue.mainQueue().after(1.0, {
|
||||
completed?()
|
||||
})
|
||||
}
|
||||
return .finished
|
||||
}
|
||||
|
||||
@@ -117,6 +126,9 @@ final class PresentationCallToneRenderer {
|
||||
|
||||
let status = CMBlockBufferCreateWithMemoryBlock(allocator: nil, memoryBlock: bytes, blockLength: frameSize, blockAllocator: nil, customBlockSource: nil, offsetToData: 0, dataLength: frameSize, flags: 0, blockBufferOut: &blockBuffer)
|
||||
if status != noErr {
|
||||
if !reportedCompletion.swap(true) {
|
||||
completed?()
|
||||
}
|
||||
return .finished
|
||||
}
|
||||
|
||||
@@ -127,15 +139,24 @@ final class PresentationCallToneRenderer {
|
||||
var sampleBuffer: CMSampleBuffer?
|
||||
var sampleSize = frameSize
|
||||
guard CMSampleBufferCreate(allocator: nil, dataBuffer: blockBuffer, dataReady: true, makeDataReadyCallback: nil, refcon: nil, formatDescription: nil, sampleCount: 1, sampleTimingEntryCount: 1, sampleTimingArray: &timingInfo, sampleSizeEntryCount: 1, sampleSizeArray: &sampleSize, sampleBufferOut: &sampleBuffer) == noErr else {
|
||||
if !reportedCompletion.swap(true) {
|
||||
completed?()
|
||||
}
|
||||
return .finished
|
||||
}
|
||||
|
||||
if let sampleBuffer = sampleBuffer {
|
||||
return .frame(MediaTrackFrame(type: .audio, sampleBuffer: sampleBuffer, resetDecoder: false, decoded: true))
|
||||
} else {
|
||||
if !reportedCompletion.swap(true) {
|
||||
completed?()
|
||||
}
|
||||
return .finished
|
||||
}
|
||||
} else {
|
||||
if !reportedCompletion.swap(true) {
|
||||
completed?()
|
||||
}
|
||||
return .finished
|
||||
}
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user