mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
use QImage buf directly
This commit is contained in:
@ -1351,8 +1351,8 @@ void WSRequestHandler::HandleGetSourceImage(WSRequestHandler* req) {
|
|||||||
|
|
||||||
const uint32_t imgWidth = obs_source_get_base_width(source);
|
const uint32_t imgWidth = obs_source_get_base_width(source);
|
||||||
const uint32_t imgHeight = obs_source_get_base_height(source);
|
const uint32_t imgHeight = obs_source_get_base_height(source);
|
||||||
const uint32_t imgBufSize = imgWidth * imgHeight * 4;
|
QImage sourceImage(imgWidth, imgHeight, QImage::Format::Format_RGBA8888);
|
||||||
uint8_t* imgBuf = new uint8_t[imgBufSize];
|
sourceImage.fill(0);
|
||||||
|
|
||||||
uint8_t* videoData = nullptr;
|
uint8_t* videoData = nullptr;
|
||||||
uint32_t videoLinesize = 0;
|
uint32_t videoLinesize = 0;
|
||||||
@ -1381,7 +1381,7 @@ void WSRequestHandler::HandleGetSourceImage(WSRequestHandler* req) {
|
|||||||
|
|
||||||
gs_stage_texture(stagesurface, gs_texrender_get_texture(texrender));
|
gs_stage_texture(stagesurface, gs_texrender_get_texture(texrender));
|
||||||
if (gs_stagesurface_map(stagesurface, &videoData, &videoLinesize)) {
|
if (gs_stagesurface_map(stagesurface, &videoData, &videoLinesize)) {
|
||||||
memcpy(imgBuf, videoData, videoLinesize * imgHeight);
|
memcpy(sourceImage.bits(), videoData, videoLinesize * imgHeight);
|
||||||
gs_stagesurface_unmap(stagesurface);
|
gs_stagesurface_unmap(stagesurface);
|
||||||
renderSuccess = true;
|
renderSuccess = true;
|
||||||
}
|
}
|
||||||
@ -1393,12 +1393,10 @@ void WSRequestHandler::HandleGetSourceImage(WSRequestHandler* req) {
|
|||||||
obs_leave_graphics();
|
obs_leave_graphics();
|
||||||
|
|
||||||
if (renderSuccess) {
|
if (renderSuccess) {
|
||||||
QImage sourceImage(imgBuf, imgWidth, imgHeight, QImage::Format::Format_RGBA8888);
|
|
||||||
|
|
||||||
QByteArray encodedImgBytes;
|
QByteArray encodedImgBytes;
|
||||||
QBuffer buffer(&encodedImgBytes);
|
QBuffer buffer(&encodedImgBytes);
|
||||||
buffer.open(QBuffer::WriteOnly);
|
buffer.open(QBuffer::WriteOnly);
|
||||||
sourceImage.save(&buffer, "WEBP", 0);
|
sourceImage.save(&buffer, "WEBP", 50);
|
||||||
buffer.close();
|
buffer.close();
|
||||||
|
|
||||||
QString imgBase64(encodedImgBytes.toBase64());
|
QString imgBase64(encodedImgBytes.toBase64());
|
||||||
@ -1411,6 +1409,4 @@ void WSRequestHandler::HandleGetSourceImage(WSRequestHandler* req) {
|
|||||||
} else {
|
} else {
|
||||||
req->SendErrorResponse("Source render failed.");
|
req->SendErrorResponse("Source render failed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
delete imgBuf;
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user