gst-player: remove workaround which disable visualizations

As we upgrade to libva 1.8.3, we can remove the workaround patch
which disables visualizations in gst-player:
        1. 0001-gtk-play-Disable-visualizations.patch

Also remove the upstreamed patches:
        1. filechooser.patch
        2. Fix-pause-play.patch
        3. Add-error-signal-emission-for-missing-plugins.patch

Fixes [YOCTO #11437]

(From OE-Core rev: 50f1902cb44724aa4b030e4e42b115231217acc9)

Signed-off-by: Maxin B. John <maxin.john@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Maxin B. John
2017-08-14 15:09:07 +03:00
committed by Richard Purdie
parent 14af29ed1d
commit afb2ba67fe
5 changed files with 0 additions and 476 deletions

View File

@@ -1,59 +0,0 @@
From 6cf42c468e93b0aaa171961e059bc3e2fb915889 Mon Sep 17 00:00:00 2001
From: Jussi Kukkonen <jussi.kukkonen@intel.com>
Date: Fri, 28 Apr 2017 14:35:19 +0300
Subject: [PATCH] gtk-play: Disable visualizations
This is a workaround for [YOCTO #11410] (audio playback is broken in
mediaplayer if vaapi is used). It disables visualizations and makes
sure we clear the window (otherwise nothing does that and result is
very ugly).
This patch should be removed when 11410 is fixed.
Upstream-Status: Inappropriate [bug workaround]
Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
---
gtk/gtk-play.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/gtk/gtk-play.c b/gtk/gtk-play.c
index 8ae0fea..63b9bb0 100644
--- a/gtk/gtk-play.c
+++ b/gtk/gtk-play.c
@@ -1401,6 +1401,15 @@ get_child_position (GtkOverlay * overlay, GtkWidget * widget,
return TRUE;
}
+/* Hack to make sure something gets drawn if visualizations are disabled */
+static gboolean
+draw_cb (GtkWidget *widget, cairo_t *cr, gpointer data)
+{
+ cairo_set_source_rgb (cr, 0, 0, 0);
+ cairo_paint (cr);
+ return FALSE;
+}
+
static void
create_ui (GtkPlay * play)
{
@@ -1431,6 +1440,8 @@ create_ui (GtkPlay * play)
play->video_area = gtk_drawing_area_new ();
g_signal_connect (play->video_area, "realize",
G_CALLBACK (video_area_realize_cb), play);
+ g_signal_connect (play->video_area, "draw",
+ G_CALLBACK (draw_cb), NULL);
}
gtk_widget_set_events (play->video_area, GDK_EXPOSURE_MASK
| GDK_LEAVE_NOTIFY_MASK
@@ -1753,7 +1764,7 @@ gtk_play_constructor (GType type, guint n_construct_params,
/* enable visualization (by default playbin uses goom) */
/* if visualization is enabled then use the first element */
- gst_player_set_visualization_enabled (self->player, TRUE);
+ gst_player_set_visualization_enabled (self->player, FALSE);
g_signal_connect (G_OBJECT (self), "show", G_CALLBACK (show_cb), NULL);
--
2.1.4

View File

@@ -1,252 +0,0 @@
From d64c7edb66f4a64ff49c4306cf77fd269b7079ab Mon Sep 17 00:00:00 2001
From: Jussi Kukkonen <jussi.kukkonen@intel.com>
Date: Mon, 16 Mar 2015 13:45:30 +0200
Subject: [PATCH] Add error signal emission for missing plugins
Add a missing plugins error signal to gst-player. Note that this error
does not necessarily mean the playback has completely failed, but in
practice the user experience will be bad (think, e.g. of a mp4 file
where H.264 codec is missing: AAC playback still works...).
Use the signal in gtk-play to show a infobar if plugins are missing.
Submitted upstream at https://github.com/sdroege/gst-player/pull/11
Upstream-Status: Submitted
Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
---
configure.ac | 2 +-
gtk/gtk-play.c | 54 +++++++++++++++++++++++++++++++++++++++++++++-
lib/gst/player/gstplayer.c | 22 +++++++++++++++++++
lib/gst/player/gstplayer.h | 3 ++-
4 files changed, 78 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
index 90ab74c..6cdb4eb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -53,7 +53,7 @@ AC_SUBST(LT_AGE)
PKG_PROG_PKG_CONFIG
PKG_CHECK_MODULES(GLIB, [glib-2.0 gobject-2.0])
-PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0 >= 1.4 gstreamer-video-1.0 >= 1.4])
+PKG_CHECK_MODULES(GSTREAMER, [gstreamer-1.0 >= 1.4 gstreamer-video-1.0 >= 1.4 gstreamer-pbutils-1.0])
GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
AC_SUBST(GLIB_PREFIX)
diff --git a/gtk/gtk-play.c b/gtk/gtk-play.c
index b92773b..e2b605a 100644
--- a/gtk/gtk-play.c
+++ b/gtk/gtk-play.c
@@ -30,6 +30,8 @@ typedef struct
GtkWidget *prev_button, *next_button;
GtkWidget *seekbar;
GtkWidget *video_area;
+ GtkWidget *info_label;
+ GtkWidget *info_bar;
GtkWidget *volume_button;
gulong seekbar_value_changed_signal_id;
gboolean playing;
@@ -141,6 +143,13 @@ play_pause_clicked_cb (GtkButton * button, GtkPlay * play)
}
static void
+clear_missing_plugins (GtkPlay * play)
+{
+ gtk_label_set_text (GTK_LABEL (play->info_label), "");
+ gtk_widget_hide (play->info_bar);
+}
+
+static void
skip_prev_clicked_cb (GtkButton * button, GtkPlay * play)
{
GList *prev;
@@ -155,6 +164,7 @@ skip_prev_clicked_cb (GtkButton * button, GtkPlay * play)
gtk_widget_set_sensitive (play->next_button, TRUE);
gst_player_set_uri (play->player, prev->data);
+ clear_missing_plugins (play);
gst_player_play (play->player);
set_title (play, prev->data);
gtk_widget_set_sensitive (play->prev_button, g_list_previous (prev) != NULL);
@@ -175,6 +185,7 @@ skip_next_clicked_cb (GtkButton * button, GtkPlay * play)
gtk_widget_set_sensitive (play->prev_button, TRUE);
gst_player_set_uri (play->player, next->data);
+ clear_missing_plugins (play);
gst_player_play (play->player);
set_title (play, next->data);
gtk_widget_set_sensitive (play->next_button, g_list_next (next) != NULL);
@@ -193,10 +204,16 @@ volume_changed_cb (GtkScaleButton * button, gdouble value, GtkPlay * play)
gst_player_set_volume (play->player, value);
}
+void
+info_bar_response_cb (GtkInfoBar * bar, gint response, GtkPlay * play)
+{
+ gtk_widget_hide (GTK_WIDGET (bar));
+}
+
static void
create_ui (GtkPlay * play)
{
- GtkWidget *controls, *main_hbox, *main_vbox;
+ GtkWidget *controls, *main_hbox, *main_vbox, *info_bar, *content_area;
play->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (G_OBJECT (play->window), "delete-event",
@@ -208,6 +225,20 @@ create_ui (GtkPlay * play)
g_signal_connect (play->video_area, "realize",
G_CALLBACK (video_area_realize_cb), play);
+ play->info_bar = gtk_info_bar_new ();
+ gtk_info_bar_set_message_type (GTK_INFO_BAR (play->info_bar),
+ GTK_MESSAGE_WARNING);
+ //gtk_info_bar_set_show_close_button (GTK_INFO_BAR (play->info_bar),
+ // TRUE);
+ gtk_widget_set_no_show_all (play->info_bar, TRUE);
+ g_signal_connect (play->info_bar, "response",
+ G_CALLBACK (info_bar_response_cb), play);
+
+ content_area = gtk_info_bar_get_content_area (GTK_INFO_BAR (play->info_bar));
+ play->info_label = gtk_label_new ("");
+ gtk_container_add (GTK_CONTAINER (content_area), play->info_label);
+ gtk_widget_show (play->info_label);
+
/* Unified play/pause button */
play->play_pause_button =
gtk_button_new_from_icon_name ("media-playback-pause",
@@ -258,6 +289,7 @@ create_ui (GtkPlay * play)
main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_box_pack_start (GTK_BOX (main_vbox), main_hbox, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (main_vbox), play->info_bar, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (main_vbox), controls, FALSE, FALSE, 0);
gtk_container_add (GTK_CONTAINER (play->window), main_vbox);
@@ -322,6 +354,7 @@ eos_cb (GstPlayer * unused, GtkPlay * play)
gtk_widget_set_sensitive (play->next_button, g_list_next (next) != NULL);
gst_player_set_uri (play->player, next->data);
+ clear_missing_plugins (play);
gst_player_play (play->player);
set_title (play, next->data);
} else {
@@ -330,6 +363,24 @@ eos_cb (GstPlayer * unused, GtkPlay * play)
}
}
+static void
+error_cb (GstPlayer * player, GError * err, GtkPlay * play)
+{
+ char *message;
+
+ if (g_error_matches (err, gst_player_error_quark (),
+ GST_PLAYER_ERROR_MISSING_PLUGIN)) {
+ // add message to end of any existing message: there may be
+ // multiple missing plugins.
+ message = g_strdup_printf ("%s%s. ",
+ gtk_label_get_text (GTK_LABEL (play->info_label)), err->message);
+ gtk_label_set_text (GTK_LABEL (play->info_label), message);
+ g_free (message);
+
+ gtk_widget_show (play->info_bar);
+ }
+}
+
int
main (gint argc, gchar ** argv)
{
@@ -422,6 +473,7 @@ main (gint argc, gchar ** argv)
g_signal_connect (play.player, "video-dimensions-changed",
G_CALLBACK (video_dimensions_changed_cb), &play);
g_signal_connect (play.player, "end-of-stream", G_CALLBACK (eos_cb), &play);
+ g_signal_connect (play.player, "error", G_CALLBACK (error_cb), &play);
/* We have file(s) that need playing. */
set_title (&play, g_list_first (play.uris)->data);
diff --git a/lib/gst/player/gstplayer.c b/lib/gst/player/gstplayer.c
index bd682d9..78e7ba1 100644
--- a/lib/gst/player/gstplayer.c
+++ b/lib/gst/player/gstplayer.c
@@ -47,6 +47,7 @@
#include <gst/gst.h>
#include <gst/video/video.h>
+#include <gst/pbutils/missing-plugins.h>
GST_DEBUG_CATEGORY_STATIC (gst_player_debug);
#define GST_CAT_DEFAULT gst_player_debug
@@ -238,6 +239,7 @@ gst_player_class_init (GstPlayerClass * klass)
g_signal_new ("video-dimensions-changed", G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, 0, NULL,
NULL, NULL, G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
+
}
static void
@@ -619,6 +621,21 @@ error_cb (GstBus * bus, GstMessage * msg, gpointer user_data)
g_mutex_unlock (&self->priv->lock);
}
+static void
+element_cb (GstBus * bus, GstMessage * msg, gpointer user_data)
+{
+ GstPlayer *self = GST_PLAYER (user_data);
+
+ if (gst_is_missing_plugin_message (msg)) {
+ gchar *desc;
+
+ desc = gst_missing_plugin_message_get_description (msg);
+ emit_error (self, g_error_new (GST_PLAYER_ERROR,
+ GST_PLAYER_ERROR_MISSING_PLUGIN, "Missing plugin '%s'", desc));
+ g_free (desc);
+ }
+}
+
static gboolean
eos_dispatch (gpointer user_data)
{
@@ -1059,6 +1076,8 @@ gst_player_main (gpointer data)
NULL, NULL);
g_source_attach (bus_source, self->priv->context);
+ g_signal_connect (G_OBJECT (bus), "message::element",
+ G_CALLBACK (element_cb), self);
g_signal_connect (G_OBJECT (bus), "message::error", G_CALLBACK (error_cb),
self);
g_signal_connect (G_OBJECT (bus), "message::eos", G_CALLBACK (eos_cb), self);
@@ -1560,6 +1579,7 @@ gst_player_error_get_type (void)
static gsize id = 0;
static const GEnumValue values[] = {
{C_ENUM (GST_PLAYER_ERROR_FAILED), "GST_PLAYER_ERROR_FAILED", "failed"},
+ {C_ENUM (GST_PLAYER_ERROR_MISSING_PLUGIN), "GST_PLAYER_ERROR_MISSING_PLUGIN", "missing-plugin"},
{0, NULL, NULL}
};
@@ -1577,6 +1597,8 @@ gst_player_error_get_name (GstPlayerError error)
switch (error) {
case GST_PLAYER_ERROR_FAILED:
return "failed";
+ case GST_PLAYER_ERROR_MISSING_PLUGIN:
+ return "missing-plugin";
}
g_assert_not_reached ();
diff --git a/lib/gst/player/gstplayer.h b/lib/gst/player/gstplayer.h
index c438513..35fb5bb 100644
--- a/lib/gst/player/gstplayer.h
+++ b/lib/gst/player/gstplayer.h
@@ -44,7 +44,8 @@ GType gst_player_error_get_type (void);
#define GST_TYPE_PLAYER_ERROR (gst_player_error_get_type ())
typedef enum {
- GST_PLAYER_ERROR_FAILED = 0
+ GST_PLAYER_ERROR_FAILED = 0,
+ GST_PLAYER_ERROR_MISSING_PLUGIN
} GstPlayerError;
const gchar *gst_player_error_get_name (GstPlayerError error);
--
2.1.4

View File

@@ -1,107 +0,0 @@
Fix pause/play
The current player state is now notified via the state-changed signal,
and in the GTK UI it was only used to keep track of the desired state.
This is a backport of upstream commit 738479c7a0.
Upstream-Status: Backport
Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
---
gtk/gtk-play.c | 8 ++++++--
lib/gst/player/gstplayer.c | 12 ------------
lib/gst/player/gstplayer.h | 2 --
3 files changed, 6 insertions(+), 16 deletions(-)
diff --git a/gtk/gtk-play.c b/gtk/gtk-play.c
index 6e7a098..e2b605a 100644
--- a/gtk/gtk-play.c
+++ b/gtk/gtk-play.c
@@ -34,6 +34,7 @@ typedef struct
GtkWidget *info_bar;
GtkWidget *volume_button;
gulong seekbar_value_changed_signal_id;
+ gboolean playing;
} GtkPlay;
/* Compat stubs */
@@ -118,12 +119,13 @@ play_pause_clicked_cb (GtkButton * button, GtkPlay * play)
{
GtkWidget *image;
- if (gst_player_is_playing (play->player)) {
+ if (play->playing) {
gst_player_pause (play->player);
image =
gtk_image_new_from_icon_name ("media-playback-start",
GTK_ICON_SIZE_BUTTON);
gtk_button_set_image (GTK_BUTTON (play->play_pause_button), image);
+ play->playing = FALSE;
} else {
gchar *title;
@@ -136,6 +138,7 @@ play_pause_clicked_cb (GtkButton * button, GtkPlay * play)
title = gst_player_get_uri (play->player);
set_title (play, title);
g_free (title);
+ play->playing = TRUE;
}
}
@@ -335,7 +338,7 @@ video_dimensions_changed_cb (GstPlayer * unused, gint width, gint height,
static void
eos_cb (GstPlayer * unused, GtkPlay * play)
{
- if (gst_player_is_playing (play->player)) {
+ if (play->playing) {
GList *next = NULL;
gchar *uri;
@@ -452,6 +455,7 @@ main (gint argc, gchar ** argv)
}
play.player = gst_player_new ();
+ play.playing = TRUE;
g_object_set (play.player, "dispatch-to-main-context", TRUE, NULL);
diff --git a/lib/gst/player/gstplayer.c b/lib/gst/player/gstplayer.c
index 069b284..78e7ba1 100644
--- a/lib/gst/player/gstplayer.c
+++ b/lib/gst/player/gstplayer.c
@@ -1422,18 +1422,6 @@ gst_player_set_uri (GstPlayer * self, const gchar * val)
g_object_set (self, "uri", val, NULL);
}
-gboolean
-gst_player_is_playing (GstPlayer * self)
-{
- gboolean val;
-
- g_return_val_if_fail (GST_IS_PLAYER (self), FALSE);
-
- g_object_get (self, "is-playing", &val, NULL);
-
- return val;
-}
-
GstClockTime
gst_player_get_position (GstPlayer * self)
{
diff --git a/lib/gst/player/gstplayer.h b/lib/gst/player/gstplayer.h
index 6933dd7..35fb5bb 100644
--- a/lib/gst/player/gstplayer.h
+++ b/lib/gst/player/gstplayer.h
@@ -93,8 +93,6 @@ gchar * gst_player_get_uri (GstPlayer * player);
void gst_player_set_uri (GstPlayer * player,
const gchar * uri);
-gboolean gst_player_is_playing (GstPlayer * player);
-
GstClockTime gst_player_get_position (GstPlayer * player);
GstClockTime gst_player_get_duration (GstPlayer * player);
--
2.1.4

View File

@@ -1,54 +0,0 @@
Upstream-Status: Submitted
Signed-off-by: Ross Burton <ross.burton@intel.com>
From 43d4b19ab611d844156e26c4840cc54ddb73ae03 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Thu, 26 Feb 2015 17:17:05 +0000
Subject: [PATCH] gtk-play: show a file chooser if no URIs were passed
---
gtk/gtk-play.c | 28 ++++++++++++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/gtk/gtk-play.c b/gtk/gtk-play.c
index f015077..9766a72 100644
--- a/gtk/gtk-play.c
+++ b/gtk/gtk-play.c
@@ -319,8 +319,32 @@ main (gint argc, gchar ** argv)
// FIXME: Add support for playlists and stuff
/* Parse the list of the file names we have to play. */
if (!file_names) {
- g_print ("Usage: %s FILE(s)|URI(s)\n", APP_NAME);
- return 1;
+ GtkWidget *chooser;
+ int res;
+
+ chooser = gtk_file_chooser_dialog_new ("Select files to play", NULL,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ "_Cancel", GTK_RESPONSE_CANCEL,
+ "_Open", GTK_RESPONSE_ACCEPT,
+ NULL);
+ g_object_set (chooser,
+ "local-only", FALSE,
+ "select-multiple", TRUE,
+ NULL);
+
+ res = gtk_dialog_run (GTK_DIALOG (chooser));
+ if (res == GTK_RESPONSE_ACCEPT) {
+ GSList *l;
+
+ l = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (chooser));
+ while (l) {
+ play.uris = g_list_append (play.uris, l->data);
+ l = g_slist_delete_link (l, l);
+ }
+ } else {
+ return 0;
+ }
+ gtk_widget_destroy (chooser);
} else {
guint i;
--
1.7.10.4

View File

@@ -5,10 +5,6 @@ LIC_FILES_CHKSUM = "file://gtk/gtk-play.c;beginline=1;endline=20;md5=f8c72dae3d3
DEPENDS = "glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gtk+3 glib-2.0-native"
SRC_URI = "git://github.com/sdroege/gst-player.git \
file://filechooser.patch;apply=0 \
file://Fix-pause-play.patch;apply=0 \
file://Add-error-signal-emission-for-missing-plugins.patch;apply=0 \
file://0001-gtk-play-Disable-visualizations.patch \
file://gst-player.desktop"
SRCREV = "ee3c226c82767a089743e4e06058743e67f73cdb"