diff --git a/subprojects/gst-plugins-bad/ext/wpe/gstwpethreadedview.cpp b/subprojects/gst-plugins-bad/ext/wpe/gstwpethreadedview.cpp index 159a6c3acf..cba27c8e55 100644 --- a/subprojects/gst-plugins-bad/ext/wpe/gstwpethreadedview.cpp +++ b/subprojects/gst-plugins-bad/ext/wpe/gstwpethreadedview.cpp @@ -815,37 +815,44 @@ void GstWPEThreadedView::setDrawBackground(gboolean drawsBackground) webkit_web_view_set_background_color(webkit.view, &color); } -void GstWPEThreadedView::releaseImage(gpointer imagePointer) +void GstWPEThreadedView::releaseImage(struct wpe_fdo_egl_exported_image * image) { s_view->dispatch([&]() { - GST_TRACE("Dispatch release exported image %p", imagePointer); - wpe_view_backend_exportable_fdo_egl_dispatch_release_exported_image(wpe.exportable, - static_cast(imagePointer)); + GST_TRACE("Dispatch release exported image %p", image); + wpe_view_backend_exportable_fdo_egl_dispatch_release_exported_image(wpe.exportable, image); }); } struct ImageContext { GstWPEThreadedView* view; - gpointer image; + struct wpe_fdo_egl_exported_image *image; }; -void GstWPEThreadedView::handleExportedImage(gpointer image) +void GstWPEThreadedView::s_releaseImage(GstEGLImage *image, gpointer data) { + ImageContext *context = static_cast(data); + context->view->releaseImage(context->image); + g_free(context); +} + +void GstWPEThreadedView::handleExportedImage(struct wpe_fdo_egl_exported_image * image) { - ImageContext* imageContext = g_new (ImageContext, 1); - imageContext->view = this; - imageContext->image = static_cast(image); - EGLImageKHR eglImage = wpe_fdo_egl_exported_image_get_egl_image(static_cast(image)); + ImageContext *imageContext = g_new(ImageContext, 1); + imageContext->view = this; + imageContext->image = image; + EGLImageKHR eglImage = wpe_fdo_egl_exported_image_get_egl_image(image); - auto* gstImage = gst_egl_image_new_wrapped(gst.context, eglImage, GST_GL_RGBA, imageContext, s_releaseImage); - { - GMutexHolder lock(images_mutex); + auto *gstImage = gst_egl_image_new_wrapped(gst.context, eglImage, GST_GL_RGBA, imageContext, + s_releaseImage); + { + GMutexHolder lock(images_mutex); - GST_TRACE("EGLImage %p wrapped in GstEGLImage %" GST_PTR_FORMAT, eglImage, gstImage); - gst_clear_mini_object ((GstMiniObject **) &egl.pending); - egl.pending = gstImage; + GST_TRACE("EGLImage %p wrapped in GstEGLImage %" GST_PTR_FORMAT, eglImage, + gstImage); + gst_clear_mini_object((GstMiniObject **)&egl.pending); + egl.pending = gstImage; - notifyLoadFinished(); - } + notifyLoadFinished(); + } } struct SHMBufferContext { @@ -857,9 +864,8 @@ void GstWPEThreadedView::releaseSHMBuffer(gpointer data) { SHMBufferContext* context = static_cast(data); s_view->dispatch([&]() { - auto* buffer = static_cast(context->buffer); - GST_TRACE("Dispatch release exported buffer %p", buffer); - wpe_view_backend_exportable_fdo_dispatch_release_shm_exported_buffer(wpe.exportable, buffer); + GST_TRACE("Dispatch release exported buffer %p", context->buffer); + wpe_view_backend_exportable_fdo_dispatch_release_shm_exported_buffer(wpe.exportable, context->buffer); }); } @@ -910,7 +916,7 @@ struct wpe_view_backend_exportable_fdo_egl_client GstWPEThreadedView::s_exportab nullptr, [](void* data, struct wpe_fdo_egl_exported_image* image) { auto& view = *static_cast(data); - view.handleExportedImage(static_cast(image)); + view.handleExportedImage(image); }, nullptr, // padding @@ -929,13 +935,6 @@ struct wpe_view_backend_exportable_fdo_client GstWPEThreadedView::s_exportableCl nullptr, }; -void GstWPEThreadedView::s_releaseImage(GstEGLImage* image, gpointer data) -{ - ImageContext* context = static_cast(data); - context->view->releaseImage(context->image); - g_free (context); -} - struct wpe_view_backend* GstWPEThreadedView::backend() const { return wpe.exportable ? wpe_view_backend_exportable_fdo_get_view_backend(wpe.exportable) : nullptr; diff --git a/subprojects/gst-plugins-bad/ext/wpe/gstwpethreadedview.h b/subprojects/gst-plugins-bad/ext/wpe/gstwpethreadedview.h index 8e31aae3d4..5a32130ffd 100644 --- a/subprojects/gst-plugins-bad/ext/wpe/gstwpethreadedview.h +++ b/subprojects/gst-plugins-bad/ext/wpe/gstwpethreadedview.h @@ -65,7 +65,7 @@ public: void notifyLoadFinished(); protected: - void handleExportedImage(gpointer); + void handleExportedImage(struct wpe_fdo_egl_exported_image*); void handleExportedBuffer(struct wpe_fdo_shm_exported_buffer*); private: @@ -73,7 +73,7 @@ private: void frameComplete(); void loadUriUnlocked(const gchar*); - void releaseImage(gpointer); + void releaseImage(struct wpe_fdo_egl_exported_image *); void releaseSHMBuffer(gpointer); static void s_releaseSHMBuffer(gpointer);