@@ -26,6 +26,7 @@ actor RecordingCoordinator {
2626 private var webcamPixelW : Int = 0
2727 private var webcamPixelH : Int = 0
2828 private var recordingFPS : Int = 60
29+ private var captureQualityUsed : CaptureQuality = . standard
2930
3031 func startRecording(
3132 target: CaptureTarget ,
@@ -35,7 +36,9 @@ actor RecordingCoordinator {
3536 cameraDeviceId: String ? = nil ,
3637 cameraResolution: String = " 1080p " ,
3738 existingWebcam: ( WebcamCapture , VerifiedCamera ) ? = nil ,
38- cursorMetadataRecorder: CursorMetadataRecorder ? = nil
39+ cursorMetadataRecorder: CursorMetadataRecorder ? = nil ,
40+ captureQuality: CaptureQuality = . standard,
41+ retinaCapture: Bool = false
3942 ) async throws -> Date {
4043 var verifiedCam : ( capture: WebcamCapture , info: VerifiedCamera ) ?
4144 var verifiedMic : MicrophoneCapture ?
@@ -97,7 +100,12 @@ actor RecordingCoordinator {
97100
98101 pixelW = Int ( round ( sourceRect. width * displayScale) ) & ~ 1
99102 pixelH = Int ( round ( sourceRect. height * displayScale) ) & ~ 1
103+ if retinaCapture {
104+ pixelW = ( pixelW * 2 ) & ~ 1
105+ pixelH = ( pixelH * 2 ) & ~ 1
106+ }
100107 recordingFPS = fps
108+ captureQualityUsed = captureQuality
101109
102110 var streamCount = 1
103111 if verifiedMic != nil { streamCount += 1 }
@@ -108,11 +116,12 @@ actor RecordingCoordinator {
108116 self . recordingClock = clock
109117
110118 let vidWriter = try VideoTrackWriter (
111- outputURL: FileManager . default. tempVideoURL ( ) ,
119+ outputURL: FileManager . default. tempVideoURL ( captureQuality : captureQuality ) ,
112120 width: pixelW,
113121 height: pixelH,
114122 fps: fps,
115- clock: clock
123+ clock: clock,
124+ captureQuality: captureQuality
116125 )
117126 self . videoWriter = vidWriter
118127
@@ -136,14 +145,15 @@ actor RecordingCoordinator {
136145 self . cursorMetadataRecorder = cursorMetadataRecorder
137146 }
138147
139- let session = ScreenCaptureSession ( videoWriter: vidWriter)
148+ let session = ScreenCaptureSession ( videoWriter: vidWriter, captureQuality : captureQuality )
140149 do {
141150 try await session. start (
142151 target: target,
143152 display: display,
144153 displayScale: displayScale,
145154 fps: fps,
146- hideCursor: cursorMetadataRecorder != nil
155+ hideCursor: cursorMetadataRecorder != nil ,
156+ retinaCapture: retinaCapture
147157 )
148158 } catch {
149159 verifiedCam? . capture. stop ( )
@@ -217,7 +227,9 @@ actor RecordingCoordinator {
217227 microphoneDeviceId: String ? = nil ,
218228 cameraDeviceId: String ? = nil ,
219229 cameraResolution: String = " 1080p " ,
220- existingWebcam: ( WebcamCapture , VerifiedCamera ) ? = nil
230+ existingWebcam: ( WebcamCapture , VerifiedCamera ) ? = nil ,
231+ captureQuality: CaptureQuality = . standard,
232+ retinaCapture: Bool = false
221233 ) async throws -> Date {
222234 var verifiedCam : ( capture: WebcamCapture , info: VerifiedCamera ) ?
223235 var verifiedMic : MicrophoneCapture ?
@@ -271,10 +283,15 @@ actor RecordingCoordinator {
271283 pW = 1920
272284 pH = 1080
273285 }
286+ if retinaCapture {
287+ pW = ( pW * 2 ) & ~ 1
288+ pH = ( pH * 2 ) & ~ 1
289+ }
274290
275291 pixelW = pW
276292 pixelH = pH
277293 recordingFPS = fps
294+ captureQualityUsed = captureQuality
278295
279296 var streamCount = 1
280297 if verifiedMic != nil { streamCount += 1 }
@@ -286,11 +303,12 @@ actor RecordingCoordinator {
286303 self . recordingClock = clock
287304
288305 let vidWriter = try VideoTrackWriter (
289- outputURL: FileManager . default. tempVideoURL ( ) ,
306+ outputURL: FileManager . default. tempVideoURL ( captureQuality : captureQuality ) ,
290307 width: pW,
291308 height: pH,
292309 fps: fps,
293- clock: clock
310+ clock: clock,
311+ captureQuality: captureQuality
294312 )
295313 self . videoWriter = vidWriter
296314 deviceCapture. attachVideoWriter ( vidWriter)
@@ -473,7 +491,8 @@ actor RecordingCoordinator {
473491 cursorMetadataURL: cursorMetadataURL,
474492 screenSize: CGSize ( width: screenW, height: screenH) ,
475493 webcamSize: webcamURL != nil ? CGSize ( width: camW, height: camH) : nil ,
476- fps: fps
494+ fps: fps,
495+ captureQuality: captureQualityUsed
477496 )
478497 }
479498
0 commit comments