screencasting: don't crash if the cursor is too big for our buffer
Make sure we stay within our bounds. Also initialise the background to transparent so there's no data from past renders.
This commit is contained in:
parent
bf5155f82b
commit
07c994fb82
1 changed files with 10 additions and 4 deletions
|
@ -73,7 +73,7 @@ void PipeWireStream::newStreamParams()
|
|||
spa_pod_builder pod_builder = SPA_POD_BUILDER_INIT (paramsBuffer, sizeof (paramsBuffer));
|
||||
|
||||
spa_rectangle resolution = SPA_RECTANGLE(uint32_t(m_resolution.width()), uint32_t(m_resolution.height()));
|
||||
const auto cursorSize = Cursors::self()->currentCursor()->themeSize();
|
||||
const int cursorSize = Cursors::self()->currentCursor()->themeSize() * m_cursor.scale;
|
||||
const spa_pod *params[] = {
|
||||
(spa_pod*) spa_pod_builder_add_object(&pod_builder,
|
||||
SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers,
|
||||
|
@ -497,11 +497,17 @@ void PipeWireStream::sendCursorData(Cursor *cursor, spa_meta_cursor *spa_meta_cu
|
|||
spa_meta_bitmap->offset = sizeof (struct spa_meta_bitmap);
|
||||
|
||||
uint8_t *bitmap_data = SPA_MEMBER (spa_meta_bitmap, spa_meta_bitmap->offset, uint8_t);
|
||||
QImage dest(bitmap_data, image.width(), image.height(), QImage::Format_RGBA8888_Premultiplied);
|
||||
spa_meta_bitmap->size.width = image.width();
|
||||
spa_meta_bitmap->size.height = image.height();
|
||||
const int bufferSideSize = Cursors::self()->currentCursor()->themeSize() * m_cursor.scale;
|
||||
QImage dest(bitmap_data, std::min(bufferSideSize, image.width()), std::min(bufferSideSize, image.height()), QImage::Format_RGBA8888_Premultiplied);
|
||||
spa_meta_bitmap->size.width = dest.width();
|
||||
spa_meta_bitmap->size.height = dest.height();
|
||||
spa_meta_bitmap->stride = dest.bytesPerLine();
|
||||
|
||||
if (image.isNull()) {
|
||||
return;
|
||||
}
|
||||
|
||||
dest.fill(Qt::transparent);
|
||||
QPainter painter(&dest);
|
||||
painter.drawImage(QPoint(), image);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue