[gthumb: 10/13] media viewer: fixed pipeline for hardware accelerated playback
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb: 10/13] media viewer: fixed pipeline for hardware accelerated playback
- Date: Sun, 19 Jul 2020 09:43:00 +0000 (UTC)
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]