perf: capture samplebuffer directly
This commit is contained in:
1 parent
016052ca14
commit
2bce0d2d40
1 file changed
+6
-3
@@ -63,14 +63,16 @@ class WindowCaptureScreenshots {
|
|||||||
let config = SCStreamConfiguration.forWindow(scWindow, window, false)
|
let config = SCStreamConfiguration.forWindow(scWindow, window, false)
|
||||||
let filter = SCContentFilter(desktopIndependentWindow: scWindow)
|
let filter = SCContentFilter(desktopIndependentWindow: scWindow)
|
||||||
ActiveWindowCaptures.increment()
|
ActiveWindowCaptures.increment()
|
||||||
SCScreenshotManager.captureImage(contentFilter: filter, configuration: config) { cgImage, error in
|
SCScreenshotManager.captureSampleBuffer(contentFilter: filter, configuration: config) { sampleBuffer, error in
|
||||||
ActiveWindowCaptures.decrement()
|
ActiveWindowCaptures.decrement()
|
||||||
guard let cgImage, error == nil else { Logger.error { "\(window.debugId) \(cgImage == nil) \(error)" }; return }
|
guard let sampleBuffer, error == nil else { Logger.error { "\(window.debugId) \(sampleBuffer == nil) \(error)" }; return }
|
||||||
guard source != .refreshOnlyThumbnailsAfterShowUi || App.app.appIsBeingUsed else { return }
|
guard source != .refreshOnlyThumbnailsAfterShowUi || App.app.appIsBeingUsed else { return }
|
||||||
|
let pixelBuffer: CVPixelBuffer? = sampleBuffer.pixelBuffer() ?? sampleBuffer.imageBuffer
|
||||||
|
guard let pixelBuffer else { Logger.error { "\(window.debugId) no pixelBuffer" }; return }
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
guard source != .refreshOnlyThumbnailsAfterShowUi || App.app.appIsBeingUsed else { return }
|
guard source != .refreshOnlyThumbnailsAfterShowUi || App.app.appIsBeingUsed else { return }
|
||||||
if let window = (Windows.list.first { $0.cgWindowId == scWindow.windowID }) {
|
if let window = (Windows.list.first { $0.cgWindowId == scWindow.windowID }) {
|
||||||
window.refreshThumbnail(.cgImage(cgImage))
|
window.refreshThumbnail(.pixelBuffer(pixelBuffer))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -232,6 +234,7 @@ extension SCStreamConfiguration {
|
|||||||
static func forWindow(_ scWindow: SCWindow, _ window: Window, _ video: Bool) -> SCStreamConfiguration {
|
static func forWindow(_ scWindow: SCWindow, _ window: Window, _ video: Bool) -> SCStreamConfiguration {
|
||||||
let config = SCStreamConfiguration()
|
let config = SCStreamConfiguration()
|
||||||
config.setWindowSize(scWindow, window)
|
config.setWindowSize(scWindow, window)
|
||||||
|
config.pixelFormat = kCVPixelFormatType_32BGRA
|
||||||
config.showsCursor = false
|
config.showsCursor = false
|
||||||
// if video {
|
// if video {
|
||||||
// config.minimumFrameInterval = CMTime(value: 1, timescale: CMTimeScale(60))
|
// config.minimumFrameInterval = CMTime(value: 1, timescale: CMTimeScale(60))
|
||||||
|
|||||||
Reference in new issue
Block a user