wpe: Reduce gpointer usage in ThreadedView

Those gpointers were introduced when we had to support some old WPE API, no need
for them anymore.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8413>
This commit is contained in:
Philippe Normand 2024-12-23 11:47:26 +01:00 committed by GStreamer Marge Bot
parent 9adc7bd9f0
commit 1baa10ed07
2 changed files with 30 additions and 31 deletions

View File

@ -815,32 +815,39 @@ void GstWPEThreadedView::setDrawBackground(gboolean drawsBackground)
webkit_web_view_set_background_color(webkit.view, &color); 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([&]() { s_view->dispatch([&]() {
GST_TRACE("Dispatch release exported image %p", imagePointer); GST_TRACE("Dispatch release exported image %p", image);
wpe_view_backend_exportable_fdo_egl_dispatch_release_exported_image(wpe.exportable, wpe_view_backend_exportable_fdo_egl_dispatch_release_exported_image(wpe.exportable, image);
static_cast<struct wpe_fdo_egl_exported_image*>(imagePointer));
}); });
} }
struct ImageContext { struct ImageContext {
GstWPEThreadedView* view; 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<ImageContext *>(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 *imageContext = g_new(ImageContext, 1);
imageContext->view = this; imageContext->view = this;
imageContext->image = static_cast<gpointer>(image); imageContext->image = image;
EGLImageKHR eglImage = wpe_fdo_egl_exported_image_get_egl_image(static_cast<struct wpe_fdo_egl_exported_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); auto *gstImage = gst_egl_image_new_wrapped(gst.context, eglImage, GST_GL_RGBA, imageContext,
s_releaseImage);
{ {
GMutexHolder lock(images_mutex); GMutexHolder lock(images_mutex);
GST_TRACE("EGLImage %p wrapped in GstEGLImage %" GST_PTR_FORMAT, eglImage, gstImage); GST_TRACE("EGLImage %p wrapped in GstEGLImage %" GST_PTR_FORMAT, eglImage,
gstImage);
gst_clear_mini_object((GstMiniObject **)&egl.pending); gst_clear_mini_object((GstMiniObject **)&egl.pending);
egl.pending = gstImage; egl.pending = gstImage;
@ -857,9 +864,8 @@ void GstWPEThreadedView::releaseSHMBuffer(gpointer data)
{ {
SHMBufferContext* context = static_cast<SHMBufferContext*>(data); SHMBufferContext* context = static_cast<SHMBufferContext*>(data);
s_view->dispatch([&]() { s_view->dispatch([&]() {
auto* buffer = static_cast<struct wpe_fdo_shm_exported_buffer*>(context->buffer); GST_TRACE("Dispatch release exported buffer %p", context->buffer);
GST_TRACE("Dispatch release exported buffer %p", buffer); wpe_view_backend_exportable_fdo_dispatch_release_shm_exported_buffer(wpe.exportable, context->buffer);
wpe_view_backend_exportable_fdo_dispatch_release_shm_exported_buffer(wpe.exportable, buffer);
}); });
} }
@ -910,7 +916,7 @@ struct wpe_view_backend_exportable_fdo_egl_client GstWPEThreadedView::s_exportab
nullptr, nullptr,
[](void* data, struct wpe_fdo_egl_exported_image* image) { [](void* data, struct wpe_fdo_egl_exported_image* image) {
auto& view = *static_cast<GstWPEThreadedView*>(data); auto& view = *static_cast<GstWPEThreadedView*>(data);
view.handleExportedImage(static_cast<gpointer>(image)); view.handleExportedImage(image);
}, },
nullptr, nullptr,
// padding // padding
@ -929,13 +935,6 @@ struct wpe_view_backend_exportable_fdo_client GstWPEThreadedView::s_exportableCl
nullptr, nullptr,
}; };
void GstWPEThreadedView::s_releaseImage(GstEGLImage* image, gpointer data)
{
ImageContext* context = static_cast<ImageContext*>(data);
context->view->releaseImage(context->image);
g_free (context);
}
struct wpe_view_backend* GstWPEThreadedView::backend() const struct wpe_view_backend* GstWPEThreadedView::backend() const
{ {
return wpe.exportable ? wpe_view_backend_exportable_fdo_get_view_backend(wpe.exportable) : nullptr; return wpe.exportable ? wpe_view_backend_exportable_fdo_get_view_backend(wpe.exportable) : nullptr;

View File

@ -65,7 +65,7 @@ public:
void notifyLoadFinished(); void notifyLoadFinished();
protected: protected:
void handleExportedImage(gpointer); void handleExportedImage(struct wpe_fdo_egl_exported_image*);
void handleExportedBuffer(struct wpe_fdo_shm_exported_buffer*); void handleExportedBuffer(struct wpe_fdo_shm_exported_buffer*);
private: private:
@ -73,7 +73,7 @@ private:
void frameComplete(); void frameComplete();
void loadUriUnlocked(const gchar*); void loadUriUnlocked(const gchar*);
void releaseImage(gpointer); void releaseImage(struct wpe_fdo_egl_exported_image *);
void releaseSHMBuffer(gpointer); void releaseSHMBuffer(gpointer);
static void s_releaseSHMBuffer(gpointer); static void s_releaseSHMBuffer(gpointer);