4#ifndef QMACSCREENCAPTUREKIT_P_H
5#define QMACSCREENCAPTUREKIT_P_H
18#include <QtCore/qobject.h>
19#include <QtCore/qloggingcategory.h>
20#include <QtCore/private/qexpected_p.h>
22#include <QtMultimedia/qvideoframe.h>
23#include <QtMultimedia/private/qavfcamerautility_p.h>
25#import <ScreenCaptureKit/ScreenCaptureKit.h>
33@interface QT_MANGLE_NAMESPACE(QMacScreenCaptureStreamDelegate) : NSObject <SCStreamDelegate>
37@interface QT_MANGLE_NAMESPACE(QMacScreenCaptureStreamOutput) : NSObject <SCStreamOutput>
88 [[nodiscard]] int64_t
streamId()
const noexcept {
return m_streamId; }
92 std::optional<qreal> frameRate);
122 int64_t m_streamId = -1;
126 std::optional<qreal> m_frameRate;
128 AVFScopedPointer<SCStream> m_stream;
129 AVFScopedPointer<dispatch_queue_t> m_dispatchQueue;
130 AVFScopedPointer<QMacScreenCaptureStreamDelegate> m_streamDelegate;
131 AVFScopedPointer<QMacScreenCaptureStreamOutput> m_streamOutput;
133 static void startStreamReconfigure(
136 std::optional<qreal> frameRate);
QMacScreenCaptureKit & operator=(QMacScreenCaptureKit &&other)=delete
int64_t streamId() const noexcept
static constexpr QVideoFrameFormat::PixelFormat pixelFormat
static constexpr int queueDepth
QMacScreenCaptureKit(const QMacScreenCaptureKit &)=delete
static constexpr QVideoFrameFormat::ColorTransfer colorTransfer
QMacScreenCaptureKit(QMacScreenCaptureKit &&other) noexcept=delete
QMacScreenCaptureKit & operator=(const QMacScreenCaptureKit &)=delete
void updateStream(QSize resolutionPx)
void streamStoppedWithError(int64_t streamId, QString)
static constexpr QVideoFrameFormat::ColorRange colorRange
QMacScreenCaptureKit()=default
static CFStringRef cgColorSpace()
static constexpr QVideoFrameFormat::ColorSpace colorSpace
static AVFScopedPointer< SCStreamConfiguration > createStreamConfig(QSize resolutionPx, std::optional< qreal > frameRate)
Q_DECLARE_LOGGING_CATEGORY(qLcMacScreenCapture)
static void handleFrameOutput(QMacScreenCaptureStreamOutput &scStreamOutput, CMSampleBufferRef sampleBufferRef)
QT_MANGLE_NAMESPACE(QMacScreenCaptureStreamDelegate) QMacScreenCaptureStreamDelegate
static q23::expected< QVideoFrame, QString > createQVideoFrame(QMacScreenCaptureStreamOutput &scStreamOutput, CMSampleBufferRef sampleBufferRef)
static q23::expected< AVFScopedPointer< QMacScreenCaptureStreamOutput >, QString > createStreamOutput(QMacScreenCaptureKit &macScreenCaptureKit, uint32_t cvPixelFormat, QSize resolution)
q23::expected< QSize, QString > ReadContentRect(CMSampleBufferRef sampleBuffer)
static void configureStreamDelegate(QMacScreenCaptureStreamDelegate &streamDelegate, int64_t streamId, const QMacScreenCaptureKit &macScreenCaptureKit)
Q_LOGGING_CATEGORY_IMPL(QT_PREPEND_NAMESPACE(QFFmpeg::qLcMacScreenCapture), "qt.multimedia.screencapture.macscreencapturekit")
std::vector< AVFScopedPointer< SCDisplay > > displays
std::vector< AVFScopedPointer< SCWindow > > windows