mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
Working PNG output
This commit is contained in:
parent
d16ea653fe
commit
87c13b6f26
@ -1,3 +1,6 @@
|
||||
#include <QString>
|
||||
#include <QImage>
|
||||
#include <QBuffer>
|
||||
#include "Utils.h"
|
||||
|
||||
#include "WSRequestHandler.h"
|
||||
@ -1349,7 +1352,7 @@ void WSRequestHandler::HandleGetSourceImage(WSRequestHandler* req) {
|
||||
const uint32_t imgWidth = obs_source_get_base_width(source);
|
||||
const uint32_t imgHeight = obs_source_get_base_height(source);
|
||||
const uint32_t imgBufSize = imgWidth * imgHeight * 4;
|
||||
QByteArray imgSourceBuf(imgBufSize, '\0');
|
||||
uint8_t* imgBuf = new uint8_t[imgBufSize];
|
||||
|
||||
uint8_t* videoData = nullptr;
|
||||
uint32_t videoLinesize = 0;
|
||||
@ -1378,7 +1381,7 @@ void WSRequestHandler::HandleGetSourceImage(WSRequestHandler* req) {
|
||||
|
||||
gs_stage_texture(stagesurface, gs_texrender_get_texture(texrender));
|
||||
if (gs_stagesurface_map(stagesurface, &videoData, &videoLinesize)) {
|
||||
memcpy((void*)imgSourceBuf.constData(), videoData, videoLinesize * imgHeight);
|
||||
memcpy(imgBuf, videoData, videoLinesize * imgHeight);
|
||||
gs_stagesurface_unmap(stagesurface);
|
||||
renderSuccess = true;
|
||||
}
|
||||
@ -1390,13 +1393,24 @@ void WSRequestHandler::HandleGetSourceImage(WSRequestHandler* req) {
|
||||
obs_leave_graphics();
|
||||
|
||||
if (renderSuccess) {
|
||||
QString imgDataB64(imgSourceBuf.toBase64());
|
||||
QImage sourceImage(imgBuf, imgWidth, imgHeight, QImage::Format::Format_RGBA8888);
|
||||
|
||||
QByteArray pngBytes;
|
||||
QBuffer pngBytesBuf(&pngBytes);
|
||||
pngBytesBuf.open(QBuffer::ReadWrite);
|
||||
sourceImage.save(&pngBytesBuf, "PNG");
|
||||
pngBytesBuf.close();
|
||||
|
||||
QString pngBase64(pngBytes.toBase64());
|
||||
pngBase64.prepend("data:image/png;base64,");
|
||||
|
||||
OBSDataAutoRelease response = obs_data_create();
|
||||
obs_data_set_string(response, "sourceName", obs_source_get_name(source));
|
||||
obs_data_set_string(response, "img_base64", imgDataB64.toUtf8().constData());
|
||||
obs_data_set_string(response, "img", pngBase64.toUtf8().constData());
|
||||
req->SendOKResponse(response);
|
||||
} else {
|
||||
req->SendErrorResponse("Source render failed.");
|
||||
}
|
||||
|
||||
delete imgBuf;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user