mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-17 11:08:06 +00:00
Fix videopreview image stretching in simple calls
This commit is contained in:
parent
d84f10de39
commit
34d125eff6
2 changed files with 41 additions and 11 deletions
|
|
@ -59,6 +59,7 @@ struct CallView: View {
|
|||
@State private var pointingUp: CGFloat = 0.0
|
||||
@State private var currentOffset: CGFloat = 0.0
|
||||
@State var displayVideo = false
|
||||
@State private var previewVideoLocation = CGPoint(x: 0, y: 0)
|
||||
|
||||
@Binding var fullscreenVideo: Bool
|
||||
@State var isShowCallsListFragment: Bool = false
|
||||
|
|
@ -554,23 +555,28 @@ struct CallView: View {
|
|||
Spacer()
|
||||
VStack {
|
||||
Spacer()
|
||||
LinphoneVideoViewHolder { view in
|
||||
coreContext.doOnCoreQueue { core in
|
||||
core.nativePreviewWindow = view
|
||||
HStack {
|
||||
LinphoneVideoViewHolder { view in
|
||||
coreContext.doOnCoreQueue { core in
|
||||
core.nativePreviewWindow = view
|
||||
}
|
||||
}
|
||||
.aspectRatio(callViewModel.callStatsModel.sentVideoWindow.widthFactor/callViewModel.callStatsModel.sentVideoWindow.heightFactor, contentMode: .fill)
|
||||
.frame(maxWidth: callViewModel.callStatsModel.sentVideoWindow.widthFactor * 256,
|
||||
maxHeight: callViewModel.callStatsModel.sentVideoWindow.heightFactor * 256)
|
||||
.clipped()
|
||||
}
|
||||
.frame(width: angleDegree == 0 ? 120*1.2 : 160*1.2, height: angleDegree == 0 ? 160*1.2 : 120*1.2)
|
||||
.cornerRadius(20)
|
||||
.padding(10)
|
||||
.padding(.trailing, abs(angleDegree/2))
|
||||
}
|
||||
.padding(10)
|
||||
.padding(.trailing, abs(angleDegree/2))
|
||||
}
|
||||
.frame(
|
||||
maxWidth: fullscreenVideo && !telecomManager.isPausedByRemote ? geometry.size.width : geometry.size.width - 8,
|
||||
maxHeight: fullscreenVideo && !telecomManager.isPausedByRemote ? geometry.size.height + geometry.safeAreaInsets.top + geometry.safeAreaInsets.bottom : geometry.size.height - (minBottomSheetHeight * geometry.size.height > 80 ? minBottomSheetHeight * geometry.size.height : 78) - 40 - 20 + geometry.safeAreaInsets.bottom
|
||||
)
|
||||
}
|
||||
|
||||
if telecomManager.outgoingCallStarted {
|
||||
VStack {
|
||||
ActivityIndicator(color: .white)
|
||||
|
|
@ -662,16 +668,22 @@ struct CallView: View {
|
|||
Spacer()
|
||||
VStack {
|
||||
Spacer()
|
||||
LinphoneVideoViewHolder { view in
|
||||
coreContext.doOnCoreQueue { core in
|
||||
core.nativePreviewWindow = view
|
||||
HStack {
|
||||
LinphoneVideoViewHolder { view in
|
||||
coreContext.doOnCoreQueue { core in
|
||||
core.nativePreviewWindow = view
|
||||
}
|
||||
}
|
||||
.aspectRatio(callViewModel.callStatsModel.sentVideoWindow.widthFactor/callViewModel.callStatsModel.sentVideoWindow.heightFactor, contentMode: .fill)
|
||||
.frame(maxWidth: callViewModel.callStatsModel.sentVideoWindow.widthFactor * 256,
|
||||
maxHeight: callViewModel.callStatsModel.sentVideoWindow.heightFactor * 256)
|
||||
.clipped()
|
||||
}
|
||||
.frame(width: angleDegree == 0 ? 120*1.2 : 160*1.2, height: angleDegree == 0 ? 160*1.2 : 120*1.2)
|
||||
.cornerRadius(20)
|
||||
.padding(10)
|
||||
.padding(.trailing, abs(angleDegree/2))
|
||||
}
|
||||
.padding(10)
|
||||
.padding(.trailing, abs(angleDegree/2))
|
||||
}
|
||||
.frame(
|
||||
maxWidth: fullscreenVideo && !telecomManager.isPausedByRemote ? geometry.size.width : geometry.size.width - 8,
|
||||
|
|
|
|||
|
|
@ -20,6 +20,20 @@
|
|||
import Foundation
|
||||
import linphonesw
|
||||
|
||||
class SentVideoWindow: ObservableObject {
|
||||
var widthFactor: CGFloat = 1
|
||||
var heightFactor: CGFloat = 1
|
||||
var isVertical = true
|
||||
init(videoWidth: UInt, videoHeight: UInt) {
|
||||
self.isVertical = videoWidth < videoHeight
|
||||
if isVertical {
|
||||
self.widthFactor = videoHeight == 0 ? 1 : CGFloat(videoWidth) / CGFloat(videoHeight)
|
||||
} else {
|
||||
self.heightFactor = videoWidth == 0 ? 1 : CGFloat(videoHeight) / CGFloat(videoWidth)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class CallStatsModel: ObservableObject {
|
||||
var coreContext = CoreContext.shared
|
||||
|
||||
|
|
@ -32,6 +46,7 @@ class CallStatsModel: ObservableObject {
|
|||
@Published var videoCodec = ""
|
||||
@Published var videoBandwidth = ""
|
||||
@Published var videoLossRate = ""
|
||||
@Published var sentVideoWindow = SentVideoWindow(videoWidth: 480, videoHeight: 640)
|
||||
@Published var videoResolution = ""
|
||||
@Published var videoFps = ""
|
||||
|
||||
|
|
@ -88,6 +103,8 @@ class CallStatsModel: ObservableObject {
|
|||
let lossRateLabel = "Lossrate: ↑ \(senderLossRate)% ↓ \(receiverLossRate)%"
|
||||
|
||||
let sentResolution = call.currentParams!.sentVideoDefinition!.name
|
||||
let sentVideoWindow = SentVideoWindow(videoWidth: call.currentParams!.sentVideoDefinition!.width
|
||||
, videoHeight: call.currentParams!.sentVideoDefinition!.height)
|
||||
let receivedResolution = call.currentParams!.receivedVideoDefinition!.name
|
||||
let resolutionLabel = "Resolution: " + "↑ \(sentResolution!) ↓ \(receivedResolution!)"
|
||||
|
||||
|
|
@ -99,6 +116,7 @@ class CallStatsModel: ObservableObject {
|
|||
self.videoCodec = codecLabel
|
||||
self.videoBandwidth = bandwidthLabel
|
||||
self.videoLossRate = lossRateLabel
|
||||
self.sentVideoWindow = sentVideoWindow
|
||||
self.videoResolution = resolutionLabel
|
||||
self.videoFps = fpsLabel
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue