use QImage buf directly

This commit is contained in:
Stéphane L
2018-05-27 20:11:32 +02:00
parent 89f95f6459
commit 79ddb43ac3

View File

@ -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;
} }