macos related changes

This commit is contained in:
Mikhail Filimonov 2025-01-02 07:51:34 +04:00
parent 04eb8524c8
commit 91a7d728e3
5 changed files with 27 additions and 104 deletions

View File

@ -43,7 +43,6 @@ let package = Package(
"MediaPlayerAudioRenderer.swift", "MediaPlayerAudioRenderer.swift",
"MediaPlayerFramePreview.swift", "MediaPlayerFramePreview.swift",
"VideoPlayerProxy.swift", "VideoPlayerProxy.swift",
"ChunkMediaPlayer.swift",
"ChunkMediaPlayerV2.swift", "ChunkMediaPlayerV2.swift",
"ChunkMediaPlayerDirectFetchSourceImpl.swift" "ChunkMediaPlayerDirectFetchSourceImpl.swift"
]), ]),

View File

@ -1,10 +1,10 @@
import Foundation import Foundation
import UIKit
import SwiftSignalKit import SwiftSignalKit
import Postbox import Postbox
import CoreMedia import CoreMedia
import TelegramCore import TelegramCore
import TelegramAudio
public final class ChunkMediaPlayerPart { public final class ChunkMediaPlayerPart {
public enum Id: Hashable { public enum Id: Hashable {
@ -118,6 +118,11 @@ public final class ChunkMediaPlayerPartsState {
} }
} }
#if os(iOS)
import UIKit
import TelegramAudio
public protocol ChunkMediaPlayer: AnyObject { public protocol ChunkMediaPlayer: AnyObject {
var status: Signal<MediaPlayerStatus, NoError> { get } var status: Signal<MediaPlayerStatus, NoError> { get }
var audioLevelEvents: Signal<Float, NoError> { get } var audioLevelEvents: Signal<Float, NoError> { get }
@ -136,3 +141,5 @@ public protocol ChunkMediaPlayer: AnyObject {
func seek(timestamp: Double, play: Bool?) func seek(timestamp: Double, play: Bool?)
func setBaseRate(_ baseRate: Double) func setBaseRate(_ baseRate: Double)
} }
#endif

View File

@ -62,22 +62,22 @@ private func FFMpegFileReader_seekCallback(userData: UnsafeMutableRawPointer?, o
} }
} }
final class FFMpegFileReader { public final class FFMpegFileReader {
enum SourceDescription { public enum SourceDescription {
case file(String) case file(String)
case resource(mediaBox: MediaBox, resource: MediaResource, size: Int64) case resource(mediaBox: MediaBox, resource: MediaResource, size: Int64)
} }
final class StreamInfo: Equatable { public final class StreamInfo: Equatable {
let index: Int public let index: Int
let codecId: Int32 public let codecId: Int32
let startTime: CMTime public let startTime: CMTime
let duration: CMTime public let duration: CMTime
let timeBase: CMTimeValue public let timeBase: CMTimeValue
let timeScale: CMTimeScale public let timeScale: CMTimeScale
let fps: CMTime public let fps: CMTime
init(index: Int, codecId: Int32, startTime: CMTime, duration: CMTime, timeBase: CMTimeValue, timeScale: CMTimeScale, fps: CMTime) { public init(index: Int, codecId: Int32, startTime: CMTime, duration: CMTime, timeBase: CMTimeValue, timeScale: CMTimeScale, fps: CMTime) {
self.index = index self.index = index
self.codecId = codecId self.codecId = codecId
self.startTime = startTime self.startTime = startTime
@ -87,7 +87,7 @@ final class FFMpegFileReader {
self.fps = fps self.fps = fps
} }
static func ==(lhs: StreamInfo, rhs: StreamInfo) -> Bool { public static func ==(lhs: StreamInfo, rhs: StreamInfo) -> Bool {
if lhs.index != rhs.index { if lhs.index != rhs.index {
return false return false
} }
@ -169,8 +169,8 @@ final class FFMpegFileReader {
} }
} }
enum SelectedStream { public enum SelectedStream {
enum MediaType { public enum MediaType {
case audio case audio
case video case video
} }
@ -179,7 +179,7 @@ final class FFMpegFileReader {
case index(Int) case index(Int)
} }
enum ReadFrameResult { public enum ReadFrameResult {
case frame(MediaTrackFrame) case frame(MediaTrackFrame)
case waitingForMoreData case waitingForMoreData
case endOfStream case endOfStream

View File

@ -6,95 +6,10 @@ import VideoToolbox
import Postbox import Postbox
#if os(macOS) #if os(macOS)
private let internal_isHardwareAv1Supported: Bool = { public let internal_isHardwareAv1Supported: Bool = {
let value = VTIsHardwareDecodeSupported(kCMVideoCodecType_AV1) let value = VTIsHardwareDecodeSupported(kCMVideoCodecType_AV1)
return value return value
}() }()
public final class ChunkMediaPlayerPart {
public enum Id: Hashable {
case tempFile(path: String)
case directFile(path: String, audio: DirectStream?, video: DirectStream?)
}
public struct DirectStream: Hashable {
public let index: Int
public let startPts: CMTime
public let endPts: CMTime
public let duration: Double
public init(index: Int, startPts: CMTime, endPts: CMTime, duration: Double) {
self.index = index
self.startPts = startPts
self.endPts = endPts
self.duration = duration
}
}
public enum Content {
public final class TempFile {
public let file: TempBoxFile
public init(file: TempBoxFile) {
self.file = file
}
deinit {
TempBox.shared.dispose(self.file)
}
}
public final class FFMpegDirectFile {
public let path: String
public let audio: DirectStream?
public let video: DirectStream?
public init(path: String, audio: DirectStream?, video: DirectStream?) {
self.path = path
self.audio = audio
self.video = video
}
}
case tempFile(TempFile)
case directFile(FFMpegDirectFile)
}
public let startTime: Double
public let endTime: Double
public let content: Content
public let clippedStartTime: Double?
public let codecName: String?
public var id: Id {
switch self.content {
case let .tempFile(tempFile):
return .tempFile(path: tempFile.file.path)
case let .directFile(directFile):
return .directFile(path: directFile.path, audio: directFile.audio, video: directFile.video)
}
}
public init(startTime: Double, clippedStartTime: Double? = nil, endTime: Double, content: Content, codecName: String?) {
self.startTime = startTime
self.clippedStartTime = clippedStartTime
self.endTime = endTime
self.content = content
self.codecName = codecName
}
}
public final class ChunkMediaPlayerPartsState {
public let duration: Double?
public let parts: [ChunkMediaPlayerPart]
public init(duration: Double?, parts: [ChunkMediaPlayerPart]) {
self.duration = duration
self.parts = parts
}
}
#endif #endif
public enum MediaDataReaderReadSampleBufferResult { public enum MediaDataReaderReadSampleBufferResult {

View File

@ -1037,7 +1037,9 @@ public final class OngoingGroupCallContext {
} }
func addRemoteConnectedEvent(isRemoteConntected: Bool) { func addRemoteConnectedEvent(isRemoteConntected: Bool) {
#if os(iOS)
self.context.addRemoteConnectedEvent(isRemoteConntected) self.context.addRemoteConnectedEvent(isRemoteConntected)
#endif
} }
} }