WIP M67 - plumb through AVCaptureSession

TODO:

-[x] plumb through AVCaptureSession
-[] get AVCaptureSession from PeerConnectionClient
-[] RTCDataChannel not unwrapped
-[] no member avFoundationSource
-[] no member "back camera"
pull/1/head
Michael Kirk 7 years ago
parent 51c3a3df65
commit 064035f3f4

@ -73,6 +73,7 @@ class CallViewController: OWSViewController, CallObserver, CallServiceObserver,
var localVideoView: RTCCameraPreviewView!
var hasShownLocalVideo = false
weak var localVideoTrack: RTCVideoTrack?
weak var localCaptureSession: AVCaptureSession?
weak var remoteVideoTrack: RTCVideoTrack?
override public var canBecomeFirstResponder: Bool {
@ -1001,18 +1002,19 @@ class CallViewController: OWSViewController, CallObserver, CallServiceObserver,
// MARK: - Video
internal func updateLocalVideoTrack(localVideoTrack: RTCVideoTrack?) {
// MJK TODO remove localVideoTrack?
internal func updateLocalVideoTrack(localVideoTrack: RTCVideoTrack?,
captureSession: AVCaptureSession?) {
SwiftAssertIsOnMainThread(#function)
guard self.localVideoTrack != localVideoTrack else {
return
}
self.localVideoTrack = localVideoTrack
localVideoView.captureSession = captureSession
let isHidden = captureSession == nil
let source = localVideoTrack?.source as? RTCAVFoundationVideoSource
localVideoView.captureSession = source?.captureSession
let isHidden = source == nil
Logger.info("\(TAG) \(#function) isHidden: \(isHidden)")
localVideoView.isHidden = isHidden
@ -1117,12 +1119,14 @@ class CallViewController: OWSViewController, CallObserver, CallServiceObserver,
// Do nothing.
}
// TODO remove localCaptureSession:
internal func didUpdateVideoTracks(call: SignalCall?,
localVideoTrack: RTCVideoTrack?,
localCaptureSession: AVCaptureSession?,
remoteVideoTrack: RTCVideoTrack?) {
SwiftAssertIsOnMainThread(#function)
updateLocalVideoTrack(localVideoTrack: localVideoTrack)
updateLocalVideoTrack(localVideoTrack: localVideoTrack, captureSession: localCaptureSession)
updateRemoteVideoTrack(remoteVideoTrack: remoteVideoTrack)
}
}

@ -93,8 +93,10 @@ protocol CallServiceObserver: class {
/**
* Fired whenever the local or remote video track become active or inactive.
*/
// TODO remove localCaptureSession:
func didUpdateVideoTracks(call: SignalCall?,
localVideoTrack: RTCVideoTrack?,
localCaptureSession: AVCaptureSession?,
remoteVideoTrack: RTCVideoTrack?)
}
@ -125,6 +127,14 @@ private class SignalCallData: NSObject {
}
}
weak var localCaptureSession: AVCaptureSession? {
didSet {
SwiftAssertIsOnMainThread(#function)
Logger.info("\(self.logTag) \(#function)")
}
}
weak var remoteVideoTrack: RTCVideoTrack? {
didSet {
SwiftAssertIsOnMainThread(#function)
@ -282,6 +292,15 @@ private class SignalCallData: NSObject {
return callData?.localVideoTrack
}
}
weak var localCaptureSession: AVCaptureSession? {
get {
SwiftAssertIsOnMainThread(#function)
return callData?.localCaptureSession
}
}
var remoteVideoTrack: RTCVideoTrack? {
get {
SwiftAssertIsOnMainThread(#function)
@ -1622,11 +1641,10 @@ private class SignalCallData: NSObject {
observers.append(Weak(value: observer))
// Synchronize observer with current call state
let call = self.call
let localVideoTrack = self.localVideoTrack
let remoteVideoTrack = self.isRemoteVideoEnabled ? self.remoteVideoTrack : nil
observer.didUpdateVideoTracks(call: call,
localVideoTrack: localVideoTrack,
observer.didUpdateVideoTracks(call: self.call,
localVideoTrack: self.localVideoTrack,
localCaptureSession: self.localCaptureSession,
remoteVideoTrack: remoteVideoTrack)
}
@ -1649,13 +1667,11 @@ private class SignalCallData: NSObject {
private func fireDidUpdateVideoTracks() {
SwiftAssertIsOnMainThread(#function)
let call = self.call
let localVideoTrack = self.localVideoTrack
let remoteVideoTrack = self.isRemoteVideoEnabled ? self.remoteVideoTrack : nil
for observer in observers {
observer.value?.didUpdateVideoTracks(call: call,
localVideoTrack: localVideoTrack,
observer.value?.didUpdateVideoTracks(call: self.call,
localVideoTrack: self.localVideoTrack,
localCaptureSession: self.localCaptureSession,
remoteVideoTrack: remoteVideoTrack)
}
}

@ -235,7 +235,7 @@ class PeerConnectionClient: NSObject, RTCPeerConnectionDelegate, RTCDataChannelD
private var videoCaptureSession: AVCaptureSession?
private var videoSender: RTCRtpSender?
private var localVideoTrack: RTCVideoTrack?
private var localVideoSource: RTCAVFoundationVideoSource?
private var localVideoSource: RTCVideoSource?
// RTCVideoTrack is fragile and prone to throwing exceptions and/or
// causing deadlock in its destructor. Therefore we take great care

@ -273,6 +273,7 @@ extension CallUIAdaptee {
internal func didUpdateVideoTracks(call: SignalCall?,
localVideoTrack: RTCVideoTrack?,
localCaptureSession: AVCaptureSession?,
remoteVideoTrack: RTCVideoTrack?) {
SwiftAssertIsOnMainThread(#function)

Loading…
Cancel
Save