[gthumb: 10/13] media viewer: fixed pipeline for hardware accelerated playback



commit 916f3ee7402afffe52ab40793acd58df48723a55
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Mon Jul 13 12:51:25 2020 +0200

    media viewer: fixed pipeline for hardware accelerated playback

 extensions/gstreamer_tools/gth-media-viewer-page.c | 37 +++++++++-------------
 1 file changed, 15 insertions(+), 22 deletions(-)
---
diff --git a/extensions/gstreamer_tools/gth-media-viewer-page.c 
b/extensions/gstreamer_tools/gth-media-viewer-page.c
index 43b60a07..53b27cdd 100644
--- a/extensions/gstreamer_tools/gth-media-viewer-page.c
+++ b/extensions/gstreamer_tools/gth-media-viewer-page.c
@@ -23,6 +23,7 @@
 #include <math.h>
 #include <gdk/gdkkeysyms.h>
 #include <gst/gst.h>
+#include <gst/video/video.h>
 #include <gthumb.h>
 #include <extensions/gstreamer_utils/gstreamer-utils.h>
 #include "actions.h"
@@ -830,7 +831,6 @@ static void
 create_playbin (GthMediaViewerPage *self)
 {
        GstElement *scaletempo;
-       GstElement *video_sink;
        GstBus     *bus;
 
        if (self->priv->playbin != NULL)
@@ -843,30 +843,24 @@ create_playbin (GthMediaViewerPage *self)
                g_object_set (self->priv->playbin, "audio-filter", scaletempo, NULL);
 
        if (g_settings_get_boolean (self->priv->settings, PREF_GSTREAMER_USE_HARDWARE_ACCEL)) {
-               GstElement *video_bin;
-               GstElement *glupload;
-               GstPad     *pad;
-               GstPad     *ghost_pad;
-
-               /* pipeline taken from GNOME Twitch */
-
-               video_sink = gst_element_factory_make ("gtkglsink", "sink");
-               video_bin = gst_bin_new ("video_bin");
-               glupload = gst_element_factory_make ("glupload", NULL);
-               gst_bin_add_many (GST_BIN(video_bin), glupload, video_sink, NULL);
-               gst_element_link_many (glupload, video_sink, NULL);
-               pad = gst_element_get_static_pad (glupload, "sink");
-               ghost_pad = gst_ghost_pad_new ("sink", pad);
-               gst_pad_set_active (ghost_pad, TRUE);
-               gst_element_add_pad (video_bin, ghost_pad);
-               g_object_set (self->priv->playbin, "video-sink", video_bin, NULL);
+               GstElement *glsinkbin;
+               GstElement *gtkglsink;
+
+               glsinkbin = gst_element_factory_make ("glsinkbin", "");
+               gtkglsink = gst_element_factory_make ("gtkglsink", "sink");
+               g_object_set (glsinkbin, "sink", gtkglsink, NULL);
+               g_object_set (self->priv->playbin, "video-sink", glsinkbin, NULL);
+
+               g_object_get (gtkglsink, "widget", &self->priv->video_area, NULL);
        }
        else {
-               video_sink = gst_element_factory_make ("gtksink", "sink");
-               g_object_set (self->priv->playbin, "video-sink", video_sink, NULL);
+               GstElement *gtksink;
+
+               gtksink = gst_element_factory_make ("gtksink", "sink");
+               g_object_set (self->priv->playbin, "video-sink", gtksink, NULL);
+               g_object_get (gtksink, "widget", &self->priv->video_area, NULL);
        }
 
-       g_object_get (video_sink, "widget", &self->priv->video_area, NULL);
        gtk_style_context_add_class (gtk_widget_get_style_context (self->priv->video_area), "video-player");
        gtk_widget_add_events (self->priv->video_area,
                               (gtk_widget_get_events (self->priv->video_area)
@@ -878,7 +872,6 @@ create_playbin (GthMediaViewerPage *self)
                                | GDK_BUTTON_MOTION_MASK
                                | GDK_SCROLL_MASK));
        gtk_widget_set_can_focus (self->priv->video_area, TRUE);
-       gtk_widget_show (self->priv->video_area);
 
        g_signal_connect (G_OBJECT (self->priv->video_area),
                          "realize",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]