2424#define DRM_FORMAT_GR88 fourcc_code (' G' , ' R' , ' 8' , ' 8' )
2525#endif
2626
27- EglImageFactory::EglImageFactory (IFFmpegRenderer* renderer ) :
28- m_Renderer(renderer ),
27+ EglImageFactory::EglImageFactory () :
28+ m_Renderer(nullptr ),
2929 m_EGLExtDmaBuf(false ),
3030 m_eglCreateImage(nullptr ),
3131 m_eglDestroyImage(nullptr ),
@@ -36,9 +36,16 @@ EglImageFactory::EglImageFactory(IFFmpegRenderer* renderer) :
3636{
3737}
3838
39- bool EglImageFactory::initializeEGL (EGLDisplay,
39+ bool EglImageFactory::initializeEGL (IFFmpegRenderer* eglRenderer,
40+ EGLDisplay,
4041 const EGLExtensions &ext)
4142{
43+ // The EGL renderer is guaranteed to be alive for any calls to this factory,
44+ // since it's the one that calls exportEGLImages() on the backend renderer.
45+ SDL_assert (eglRenderer->getRendererType () == IFFmpegRenderer::RendererType::EGL );
46+ SDL_assert (!m_Renderer);
47+ m_Renderer = eglRenderer;
48+
4249 if (!ext.isSupported (" EGL_EXT_image_dma_buf_import" )) {
4350 SDL_LogError (SDL_LOG_CATEGORY_APPLICATION ,
4451 " DRM-EGL: DMABUF unsupported" );
@@ -75,6 +82,8 @@ void EglImageFactory::resetCache()
7582
7683ssize_t EglImageFactory::exportDRMImages (AVFrame* frame, EGLDisplay dpy, EGLImage images[EGL_MAX_PLANES ])
7784{
85+ SDL_assert (m_Renderer);
86+
7887 SDL_assert (frame->format == AV_PIX_FMT_DRM_PRIME );
7988 AVDRMFrameDescriptor* drmFrame = (AVDRMFrameDescriptor*)frame->data [0 ];
8089
@@ -264,6 +273,8 @@ ssize_t EglImageFactory::exportDRMImages(AVFrame* frame, EGLDisplay dpy, EGLImag
264273
265274ssize_t EglImageFactory::exportVAImages (AVFrame *frame, uint32_t exportFlags, EGLDisplay dpy, EGLImage images[EGL_MAX_PLANES ])
266275{
276+ SDL_assert (m_Renderer);
277+
267278 SDL_assert (frame->format == AV_PIX_FMT_VAAPI );
268279 auto hwFrameCtx = (AVHWFramesContext*)frame->hw_frames_ctx ->data ;
269280 AVVAAPIDeviceContext* vaDeviceContext = (AVVAAPIDeviceContext*)hwFrameCtx->device_ctx ->hwctx ;
0 commit comments