mirror of
https://github.com/moonlight-stream/moonlight-qt.git
synced 2026-08-27 04:37:41 +00:00
Pass the correct renderer to EGLImageFactory
We should be using the EGL renderer's colorspace and color range rather than the backend renderer's for fallbacks. The former is what actually gets passed to the host PC during stream init.
This commit is contained in:
@@ -24,8 +24,8 @@
|
||||
#define DRM_FORMAT_GR88 fourcc_code('G', 'R', '8', '8')
|
||||
#endif
|
||||
|
||||
EglImageFactory::EglImageFactory(IFFmpegRenderer* renderer) :
|
||||
m_Renderer(renderer),
|
||||
EglImageFactory::EglImageFactory() :
|
||||
m_Renderer(nullptr),
|
||||
m_EGLExtDmaBuf(false),
|
||||
m_eglCreateImage(nullptr),
|
||||
m_eglDestroyImage(nullptr),
|
||||
@@ -36,9 +36,16 @@ EglImageFactory::EglImageFactory(IFFmpegRenderer* renderer) :
|
||||
{
|
||||
}
|
||||
|
||||
bool EglImageFactory::initializeEGL(EGLDisplay,
|
||||
bool EglImageFactory::initializeEGL(IFFmpegRenderer* eglRenderer,
|
||||
EGLDisplay,
|
||||
const EGLExtensions &ext)
|
||||
{
|
||||
// The EGL renderer is guaranteed to be alive for any calls to this factory,
|
||||
// since it's the one that calls exportEGLImages() on the backend renderer.
|
||||
SDL_assert(eglRenderer->getRendererType() == IFFmpegRenderer::RendererType::EGL);
|
||||
SDL_assert(!m_Renderer);
|
||||
m_Renderer = eglRenderer;
|
||||
|
||||
if (!ext.isSupported("EGL_EXT_image_dma_buf_import")) {
|
||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
|
||||
"DRM-EGL: DMABUF unsupported");
|
||||
@@ -75,6 +82,8 @@ void EglImageFactory::resetCache()
|
||||
|
||||
ssize_t EglImageFactory::exportDRMImages(AVFrame* frame, EGLDisplay dpy, EGLImage images[EGL_MAX_PLANES])
|
||||
{
|
||||
SDL_assert(m_Renderer);
|
||||
|
||||
SDL_assert(frame->format == AV_PIX_FMT_DRM_PRIME);
|
||||
AVDRMFrameDescriptor* drmFrame = (AVDRMFrameDescriptor*)frame->data[0];
|
||||
|
||||
@@ -264,6 +273,8 @@ ssize_t EglImageFactory::exportDRMImages(AVFrame* frame, EGLDisplay dpy, EGLImag
|
||||
|
||||
ssize_t EglImageFactory::exportVAImages(AVFrame *frame, uint32_t exportFlags, EGLDisplay dpy, EGLImage images[EGL_MAX_PLANES])
|
||||
{
|
||||
SDL_assert(m_Renderer);
|
||||
|
||||
SDL_assert(frame->format == AV_PIX_FMT_VAAPI);
|
||||
auto hwFrameCtx = (AVHWFramesContext*)frame->hw_frames_ctx->data;
|
||||
AVVAAPIDeviceContext* vaDeviceContext = (AVVAAPIDeviceContext*)hwFrameCtx->device_ctx->hwctx;
|
||||
|
||||
Reference in New Issue
Block a user