70 void recordFrame(
const QRegion &damagedRegion);
75 void invalidateCursor();
77 bool includesCursor(
Cursor *cursor)
const;
85 void onStreamParamChanged(uint32_t
id,
const struct spa_pod *format);
86 void onStreamStateChanged(pw_stream_state old, pw_stream_state state,
const char *error_message);
87 void onStreamAddBuffer(pw_buffer *buffer);
88 void onStreamRemoveBuffer(pw_buffer *buffer);
89 void onStreamRenegotiateFormat(uint64_t);
92 QList<const spa_pod *> buildFormats(
bool fixate,
char buffer[2048]);
94 void coreFailed(
const QString &errorMessage);
95 void sendCursorData(
Cursor *cursor, spa_meta_cursor *spa_cursor);
96 void addHeader(spa_buffer *spaBuffer);
97 void addDamage(spa_buffer *spaBuffer,
const QRegion &damagedRegion);
98 void newStreamParams();
99 void tryEnqueue(pw_buffer *buffer);
101 spa_pod *buildFormat(
struct spa_pod_builder *b,
enum spa_video_format format,
struct spa_rectangle *resolution,
102 struct spa_fraction *defaultFramerate,
struct spa_fraction *minFramerate,
struct spa_fraction *maxFramerate,
103 const QList<uint64_t> &modifiers, quint32 modifiersFlags);
105 std::optional<ScreenCastDmaBufTextureParams> testCreateDmaBuf(
const QSize &size, quint32 format,
const QList<uint64_t> &modifiers);
108 std::shared_ptr<PipeWireCore> m_pwCore;
109 std::unique_ptr<ScreenCastSource> m_source;
110 struct pw_stream *m_pwStream =
nullptr;
111 struct spa_source *m_pwRenegotiate =
nullptr;
112 spa_hook m_streamListener;
113 pw_stream_events m_pwStreamEvents = {};
115 uint32_t m_pwNodeId = 0;
118 bool m_stopped =
false;
119 bool m_streaming =
false;
121 spa_video_info_raw m_videoFormat;
123 QList<uint64_t> m_modifiers;
124 std::optional<ScreenCastDmaBufTextureParams> m_dmabufParams;
129 const QSize bitmapSize = QSize(256, 256);
134 bool visible =
false;
138 QHash<struct pw_buffer *, std::shared_ptr<ScreenCastDmaBufTexture>> m_dmabufDataForPwBuffer;
140 pw_buffer *m_pendingBuffer =
nullptr;
141 std::unique_ptr<QSocketNotifier> m_pendingNotifier;
142 std::unique_ptr<EGLNativeFence> m_pendingFence;
143 quint64 m_sequential = 0;
144 bool m_hasDmaBuf =
false;
145 bool m_waitForNewBuffers =
false;
146 quint32 m_drmFormat = 0;
148 QDateTime m_lastSent;
149 QRegion m_pendingDamages;
150 QTimer m_pendingFrame;