Fix videopreview image stretching in simple calls

This commit is contained in:
QuentinArguillere 2024-11-07 17:23:48 +01:00
parent d84f10de39
commit 34d125eff6
2 changed files with 41 additions and 11 deletions

View file

@ -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,

View file

@ -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
}