|
|
98d0844 |
From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= <sebastian.droege@collabora.co.uk>
|
|
|
98d0844 |
Date: Wed, 19 Sep 2012 11:34:06 +0200
|
|
|
98d0844 |
Subject: Initial port to GStreamer 1.0
|
|
|
98d0844 |
|
|
|
98d0844 |
---
|
|
|
98d0844 |
build/m4/banshee/gstreamer.m4 | 19 +++---
|
|
|
98d0844 |
data/audio-profiles/wav.xml.in | 5 +-
|
|
|
98d0844 |
libbanshee/banshee-bpmdetector.c | 11 ++--
|
|
|
98d0844 |
libbanshee/banshee-gst.h | 4 +-
|
|
|
98d0844 |
libbanshee/banshee-player-cdda.c | 5 +-
|
|
|
98d0844 |
libbanshee/banshee-player-dvd.c | 4 +-
|
|
|
98d0844 |
libbanshee/banshee-player-equalizer.c | 4 +-
|
|
|
98d0844 |
libbanshee/banshee-player-missing-elements.c | 2 +-
|
|
|
98d0844 |
libbanshee/banshee-player-pipeline.c | 37 ++++++-----
|
|
|
98d0844 |
libbanshee/banshee-player-private.h | 13 ++--
|
|
|
98d0844 |
libbanshee/banshee-player-replaygain.c | 29 ++++-----
|
|
|
98d0844 |
libbanshee/banshee-player-video.c | 89 +++++++++++++-------------
|
|
|
98d0844 |
libbanshee/banshee-player-vis.c | 88 ++++++++-----------------
|
|
|
98d0844 |
libbanshee/banshee-player.c | 11 ++--
|
|
|
98d0844 |
libbanshee/banshee-ripper.c | 16 ++---
|
|
|
98d0844 |
libbanshee/banshee-tagger.c | 2 +-
|
|
|
98d0844 |
libbanshee/banshee-transcoder.c | 19 +++---
|
|
|
98d0844 |
17 files changed, 156 insertions(+), 202 deletions(-)
|
|
|
98d0844 |
|
|
|
98d0844 |
diff --git a/build/m4/banshee/gstreamer.m4 b/build/m4/banshee/gstreamer.m4
|
|
|
98d0844 |
index 6267cce..917cf58 100644
|
|
|
98d0844 |
--- a/build/m4/banshee/gstreamer.m4
|
|
|
98d0844 |
+++ b/build/m4/banshee/gstreamer.m4
|
|
|
98d0844 |
@@ -1,17 +1,18 @@
|
|
|
98d0844 |
AC_DEFUN([BANSHEE_CHECK_GSTREAMER],
|
|
|
98d0844 |
[
|
|
|
98d0844 |
- GSTREAMER_REQUIRED_VERSION=0.10.26
|
|
|
98d0844 |
+ GSTREAMER_REQUIRED_VERSION=0.11.99
|
|
|
98d0844 |
AC_SUBST(GSTREAMER_REQUIRED_VERSION)
|
|
|
98d0844 |
|
|
|
98d0844 |
PKG_CHECK_MODULES(GST,
|
|
|
98d0844 |
- gstreamer-0.10 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
- gstreamer-base-0.10 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
- gstreamer-plugins-base-0.10 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
- gstreamer-controller-0.10 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
- gstreamer-dataprotocol-0.10 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
- gstreamer-fft-0.10 >= $GSTREAMER_REQUIRED_VERSION)
|
|
|
98d0844 |
-
|
|
|
98d0844 |
- GST_LIBS="$GST_LIBS -lgstvideo-0.10 -lgstinterfaces-0.10 -lgstcdda-0.10 -lgstpbutils-0.10 -lgsttag-0.10"
|
|
|
98d0844 |
+ gstreamer-1.0 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
+ gstreamer-base-1.0 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
+ gstreamer-controller-1.0 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
+ gstreamer-plugins-base-1.0 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
+ gstreamer-audio-1.0 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
+ gstreamer-fft-1.0 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
+ gstreamer-pbutils-1.0 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
+ gstreamer-tag-1.0 >= $GSTREAMER_REQUIRED_VERSION
|
|
|
98d0844 |
+ gstreamer-video-1.0 >= $GSTREAMER_REQUIRED_VERSION)
|
|
|
98d0844 |
|
|
|
98d0844 |
AC_SUBST(GST_CFLAGS)
|
|
|
98d0844 |
AC_SUBST(GST_LIBS)
|
|
|
98d0844 |
diff --git a/data/audio-profiles/wav.xml.in b/data/audio-profiles/wav.xml.in
|
|
|
98d0844 |
index 35cd1d2..6dc1bab 100644
|
|
|
98d0844 |
--- a/data/audio-profiles/wav.xml.in
|
|
|
98d0844 |
+++ b/data/audio-profiles/wav.xml.in
|
|
|
98d0844 |
@@ -14,10 +14,7 @@
|
|
|
98d0844 |
"audioresample"
|
|
|
98d0844 |
"audioconvert"
|
|
|
98d0844 |
(+ "audio/x-raw-int, "
|
|
|
98d0844 |
- "endianness=(int)1234, "
|
|
|
98d0844 |
- "width=(int)16, "
|
|
|
98d0844 |
- "depth=(int)16, "
|
|
|
98d0844 |
- "signed=(boolean)true, "
|
|
|
98d0844 |
+ "format=(string)S16LE, "
|
|
|
98d0844 |
"rate=(int)44100, "
|
|
|
98d0844 |
"channels=(int)2" )
|
|
|
98d0844 |
"wavenc")
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-bpmdetector.c b/libbanshee/banshee-bpmdetector.c
|
|
|
98d0844 |
index c06ffcb..68b0419 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-bpmdetector.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-bpmdetector.c
|
|
|
98d0844 |
@@ -30,6 +30,7 @@
|
|
|
98d0844 |
# include "config.h"
|
|
|
98d0844 |
#endif
|
|
|
98d0844 |
|
|
|
98d0844 |
+#include <stdio.h>
|
|
|
98d0844 |
#include <string.h>
|
|
|
98d0844 |
#include <glib/gi18n.h>
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -50,7 +51,7 @@ struct BansheeBpmDetector {
|
|
|
98d0844 |
|
|
|
98d0844 |
/*
|
|
|
98d0844 |
* You can run this pipeline on the cmd line with:
|
|
|
98d0844 |
- * gst-launch -m filesrc location=/path/to/my.mp3 ! decodebin2 ! \
|
|
|
98d0844 |
+ * gst-launch -m filesrc location=/path/to/my.mp3 ! decodebin ! \
|
|
|
98d0844 |
* audioconvert ! bpmdetect ! fakesink
|
|
|
98d0844 |
*/
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -168,14 +169,14 @@ bbd_new_decoded_pad(GstElement *decodebin, GstPad *pad,
|
|
|
98d0844 |
|
|
|
98d0844 |
g_return_if_fail(detector != NULL);
|
|
|
98d0844 |
|
|
|
98d0844 |
- audiopad = gst_element_get_pad(detector->audioconvert, "sink");
|
|
|
98d0844 |
+ audiopad = gst_element_get_static_pad(detector->audioconvert, "sink");
|
|
|
98d0844 |
|
|
|
98d0844 |
if(GST_PAD_IS_LINKED(audiopad)) {
|
|
|
98d0844 |
g_object_unref(audiopad);
|
|
|
98d0844 |
return;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- caps = gst_pad_get_caps(pad);
|
|
|
98d0844 |
+ caps = gst_pad_query_caps(pad, NULL);
|
|
|
98d0844 |
str = gst_caps_get_structure(caps, 0);
|
|
|
98d0844 |
|
|
|
98d0844 |
if(!g_strrstr(gst_structure_get_name(str), "audio")) {
|
|
|
98d0844 |
@@ -209,9 +210,9 @@ bbd_pipeline_construct (BansheeBpmDetector *detector)
|
|
|
98d0844 |
return FALSE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- detector->decodebin = gst_element_factory_make ("decodebin2", "decodebin2");
|
|
|
98d0844 |
+ detector->decodebin = gst_element_factory_make ("decodebin", "decodebin");
|
|
|
98d0844 |
if (detector->decodebin == NULL) {
|
|
|
98d0844 |
- bbd_raise_error (detector, _("Could not create decodebin2 plugin"), NULL);
|
|
|
98d0844 |
+ bbd_raise_error (detector, _("Could not create decodebin plugin"), NULL);
|
|
|
98d0844 |
return FALSE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-gst.h b/libbanshee/banshee-gst.h
|
|
|
98d0844 |
index 85662cf..332f356 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-gst.h
|
|
|
98d0844 |
+++ b/libbanshee/banshee-gst.h
|
|
|
98d0844 |
@@ -41,9 +41,11 @@
|
|
|
98d0844 |
#define BANSHEE_GST_ITERATOR_ITERATE(iter,child_type,child_name,free,block) { \
|
|
|
98d0844 |
gboolean iter##_done = FALSE; \
|
|
|
98d0844 |
while (!iter##_done) { \
|
|
|
98d0844 |
+ GValue child_value = {0, }; \
|
|
|
98d0844 |
child_type child_name; \
|
|
|
98d0844 |
- switch (gst_iterator_next (iter, (gpointer)&child_name)) { \
|
|
|
98d0844 |
+ switch (gst_iterator_next (iter, &child_value)) { \
|
|
|
98d0844 |
case GST_ITERATOR_OK: { \
|
|
|
98d0844 |
+ child_name = (child_type) g_value_get_object(&child_value); \
|
|
|
98d0844 |
{ block; } \
|
|
|
98d0844 |
break; \
|
|
|
98d0844 |
} \
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-player-cdda.c b/libbanshee/banshee-player-cdda.c
|
|
|
98d0844 |
index 8be2bdd..401edf0 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-player-cdda.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-player-cdda.c
|
|
|
98d0844 |
@@ -28,7 +28,8 @@
|
|
|
98d0844 |
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
98d0844 |
//
|
|
|
98d0844 |
|
|
|
98d0844 |
-#include <gst/cdda/gstcddabasesrc.h>
|
|
|
98d0844 |
+#include <stdlib.h>
|
|
|
98d0844 |
+#include <gst/audio/gstaudiocdsrc.h>
|
|
|
98d0844 |
#include "banshee-player-cdda.h"
|
|
|
98d0844 |
|
|
|
98d0844 |
// ---------------------------------------------------------------------------
|
|
|
98d0844 |
@@ -46,7 +47,7 @@ bp_cdda_get_cdda_source (GstElement *playbin)
|
|
|
98d0844 |
|
|
|
98d0844 |
g_object_get (playbin, "source", &source, NULL);
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (source == NULL || !GST_IS_CDDA_BASE_SRC (source)) {
|
|
|
98d0844 |
+ if (source == NULL || !GST_IS_AUDIO_CD_SRC (source)) {
|
|
|
98d0844 |
if (source != NULL) {
|
|
|
98d0844 |
g_object_unref (source);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-player-dvd.c b/libbanshee/banshee-player-dvd.c
|
|
|
98d0844 |
index 55d499c..991b506 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-player-dvd.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-player-dvd.c
|
|
|
98d0844 |
@@ -296,7 +296,7 @@ bp_dvd_go_to_next_chapter (BansheePlayer *player)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
gint64 index;
|
|
|
98d0844 |
GstFormat format = gst_format_get_by_nick ("chapter");
|
|
|
98d0844 |
- gst_element_query_position (player->playbin, &format, &index);
|
|
|
98d0844 |
+ gst_element_query_position (player->playbin, format, &index);
|
|
|
98d0844 |
gst_element_seek (player->playbin, 1.0, format, GST_SEEK_FLAG_FLUSH,
|
|
|
98d0844 |
GST_SEEK_TYPE_SET, index + 1, GST_SEEK_TYPE_NONE, 0);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
@@ -306,7 +306,7 @@ bp_dvd_go_to_previous_chapter (BansheePlayer *player)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
gint64 index;
|
|
|
98d0844 |
GstFormat format = gst_format_get_by_nick ("chapter");
|
|
|
98d0844 |
- gst_element_query_position (player->playbin, &format, &index);
|
|
|
98d0844 |
+ gst_element_query_position (player->playbin, format, &index);
|
|
|
98d0844 |
gst_element_seek (player->playbin, 1.0, format, GST_SEEK_FLAG_FLUSH,
|
|
|
98d0844 |
GST_SEEK_TYPE_SET, index - 1, GST_SEEK_TYPE_NONE, 0);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-player-equalizer.c b/libbanshee/banshee-player-equalizer.c
|
|
|
98d0844 |
index a496ada..0cbb3b7 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-player-equalizer.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-player-equalizer.c
|
|
|
98d0844 |
@@ -122,7 +122,7 @@ bp_equalizer_set_gain (BansheePlayer *player, guint bandnum, gdouble gain)
|
|
|
98d0844 |
g_return_if_fail (IS_BANSHEE_PLAYER (player));
|
|
|
98d0844 |
|
|
|
98d0844 |
if (player->equalizer != NULL) {
|
|
|
98d0844 |
- GstObject *band;
|
|
|
98d0844 |
+ GObject *band;
|
|
|
98d0844 |
|
|
|
98d0844 |
g_return_if_fail (bandnum < gst_child_proxy_get_children_count (GST_CHILD_PROXY (player->equalizer)));
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -188,7 +188,7 @@ bp_equalizer_get_frequencies (BansheePlayer *player, gdouble **freq)
|
|
|
98d0844 |
count = gst_child_proxy_get_children_count (GST_CHILD_PROXY (player->equalizer));
|
|
|
98d0844 |
|
|
|
98d0844 |
for (i = 0; i < count; i++) {
|
|
|
98d0844 |
- GstObject *band;
|
|
|
98d0844 |
+ GObject *band;
|
|
|
98d0844 |
|
|
|
98d0844 |
band = gst_child_proxy_get_child_by_index (GST_CHILD_PROXY (player->equalizer), i);
|
|
|
98d0844 |
g_object_get (G_OBJECT (band), "freq", &(*freq)[i], NULL);
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-player-missing-elements.c b/libbanshee/banshee-player-missing-elements.c
|
|
|
98d0844 |
index 20804c4..30118c5 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-player-missing-elements.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-player-missing-elements.c
|
|
|
98d0844 |
@@ -170,7 +170,7 @@ _bp_missing_elements_handle_state_changed (BansheePlayer *player, GstState old,
|
|
|
98d0844 |
}
|
|
|
98d0844 |
#endif
|
|
|
98d0844 |
|
|
|
98d0844 |
- install_return = gst_install_plugins_async (details, player->install_plugins_context,
|
|
|
98d0844 |
+ install_return = gst_install_plugins_async ((const gchar * const*) details, player->install_plugins_context,
|
|
|
98d0844 |
bp_missing_elements_handle_install_result, player);
|
|
|
98d0844 |
|
|
|
98d0844 |
if (install_return != GST_INSTALL_PLUGINS_STARTED_OK) {
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-player-pipeline.c b/libbanshee/banshee-player-pipeline.c
|
|
|
98d0844 |
index ed845f3..6c2af35 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-player-pipeline.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-player-pipeline.c
|
|
|
98d0844 |
@@ -76,7 +76,7 @@ playbin_stream_changed_cb (GstElement * element, BansheePlayer *player)
|
|
|
98d0844 |
GstMessage *msg;
|
|
|
98d0844 |
|
|
|
98d0844 |
// We're being called from the streaming thread, so don't do anything here
|
|
|
98d0844 |
- msg = gst_message_new_application (GST_OBJECT (player->playbin), gst_structure_new ("stream-changed", NULL));
|
|
|
98d0844 |
+ msg = gst_message_new_application (GST_OBJECT (player->playbin), gst_structure_new_empty ("stream-changed"));
|
|
|
98d0844 |
gst_element_post_message (player->playbin, msg);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -218,6 +218,11 @@ bp_pipeline_bus_callback (GstBus *bus, GstMessage *message, gpointer userdata)
|
|
|
98d0844 |
break;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
+ case GST_MESSAGE_STREAM_START: {
|
|
|
98d0844 |
+ bp_next_track_starting (player);
|
|
|
98d0844 |
+ break;
|
|
|
98d0844 |
+ }
|
|
|
98d0844 |
+
|
|
|
98d0844 |
case GST_MESSAGE_APPLICATION: {
|
|
|
98d0844 |
const gchar * name;
|
|
|
98d0844 |
const GstStructure * s = gst_message_get_structure (message);
|
|
|
98d0844 |
@@ -289,11 +294,11 @@ _bp_pipeline_construct (BansheePlayer *player)
|
|
|
98d0844 |
|
|
|
98d0844 |
// Playbin is the core element that handles autoplugging (finding the right
|
|
|
98d0844 |
// source and decoder elements) based on source URI and stream content
|
|
|
98d0844 |
- player->playbin = gst_element_factory_make ("playbin2", "playbin");
|
|
|
98d0844 |
+ player->playbin = gst_element_factory_make ("playbin", "playbin");
|
|
|
98d0844 |
|
|
|
98d0844 |
#ifdef ENABLE_GAPLESS
|
|
|
98d0844 |
// FIXME: Connect a proxy about-to-finish callback that will generate a next-track-starting callback.
|
|
|
98d0844 |
- // This can be removed once playbin2 generates its own next-track signal.
|
|
|
98d0844 |
+ // This can be removed once playbin generates its own next-track signal.
|
|
|
98d0844 |
// bgo#584987 - this is included in >= 0.10.26
|
|
|
98d0844 |
g_signal_connect (player->playbin, "about-to-finish", G_CALLBACK (bp_about_to_finish_callback), player);
|
|
|
98d0844 |
#endif //ENABLE_GAPLESS
|
|
|
98d0844 |
@@ -305,18 +310,13 @@ _bp_pipeline_construct (BansheePlayer *player)
|
|
|
98d0844 |
g_signal_connect (player->playbin, "audio-changed", G_CALLBACK (playbin_stream_changed_cb), player);
|
|
|
98d0844 |
g_signal_connect (player->playbin, "text-changed", G_CALLBACK (playbin_stream_changed_cb), player);
|
|
|
98d0844 |
|
|
|
98d0844 |
- // Try to find an audio sink, prefer gconf, which typically is set to auto these days,
|
|
|
98d0844 |
- // fall back on auto, which should work on windows, and as a last ditch, try alsa
|
|
|
98d0844 |
- audiosink = gst_element_factory_make ("gconfaudiosink", "audiosink");
|
|
|
98d0844 |
- if (audiosink == NULL) {
|
|
|
98d0844 |
- audiosink = gst_element_factory_make ("directsoundsink", "audiosink");
|
|
|
98d0844 |
- if (audiosink != NULL) {
|
|
|
98d0844 |
- g_object_set (G_OBJECT (audiosink), "volume", 1.0, NULL);
|
|
|
98d0844 |
- } else {
|
|
|
98d0844 |
- audiosink = gst_element_factory_make ("autoaudiosink", "audiosink");
|
|
|
98d0844 |
- if (audiosink == NULL) {
|
|
|
98d0844 |
- audiosink = gst_element_factory_make ("alsasink", "audiosink");
|
|
|
98d0844 |
- }
|
|
|
98d0844 |
+ audiosink = gst_element_factory_make ("directsoundsink", "audiosink");
|
|
|
98d0844 |
+ if (audiosink != NULL) {
|
|
|
98d0844 |
+ g_object_set (G_OBJECT (audiosink), "volume", 1.0, NULL);
|
|
|
98d0844 |
+ } else {
|
|
|
98d0844 |
+ audiosink = gst_element_factory_make ("autoaudiosink", "audiosink");
|
|
|
98d0844 |
+ if (audiosink == NULL) {
|
|
|
98d0844 |
+ audiosink = gst_element_factory_make ("alsasink", "audiosink");
|
|
|
98d0844 |
}
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -341,7 +341,6 @@ _bp_pipeline_construct (BansheePlayer *player)
|
|
|
98d0844 |
GstIterator *elem_iter = gst_bin_iterate_recurse (GST_BIN (audiosink));
|
|
|
98d0844 |
BANSHEE_GST_ITERATOR_ITERATE (elem_iter, GstElement *, element, TRUE, {
|
|
|
98d0844 |
player->audiosink_has_volume |= g_object_class_find_property (G_OBJECT_GET_CLASS (element), "volume") != NULL;
|
|
|
98d0844 |
- gst_object_unref (element);
|
|
|
98d0844 |
});
|
|
|
98d0844 |
}
|
|
|
98d0844 |
bp_debug ("Audiosink has volume: %s",
|
|
|
98d0844 |
@@ -383,7 +382,7 @@ _bp_pipeline_construct (BansheePlayer *player)
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
// Ghost pad the audio bin so audio is passed from the bin into the tee
|
|
|
98d0844 |
- teepad = gst_element_get_pad (player->audiotee, "sink");
|
|
|
98d0844 |
+ teepad = gst_element_get_static_pad (player->audiotee, "sink");
|
|
|
98d0844 |
gst_element_add_pad (player->audiobin, gst_ghost_pad_new ("sink", teepad));
|
|
|
98d0844 |
gst_object_unref (teepad);
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -411,8 +410,8 @@ _bp_pipeline_construct (BansheePlayer *player)
|
|
|
98d0844 |
gst_bus_add_watch (bus, bp_pipeline_bus_callback, player);
|
|
|
98d0844 |
|
|
|
98d0844 |
// Link the first tee pad to the primary audio sink queue
|
|
|
98d0844 |
- GstPad *sinkpad = gst_element_get_pad (audiosinkqueue, "sink");
|
|
|
98d0844 |
- pad = gst_element_get_request_pad (player->audiotee, "src%d");
|
|
|
98d0844 |
+ GstPad *sinkpad = gst_element_get_static_pad (audiosinkqueue, "sink");
|
|
|
98d0844 |
+ pad = gst_element_get_request_pad (player->audiotee, "src_%u");
|
|
|
98d0844 |
g_object_set(player->audiotee, "alloc-pad", pad, NULL);
|
|
|
98d0844 |
gst_pad_link (pad, sinkpad);
|
|
|
98d0844 |
gst_object_unref (GST_OBJECT (pad));
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-player-private.h b/libbanshee/banshee-player-private.h
|
|
|
98d0844 |
index 9fed356..9346911 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-player-private.h
|
|
|
98d0844 |
+++ b/libbanshee/banshee-player-private.h
|
|
|
98d0844 |
@@ -42,14 +42,14 @@
|
|
|
98d0844 |
#include <gst/fft/gstfftf32.h>
|
|
|
98d0844 |
#include <gst/pbutils/pbutils.h>
|
|
|
98d0844 |
#include <gst/tag/tag.h>
|
|
|
98d0844 |
-#include <gst/interfaces/navigation.h>
|
|
|
98d0844 |
+#include <gst/video/navigation.h>
|
|
|
98d0844 |
|
|
|
98d0844 |
#if defined(GDK_WINDOWING_X11)
|
|
|
98d0844 |
# include <gdk/gdkx.h>
|
|
|
98d0844 |
-# include <gst/interfaces/xoverlay.h>
|
|
|
98d0844 |
+# include <gst/video/videooverlay.h>
|
|
|
98d0844 |
#elif defined(GDK_WINDOWING_WIN32)
|
|
|
98d0844 |
# include <gdk/gdkwin32.h>
|
|
|
98d0844 |
-# include <gst/interfaces/xoverlay.h>
|
|
|
98d0844 |
+# include <gst/video/videooverlay.h>
|
|
|
98d0844 |
#endif
|
|
|
98d0844 |
|
|
|
98d0844 |
#include "banshee-gst.h"
|
|
|
98d0844 |
@@ -155,11 +155,11 @@ struct BansheePlayer {
|
|
|
98d0844 |
// Video State
|
|
|
98d0844 |
BpVideoDisplayContextType video_display_context_type;
|
|
|
98d0844 |
#if defined(GDK_WINDOWING_X11)
|
|
|
98d0844 |
- GstXOverlay *xoverlay;
|
|
|
98d0844 |
+ GstVideoOverlay *video_overlay;
|
|
|
98d0844 |
GdkWindow *video_window;
|
|
|
98d0844 |
XID video_window_xid;
|
|
|
98d0844 |
#elif defined(GDK_WINDOWING_WIN32)
|
|
|
98d0844 |
- GstXOverlay *xoverlay;
|
|
|
98d0844 |
+ GstVideoOverlay *video_overlay;
|
|
|
98d0844 |
GdkWindow *video_window;
|
|
|
98d0844 |
HWND video_window_xid;
|
|
|
98d0844 |
#endif
|
|
|
98d0844 |
@@ -179,6 +179,8 @@ struct BansheePlayer {
|
|
|
98d0844 |
GstFFTF32 *vis_fft;
|
|
|
98d0844 |
GstFFTF32Complex *vis_fft_buffer;
|
|
|
98d0844 |
gfloat *vis_fft_sample_buffer;
|
|
|
98d0844 |
+ GstPad *vis_event_probe_pad;
|
|
|
98d0844 |
+ gulong vis_event_probe_id;
|
|
|
98d0844 |
|
|
|
98d0844 |
// Plugin Installer State
|
|
|
98d0844 |
GdkWindow *window;
|
|
|
98d0844 |
@@ -197,6 +199,7 @@ struct BansheePlayer {
|
|
|
98d0844 |
// http://replaygain.hydrogenaudio.org/player_scale.html
|
|
|
98d0844 |
gdouble rg_gain_history[10];
|
|
|
98d0844 |
gint history_size;
|
|
|
98d0844 |
+ gulong rg_pad_block_id;
|
|
|
98d0844 |
|
|
|
98d0844 |
//dvd navigation
|
|
|
98d0844 |
GstNavigation *navigation;
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-player-replaygain.c b/libbanshee/banshee-player-replaygain.c
|
|
|
98d0844 |
index a479d4a..e42b197 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-player-replaygain.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-player-replaygain.c
|
|
|
98d0844 |
@@ -79,17 +79,13 @@ static void on_target_gain_changed (GstElement *rgvolume, GParamSpec *pspec, Ban
|
|
|
98d0844 |
_bp_rgvolume_print_volume (player);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
-static void
|
|
|
98d0844 |
-pad_block_cb (GstPad *srcPad, gboolean blocked, gpointer user_data)
|
|
|
98d0844 |
+static GstPadProbeReturn
|
|
|
98d0844 |
+pad_block_cb (GstPad *srcPad, GstPadProbeInfo *info, gpointer user_data)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
BansheePlayer* player;
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (!blocked) {
|
|
|
98d0844 |
- return;
|
|
|
98d0844 |
- }
|
|
|
98d0844 |
-
|
|
|
98d0844 |
player = (BansheePlayer*) user_data;
|
|
|
98d0844 |
- g_return_if_fail (IS_BANSHEE_PLAYER (player));
|
|
|
98d0844 |
+ g_return_val_if_fail (IS_BANSHEE_PLAYER (player), GST_PAD_PROBE_OK);
|
|
|
98d0844 |
|
|
|
98d0844 |
// The pad_block_cb can get triggered multiple times, on different threads.
|
|
|
98d0844 |
// Lock around the link/unlink code, so we don't end up going through here
|
|
|
98d0844 |
@@ -99,11 +95,9 @@ pad_block_cb (GstPad *srcPad, gboolean blocked, gpointer user_data)
|
|
|
98d0844 |
if ((player->replaygain_enabled && player->rgvolume_in_pipeline) ||
|
|
|
98d0844 |
(!player->replaygain_enabled && !player->rgvolume_in_pipeline)) {
|
|
|
98d0844 |
// The pipeline is already in the correct state. Unblock the pad, and return.
|
|
|
98d0844 |
+ player->rg_pad_block_id = 0;
|
|
|
98d0844 |
g_mutex_unlock (player->replaygain_mutex);
|
|
|
98d0844 |
- if (gst_pad_is_blocked (srcPad)) {
|
|
|
98d0844 |
- gst_pad_set_blocked_async (srcPad, FALSE, &pad_block_cb, player);
|
|
|
98d0844 |
- }
|
|
|
98d0844 |
- return;
|
|
|
98d0844 |
+ return GST_PAD_PROBE_REMOVE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
if (player->rgvolume_in_pipeline) {
|
|
|
98d0844 |
@@ -139,13 +133,12 @@ pad_block_cb (GstPad *srcPad, gboolean blocked, gpointer user_data)
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
// Our state is now consistent
|
|
|
98d0844 |
+ player->rg_pad_block_id = 0;
|
|
|
98d0844 |
g_mutex_unlock (player->replaygain_mutex);
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (gst_pad_is_blocked (srcPad)) {
|
|
|
98d0844 |
- gst_pad_set_blocked_async (srcPad, FALSE, &pad_block_cb, player);
|
|
|
98d0844 |
- }
|
|
|
98d0844 |
-
|
|
|
98d0844 |
_bp_rgvolume_print_volume (player);
|
|
|
98d0844 |
+
|
|
|
98d0844 |
+ return GST_PAD_PROBE_REMOVE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
// ---------------------------------------------------------------------------
|
|
|
98d0844 |
@@ -187,9 +180,9 @@ void _bp_replaygain_pipeline_rebuild (BansheePlayer* player)
|
|
|
98d0844 |
srcPad = gst_element_get_static_pad (player->before_rgvolume, "src");
|
|
|
98d0844 |
|
|
|
98d0844 |
if (gst_pad_is_active (srcPad) && !gst_pad_is_blocked (srcPad)) {
|
|
|
98d0844 |
- gst_pad_set_blocked_async (srcPad, TRUE, &pad_block_cb, player);
|
|
|
98d0844 |
- } else if (srcPad->block_callback == NULL) {
|
|
|
98d0844 |
- pad_block_cb (srcPad, TRUE, player);
|
|
|
98d0844 |
+ player->rg_pad_block_id = gst_pad_add_probe (srcPad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM, &pad_block_cb, player, NULL);
|
|
|
98d0844 |
+ } else if (!player->rg_pad_block_id) {
|
|
|
98d0844 |
+ pad_block_cb (srcPad, NULL, player);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-player-video.c b/libbanshee/banshee-player-video.c
|
|
|
98d0844 |
index b901354..eb95c3f 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-player-video.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-player-video.c
|
|
|
98d0844 |
@@ -37,54 +37,54 @@
|
|
|
98d0844 |
#if defined(GDK_WINDOWING_X11) || defined(GDK_WINDOWING_WIN32)
|
|
|
98d0844 |
|
|
|
98d0844 |
static gboolean
|
|
|
98d0844 |
-bp_video_find_xoverlay (BansheePlayer *player)
|
|
|
98d0844 |
+bp_video_find_video_overlay (BansheePlayer *player)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
GstElement *video_sink = NULL;
|
|
|
98d0844 |
- GstElement *xoverlay;
|
|
|
98d0844 |
- GstXOverlay *previous_xoverlay;
|
|
|
98d0844 |
- gboolean found_xoverlay;
|
|
|
98d0844 |
+ GstElement *video_overlay;
|
|
|
98d0844 |
+ GstVideoOverlay *previous_video_overlay;
|
|
|
98d0844 |
+ gboolean found_video_overlay;
|
|
|
98d0844 |
|
|
|
98d0844 |
g_object_get (player->playbin, "video-sink", &video_sink, NULL);
|
|
|
98d0844 |
|
|
|
98d0844 |
g_mutex_lock (player->video_mutex);
|
|
|
98d0844 |
- previous_xoverlay = player->xoverlay;
|
|
|
98d0844 |
+ previous_video_overlay = player->video_overlay;
|
|
|
98d0844 |
|
|
|
98d0844 |
if (video_sink == NULL) {
|
|
|
98d0844 |
- player->xoverlay = NULL;
|
|
|
98d0844 |
- if (previous_xoverlay != NULL) {
|
|
|
98d0844 |
- gst_object_unref (previous_xoverlay);
|
|
|
98d0844 |
+ player->video_overlay = NULL;
|
|
|
98d0844 |
+ if (previous_video_overlay != NULL) {
|
|
|
98d0844 |
+ gst_object_unref (previous_video_overlay);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
g_mutex_unlock (player->video_mutex);
|
|
|
98d0844 |
return FALSE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- xoverlay = GST_IS_BIN (video_sink)
|
|
|
98d0844 |
- ? gst_bin_get_by_interface (GST_BIN (video_sink), GST_TYPE_X_OVERLAY)
|
|
|
98d0844 |
+ video_overlay = GST_IS_BIN (video_sink)
|
|
|
98d0844 |
+ ? gst_bin_get_by_interface (GST_BIN (video_sink), GST_TYPE_VIDEO_OVERLAY)
|
|
|
98d0844 |
: video_sink;
|
|
|
98d0844 |
|
|
|
98d0844 |
- player->xoverlay = GST_IS_X_OVERLAY (xoverlay) ? GST_X_OVERLAY (xoverlay) : NULL;
|
|
|
98d0844 |
+ player->video_overlay = GST_IS_VIDEO_OVERLAY (video_overlay) ? GST_VIDEO_OVERLAY (video_overlay) : NULL;
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (previous_xoverlay != NULL) {
|
|
|
98d0844 |
- gst_object_unref (previous_xoverlay);
|
|
|
98d0844 |
+ if (previous_video_overlay != NULL) {
|
|
|
98d0844 |
+ gst_object_unref (previous_video_overlay);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
#if !defined(GDK_WINDOWING_WIN32) // We can't rely on aspect ratio from dshowvideosink
|
|
|
98d0844 |
- if (player->xoverlay != NULL && g_object_class_find_property (
|
|
|
98d0844 |
- G_OBJECT_GET_CLASS (player->xoverlay), "force-aspect-ratio")) {
|
|
|
98d0844 |
- g_object_set (G_OBJECT (player->xoverlay), "force-aspect-ratio", TRUE, NULL);
|
|
|
98d0844 |
+ if (player->video_overlay != NULL && g_object_class_find_property (
|
|
|
98d0844 |
+ G_OBJECT_GET_CLASS (player->video_overlay), "force-aspect-ratio")) {
|
|
|
98d0844 |
+ g_object_set (G_OBJECT (player->video_overlay), "force-aspect-ratio", TRUE, NULL);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
#endif
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (player->xoverlay != NULL && g_object_class_find_property (
|
|
|
98d0844 |
- G_OBJECT_GET_CLASS (player->xoverlay), "handle-events")) {
|
|
|
98d0844 |
- g_object_set (G_OBJECT (player->xoverlay), "handle-events", FALSE, NULL);
|
|
|
98d0844 |
+ if (player->video_overlay != NULL && g_object_class_find_property (
|
|
|
98d0844 |
+ G_OBJECT_GET_CLASS (player->video_overlay), "handle-events")) {
|
|
|
98d0844 |
+ g_object_set (G_OBJECT (player->video_overlay), "handle-events", FALSE, NULL);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
gst_object_unref (video_sink);
|
|
|
98d0844 |
- found_xoverlay = (player->xoverlay != NULL) ? TRUE : FALSE;
|
|
|
98d0844 |
+ found_video_overlay = (player->video_overlay != NULL) ? TRUE : FALSE;
|
|
|
98d0844 |
|
|
|
98d0844 |
g_mutex_unlock (player->video_mutex);
|
|
|
98d0844 |
- return found_xoverlay;
|
|
|
98d0844 |
+ return found_video_overlay;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
#endif /* GDK_WINDOWING_X11 || GDK_WINDOWING_WIN32 */
|
|
|
98d0844 |
@@ -130,27 +130,27 @@ bp_video_sink_element_added (GstBin *videosink, GstElement *element, BansheePlay
|
|
|
98d0844 |
g_return_if_fail (IS_BANSHEE_PLAYER (player));
|
|
|
98d0844 |
|
|
|
98d0844 |
#if defined(GDK_WINDOWING_X11) || defined(GDK_WINDOWING_WIN32)
|
|
|
98d0844 |
- bp_video_find_xoverlay (player);
|
|
|
98d0844 |
+ bp_video_find_video_overlay (player);
|
|
|
98d0844 |
#endif
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
static void
|
|
|
98d0844 |
bp_video_bus_element_sync_message (GstBus *bus, GstMessage *message, BansheePlayer *player)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
- gboolean found_xoverlay;
|
|
|
98d0844 |
+ gboolean found_video_overlay;
|
|
|
98d0844 |
|
|
|
98d0844 |
g_return_if_fail (IS_BANSHEE_PLAYER (player));
|
|
|
98d0844 |
|
|
|
98d0844 |
#if defined(GDK_WINDOWING_X11) || defined(GDK_WINDOWING_WIN32)
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (message->structure == NULL || !gst_structure_has_name (message->structure, "prepare-xwindow-id")) {
|
|
|
98d0844 |
+ if (!gst_is_video_overlay_prepare_window_handle_message (message)) {
|
|
|
98d0844 |
return;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- found_xoverlay = bp_video_find_xoverlay (player);
|
|
|
98d0844 |
+ found_video_overlay = bp_video_find_video_overlay (player);
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (found_xoverlay) {
|
|
|
98d0844 |
- gst_x_overlay_set_xwindow_id (player->xoverlay, player->video_window_xid);
|
|
|
98d0844 |
+ if (found_video_overlay) {
|
|
|
98d0844 |
+ gst_video_overlay_set_window_handle (player->video_overlay, player->video_window_xid);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
#endif
|
|
|
98d0844 |
@@ -164,7 +164,7 @@ static void
|
|
|
98d0844 |
cb_caps_set (GObject *obj, GParamSpec *pspec, BansheePlayer *p)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
GstStructure * s = NULL;
|
|
|
98d0844 |
- GstCaps * caps = gst_pad_get_negotiated_caps (GST_PAD (obj));
|
|
|
98d0844 |
+ GstCaps * caps = gst_pad_get_current_caps (GST_PAD (obj));
|
|
|
98d0844 |
|
|
|
98d0844 |
if (G_UNLIKELY (!caps)) {
|
|
|
98d0844 |
return;
|
|
|
98d0844 |
@@ -219,7 +219,7 @@ _bp_parse_stream_info (BansheePlayer *player)
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
if (G_LIKELY (vpad)) {
|
|
|
98d0844 |
- GstCaps *caps = gst_pad_get_negotiated_caps (vpad);
|
|
|
98d0844 |
+ GstCaps *caps = gst_pad_get_current_caps (vpad);
|
|
|
98d0844 |
if (G_LIKELY (caps)) {
|
|
|
98d0844 |
cb_caps_set (G_OBJECT (vpad), NULL, player);
|
|
|
98d0844 |
gst_caps_unref (caps);
|
|
|
98d0844 |
@@ -249,21 +249,18 @@ _bp_video_pipeline_setup (BansheePlayer *player, GstBus *bus)
|
|
|
98d0844 |
|
|
|
98d0844 |
player->video_display_context_type = BP_VIDEO_DISPLAY_CONTEXT_GDK_WINDOW;
|
|
|
98d0844 |
|
|
|
98d0844 |
- videosink = gst_element_factory_make ("gconfvideosink", "videosink");
|
|
|
98d0844 |
+ videosink = gst_element_factory_make ("autovideosink", "videosink");
|
|
|
98d0844 |
if (videosink == NULL) {
|
|
|
98d0844 |
- videosink = gst_element_factory_make ("autovideosink", "videosink");
|
|
|
98d0844 |
- if (videosink == NULL) {
|
|
|
98d0844 |
- player->video_display_context_type = BP_VIDEO_DISPLAY_CONTEXT_UNSUPPORTED;
|
|
|
98d0844 |
- videosink = gst_element_factory_make ("fakesink", "videosink");
|
|
|
98d0844 |
- if (videosink != NULL) {
|
|
|
98d0844 |
- g_object_set (G_OBJECT (videosink), "sync", TRUE, NULL);
|
|
|
98d0844 |
- }
|
|
|
98d0844 |
+ player->video_display_context_type = BP_VIDEO_DISPLAY_CONTEXT_UNSUPPORTED;
|
|
|
98d0844 |
+ videosink = gst_element_factory_make ("fakesink", "videosink");
|
|
|
98d0844 |
+ if (videosink != NULL) {
|
|
|
98d0844 |
+ g_object_set (G_OBJECT (videosink), "sync", TRUE, NULL);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
g_object_set (G_OBJECT (player->playbin), "video-sink", videosink, NULL);
|
|
|
98d0844 |
|
|
|
98d0844 |
- gst_bus_set_sync_handler (bus, gst_bus_sync_signal_handler, player);
|
|
|
98d0844 |
+ gst_bus_set_sync_handler (bus, gst_bus_sync_signal_handler, player, NULL);
|
|
|
98d0844 |
g_signal_connect (bus, "sync-message::element", G_CALLBACK (bp_video_bus_element_sync_message), player);
|
|
|
98d0844 |
|
|
|
98d0844 |
if (GST_IS_BIN (videosink)) {
|
|
|
98d0844 |
@@ -349,21 +346,21 @@ bp_video_window_expose (BansheePlayer *player, GdkWindow *window, gboolean direc
|
|
|
98d0844 |
{
|
|
|
98d0844 |
g_return_if_fail (IS_BANSHEE_PLAYER (player));
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (direct && player->xoverlay != NULL && GST_IS_X_OVERLAY (player->xoverlay)) {
|
|
|
98d0844 |
- gst_x_overlay_expose (player->xoverlay);
|
|
|
98d0844 |
+ if (direct && player->video_overlay != NULL && GST_IS_VIDEO_OVERLAY (player->video_overlay)) {
|
|
|
98d0844 |
+ gst_video_overlay_expose (player->video_overlay);
|
|
|
98d0844 |
return;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (player->xoverlay == NULL && !bp_video_find_xoverlay (player)) {
|
|
|
98d0844 |
+ if (player->video_overlay == NULL && !bp_video_find_video_overlay (player)) {
|
|
|
98d0844 |
return;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- gst_object_ref (player->xoverlay);
|
|
|
98d0844 |
+ gst_object_ref (player->video_overlay);
|
|
|
98d0844 |
|
|
|
98d0844 |
- gst_x_overlay_set_xwindow_id (player->xoverlay, player->video_window_xid);
|
|
|
98d0844 |
- gst_x_overlay_expose (player->xoverlay);
|
|
|
98d0844 |
+ gst_video_overlay_set_window_handle (player->video_overlay, player->video_window_xid);
|
|
|
98d0844 |
+ gst_video_overlay_expose (player->video_overlay);
|
|
|
98d0844 |
|
|
|
98d0844 |
- gst_object_unref (player->xoverlay);
|
|
|
98d0844 |
+ gst_object_unref (player->video_overlay);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
// MUST be called from the GTK main thread; calling it in OnRealized will do the right thing.
|
|
|
98d0844 |
@@ -379,7 +376,7 @@ bp_video_window_realize (BansheePlayer *player, GdkWindow *window)
|
|
|
98d0844 |
// //Explicitly create the native window. GDK_WINDOW_XWINDOW will call this
|
|
|
98d0844 |
// //function anyway, but this way we can raise a more useful message should it fail.
|
|
|
98d0844 |
// if (!gdk_window_ensure_native (window)) {
|
|
|
98d0844 |
-// banshee_log (BANSHEE_LOG_TYPE_ERROR, "player-video", "Couldn't create native window needed for GstXOverlay!");
|
|
|
98d0844 |
+// banshee_log (BANSHEE_LOG_TYPE_ERROR, "player-video", "Couldn't create native window needed for GstVideoOverlay!");
|
|
|
98d0844 |
// }
|
|
|
98d0844 |
//#endif
|
|
|
98d0844 |
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-player-vis.c b/libbanshee/banshee-player-vis.c
|
|
|
98d0844 |
index 5787c87..7e7dc78 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-player-vis.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-player-vis.c
|
|
|
98d0844 |
@@ -27,17 +27,17 @@
|
|
|
98d0844 |
//
|
|
|
98d0844 |
|
|
|
98d0844 |
#include <math.h>
|
|
|
98d0844 |
+#include <gst/audio/audio.h>
|
|
|
98d0844 |
|
|
|
98d0844 |
#include "banshee-player-vis.h"
|
|
|
98d0844 |
|
|
|
98d0844 |
#define SLICE_SIZE 735
|
|
|
98d0844 |
|
|
|
98d0844 |
static GstStaticCaps vis_data_sink_caps = GST_STATIC_CAPS (
|
|
|
98d0844 |
- "audio/x-raw-float, "
|
|
|
98d0844 |
+ "audio/x-raw, "
|
|
|
98d0844 |
+ "format = (string) " GST_AUDIO_NE(F32) ", "
|
|
|
98d0844 |
"rate = (int) 44100, "
|
|
|
98d0844 |
- "channels = (int) 2, "
|
|
|
98d0844 |
- "endianness = (int) BYTE_ORDER, "
|
|
|
98d0844 |
- "width = (int) 32"
|
|
|
98d0844 |
+ "channels = (int) 2"
|
|
|
98d0844 |
);
|
|
|
98d0844 |
|
|
|
98d0844 |
// ---------------------------------------------------------------------------
|
|
|
98d0844 |
@@ -48,6 +48,7 @@ static void
|
|
|
98d0844 |
bp_vis_pcm_handoff (GstElement *sink, GstBuffer *buffer, GstPad *pad, gpointer userdata)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
BansheePlayer *player = (BansheePlayer*)userdata;
|
|
|
98d0844 |
+ GstCaps *caps;
|
|
|
98d0844 |
GstStructure *structure;
|
|
|
98d0844 |
gint channels, wanted_size;
|
|
|
98d0844 |
gfloat *data;
|
|
|
98d0844 |
@@ -69,14 +70,16 @@ bp_vis_pcm_handoff (GstElement *sink, GstBuffer *buffer, GstPad *pad, gpointer u
|
|
|
98d0844 |
player->vis_thawing = FALSE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- structure = gst_caps_get_structure (gst_buffer_get_caps (buffer), 0);
|
|
|
98d0844 |
+ caps = gst_pad_get_current_caps (pad);
|
|
|
98d0844 |
+ structure = gst_caps_get_structure (caps, 0);
|
|
|
98d0844 |
gst_structure_get_int (structure, "channels", &channels);
|
|
|
98d0844 |
+ gst_caps_unref (caps);
|
|
|
98d0844 |
|
|
|
98d0844 |
wanted_size = channels * SLICE_SIZE * sizeof (gfloat);
|
|
|
98d0844 |
|
|
|
98d0844 |
- gst_adapter_push (player->vis_buffer, gst_buffer_copy (buffer));
|
|
|
98d0844 |
+ gst_adapter_push (player->vis_buffer, gst_buffer_ref (buffer));
|
|
|
98d0844 |
|
|
|
98d0844 |
- while ((data = (gfloat *)gst_adapter_peek (player->vis_buffer, wanted_size)) != NULL) {
|
|
|
98d0844 |
+ while ((data = (gfloat *)gst_adapter_map (player->vis_buffer, wanted_size)) != NULL) {
|
|
|
98d0844 |
gfloat *deinterlaced = g_malloc (wanted_size);
|
|
|
98d0844 |
gfloat *specbuf = g_new (gfloat, SLICE_SIZE * 2);
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -124,6 +127,7 @@ bp_vis_pcm_handoff (GstElement *sink, GstBuffer *buffer, GstPad *pad, gpointer u
|
|
|
98d0844 |
g_free (deinterlaced);
|
|
|
98d0844 |
g_free (specbuf);
|
|
|
98d0844 |
|
|
|
98d0844 |
+ gst_adapter_unmap (player->vis_buffer);
|
|
|
98d0844 |
gst_adapter_flush (player->vis_buffer, wanted_size);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
}
|
|
|
98d0844 |
@@ -132,65 +136,28 @@ bp_vis_pcm_handoff (GstElement *sink, GstBuffer *buffer, GstPad *pad, gpointer u
|
|
|
98d0844 |
// Internal Functions
|
|
|
98d0844 |
// ---------------------------------------------------------------------------
|
|
|
98d0844 |
|
|
|
98d0844 |
-static void
|
|
|
98d0844 |
-_bp_vis_pipeline_block_callback (GstPad *pad, gboolean blocked, gpointer data)
|
|
|
98d0844 |
+static GstPadProbeReturn
|
|
|
98d0844 |
+_bp_vis_pipeline_event_probe (GstPad *pad, GstPadProbeInfo *info, gpointer data)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
BansheePlayer *player = (BansheePlayer *) data;
|
|
|
98d0844 |
+ GstEvent *event;
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (!blocked) {
|
|
|
98d0844 |
- // Set thawing mode (discards buffers that are too old from the queue).
|
|
|
98d0844 |
- player->vis_thawing = TRUE;
|
|
|
98d0844 |
- }
|
|
|
98d0844 |
-}
|
|
|
98d0844 |
-
|
|
|
98d0844 |
-static void
|
|
|
98d0844 |
-_bp_vis_pipeline_set_blocked (BansheePlayer *player, gboolean blocked)
|
|
|
98d0844 |
-{
|
|
|
98d0844 |
- GstPad *queue_sink;
|
|
|
98d0844 |
-
|
|
|
98d0844 |
- if (player->vis_resampler == NULL)
|
|
|
98d0844 |
- return;
|
|
|
98d0844 |
-
|
|
|
98d0844 |
- queue_sink = gst_element_get_static_pad (player->vis_resampler, "src");
|
|
|
98d0844 |
-
|
|
|
98d0844 |
- gst_pad_set_blocked_async (queue_sink, blocked, _bp_vis_pipeline_block_callback, (gpointer) player);
|
|
|
98d0844 |
-
|
|
|
98d0844 |
- gst_object_unref (GST_OBJECT (queue_sink));
|
|
|
98d0844 |
-}
|
|
|
98d0844 |
-
|
|
|
98d0844 |
-static gboolean
|
|
|
98d0844 |
-_bp_vis_pipeline_event_probe (GstPad *pad, GstEvent *event, gpointer data)
|
|
|
98d0844 |
-{
|
|
|
98d0844 |
- BansheePlayer *player = (BansheePlayer *) data;
|
|
|
98d0844 |
+ if ((info->type & GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) == 0)
|
|
|
98d0844 |
+ return GST_PAD_PROBE_PASS;
|
|
|
98d0844 |
|
|
|
98d0844 |
+ event = GST_EVENT (info->data);
|
|
|
98d0844 |
switch (GST_EVENT_TYPE (event)) {
|
|
|
98d0844 |
case GST_EVENT_FLUSH_START:
|
|
|
98d0844 |
case GST_EVENT_FLUSH_STOP:
|
|
|
98d0844 |
case GST_EVENT_SEEK:
|
|
|
98d0844 |
- case GST_EVENT_NEWSEGMENT:
|
|
|
98d0844 |
+ case GST_EVENT_SEGMENT:
|
|
|
98d0844 |
case GST_EVENT_CUSTOM_DOWNSTREAM:
|
|
|
98d0844 |
player->vis_thawing = TRUE;
|
|
|
98d0844 |
|
|
|
98d0844 |
default: break;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (player->vis_enabled)
|
|
|
98d0844 |
- return TRUE;
|
|
|
98d0844 |
-
|
|
|
98d0844 |
- switch (GST_EVENT_TYPE (event)) {
|
|
|
98d0844 |
- case GST_EVENT_EOS:
|
|
|
98d0844 |
- case GST_EVENT_CUSTOM_DOWNSTREAM_OOB:
|
|
|
98d0844 |
- _bp_vis_pipeline_set_blocked (player, FALSE);
|
|
|
98d0844 |
- break;
|
|
|
98d0844 |
- case GST_EVENT_CUSTOM_DOWNSTREAM:
|
|
|
98d0844 |
- case GST_EVENT_NEWSEGMENT:
|
|
|
98d0844 |
- _bp_vis_pipeline_set_blocked (player, TRUE);
|
|
|
98d0844 |
- break;
|
|
|
98d0844 |
-
|
|
|
98d0844 |
- default: break;
|
|
|
98d0844 |
- }
|
|
|
98d0844 |
-
|
|
|
98d0844 |
- return TRUE;
|
|
|
98d0844 |
+ return GST_PAD_PROBE_PASS;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
void
|
|
|
98d0844 |
@@ -212,9 +179,8 @@ _bp_vis_pipeline_setup (BansheePlayer *player)
|
|
|
98d0844 |
// Core elements, if something fails here, it's the end of the world
|
|
|
98d0844 |
audiosinkqueue = gst_element_factory_make ("queue", "vis-queue");
|
|
|
98d0844 |
|
|
|
98d0844 |
- pad = gst_element_get_static_pad (audiosinkqueue, "sink");
|
|
|
98d0844 |
- gst_pad_add_event_probe (pad, G_CALLBACK (_bp_vis_pipeline_event_probe), player);
|
|
|
98d0844 |
- gst_object_unref (GST_OBJECT (pad));
|
|
|
98d0844 |
+ player->vis_event_probe_pad = gst_element_get_static_pad (audiosinkqueue, "sink");
|
|
|
98d0844 |
+ player->vis_event_probe_id = gst_pad_add_probe (player->vis_event_probe_pad, GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, _bp_vis_pipeline_event_probe, player, NULL);
|
|
|
98d0844 |
|
|
|
98d0844 |
resampler = gst_element_factory_make ("audioresample", "vis-resample");
|
|
|
98d0844 |
converter = gst_element_factory_make ("audioconvert", "vis-convert");
|
|
|
98d0844 |
@@ -255,7 +221,7 @@ _bp_vis_pipeline_setup (BansheePlayer *player)
|
|
|
98d0844 |
converter, fakesink, NULL);
|
|
|
98d0844 |
|
|
|
98d0844 |
pad = gst_element_get_static_pad (audiosinkqueue, "sink");
|
|
|
98d0844 |
- teepad = gst_element_get_request_pad (player->audiotee, "src%d");
|
|
|
98d0844 |
+ teepad = gst_element_get_request_pad (player->audiotee, "src_%u");
|
|
|
98d0844 |
gst_pad_link (teepad, pad);
|
|
|
98d0844 |
gst_object_unref (GST_OBJECT (teepad));
|
|
|
98d0844 |
gst_object_unref (GST_OBJECT (pad));
|
|
|
98d0844 |
@@ -270,14 +236,17 @@ _bp_vis_pipeline_setup (BansheePlayer *player)
|
|
|
98d0844 |
player->vis_resampler = resampler;
|
|
|
98d0844 |
player->vis_thawing = FALSE;
|
|
|
98d0844 |
player->vis_enabled = FALSE;
|
|
|
98d0844 |
-
|
|
|
98d0844 |
- // Disable the pipeline till we hear otherwise from managed land.
|
|
|
98d0844 |
- _bp_vis_pipeline_set_blocked (player, TRUE);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
void
|
|
|
98d0844 |
_bp_vis_pipeline_destroy (BansheePlayer *player)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
+ if (player->vis_event_probe_pad) {
|
|
|
98d0844 |
+ gst_pad_remove_probe (player->vis_event_probe_pad, player->vis_event_probe_id);
|
|
|
98d0844 |
+ gst_object_unref (GST_OBJECT (player->vis_event_probe_pad));
|
|
|
98d0844 |
+ player->vis_event_probe_pad = NULL;
|
|
|
98d0844 |
+ }
|
|
|
98d0844 |
+
|
|
|
98d0844 |
if (player->vis_buffer != NULL) {
|
|
|
98d0844 |
gst_object_unref (player->vis_buffer);
|
|
|
98d0844 |
player->vis_buffer = NULL;
|
|
|
98d0844 |
@@ -315,6 +284,5 @@ bp_set_vis_data_callback (BansheePlayer *player, BansheePlayerVisDataCallback cb
|
|
|
98d0844 |
|
|
|
98d0844 |
player->vis_data_cb = cb;
|
|
|
98d0844 |
|
|
|
98d0844 |
- _bp_vis_pipeline_set_blocked (player, cb == NULL);
|
|
|
98d0844 |
player->vis_enabled = cb != NULL;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-player.c b/libbanshee/banshee-player.c
|
|
|
98d0844 |
index c655a72..b8f98b8 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-player.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-player.c
|
|
|
98d0844 |
@@ -250,12 +250,11 @@ bp_set_position (BansheePlayer *player, guint64 time_ms)
|
|
|
98d0844 |
P_INVOKE guint64
|
|
|
98d0844 |
bp_get_position (BansheePlayer *player)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
- static GstFormat format = GST_FORMAT_TIME;
|
|
|
98d0844 |
gint64 position;
|
|
|
98d0844 |
|
|
|
98d0844 |
g_return_val_if_fail (IS_BANSHEE_PLAYER (player), 0);
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (player->playbin != NULL && gst_element_query_position (player->playbin, &format, &position)) {
|
|
|
98d0844 |
+ if (player->playbin != NULL && gst_element_query_position (player->playbin, GST_FORMAT_TIME, &position)) {
|
|
|
98d0844 |
return position / GST_MSECOND;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -265,12 +264,11 @@ bp_get_position (BansheePlayer *player)
|
|
|
98d0844 |
P_INVOKE guint64
|
|
|
98d0844 |
bp_get_duration (BansheePlayer *player)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
- static GstFormat format = GST_FORMAT_TIME;
|
|
|
98d0844 |
gint64 duration;
|
|
|
98d0844 |
|
|
|
98d0844 |
g_return_val_if_fail (IS_BANSHEE_PLAYER (player), 0);
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (player->playbin != NULL && gst_element_query_duration (player->playbin, &format, &duration)) {
|
|
|
98d0844 |
+ if (player->playbin != NULL && gst_element_query_duration (player->playbin, GST_FORMAT_TIME, &duration)) {
|
|
|
98d0844 |
return duration / GST_MSECOND;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -446,7 +444,6 @@ bp_set_subtitle_uri (BansheePlayer *player, const gchar *uri)
|
|
|
98d0844 |
g_return_if_fail (IS_BANSHEE_PLAYER (player));
|
|
|
98d0844 |
gint64 pos = -1;
|
|
|
98d0844 |
GstState state;
|
|
|
98d0844 |
- GstFormat format = GST_FORMAT_BYTES;
|
|
|
98d0844 |
gboolean paused = FALSE;
|
|
|
98d0844 |
|
|
|
98d0844 |
// Gstreamer playbin do not support to set suburi during playback
|
|
|
98d0844 |
@@ -454,7 +451,7 @@ bp_set_subtitle_uri (BansheePlayer *player, const gchar *uri)
|
|
|
98d0844 |
gst_element_get_state (player->playbin, &state, NULL, 0);
|
|
|
98d0844 |
paused = (state == GST_STATE_PAUSED);
|
|
|
98d0844 |
if (state >= GST_STATE_PAUSED) {
|
|
|
98d0844 |
- gst_element_query_position (player->playbin, &format, &pos;;
|
|
|
98d0844 |
+ gst_element_query_position (player->playbin, GST_FORMAT_BYTES, &pos;;
|
|
|
98d0844 |
gst_element_set_state (player->playbin, GST_STATE_READY);
|
|
|
98d0844 |
// Force to wait asynch operation
|
|
|
98d0844 |
gst_element_get_state (player->playbin, &state, NULL, -1);
|
|
|
98d0844 |
@@ -467,7 +464,7 @@ bp_set_subtitle_uri (BansheePlayer *player, const gchar *uri)
|
|
|
98d0844 |
gst_element_get_state (player->playbin, &state, NULL, -1);
|
|
|
98d0844 |
|
|
|
98d0844 |
if (pos != -1) {
|
|
|
98d0844 |
- gst_element_seek_simple (player->playbin, format, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, pos);
|
|
|
98d0844 |
+ gst_element_seek_simple (player->playbin, GST_FORMAT_BYTES, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, pos);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-ripper.c b/libbanshee/banshee-ripper.c
|
|
|
98d0844 |
index e0e8c85..b3f8fed 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-ripper.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-ripper.c
|
|
|
98d0844 |
@@ -85,7 +85,6 @@ br_raise_error (BansheeRipper *ripper, const gchar *error, const gchar *debug)
|
|
|
98d0844 |
static gboolean
|
|
|
98d0844 |
br_iterate_timeout (BansheeRipper *ripper)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
- GstFormat format = GST_FORMAT_TIME;
|
|
|
98d0844 |
GstState state;
|
|
|
98d0844 |
gint64 position;
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -96,7 +95,7 @@ br_iterate_timeout (BansheeRipper *ripper)
|
|
|
98d0844 |
return TRUE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- if (!gst_element_query_position (ripper->cddasrc, &format, &position)) {
|
|
|
98d0844 |
+ if (!gst_element_query_position (ripper->cddasrc, GST_FORMAT_TIME, &position)) {
|
|
|
98d0844 |
return TRUE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -142,8 +141,9 @@ br_encoder_probe_mime_type (GstBin *bin)
|
|
|
98d0844 |
GstIterator *pad_iter = gst_element_iterate_src_pads (element);
|
|
|
98d0844 |
|
|
|
98d0844 |
BANSHEE_GST_ITERATOR_ITERATE (pad_iter, GstPad *, pad, TRUE, {
|
|
|
98d0844 |
- GstStructure *str = GST_PAD_CAPS (pad) != NULL
|
|
|
98d0844 |
- ? gst_caps_get_structure (GST_PAD_CAPS (pad), 0)
|
|
|
98d0844 |
+ GstCaps *caps = gst_pad_get_current_caps (pad);
|
|
|
98d0844 |
+ GstStructure *str = caps != NULL
|
|
|
98d0844 |
+ ? gst_caps_get_structure (caps, 0)
|
|
|
98d0844 |
: NULL;
|
|
|
98d0844 |
|
|
|
98d0844 |
if (str != NULL) {
|
|
|
98d0844 |
@@ -171,11 +171,8 @@ br_encoder_probe_mime_type (GstBin *bin)
|
|
|
98d0844 |
preferred_mimetype = mimetype;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
}
|
|
|
98d0844 |
-
|
|
|
98d0844 |
- gst_object_unref (pad);
|
|
|
98d0844 |
+ gst_caps_unref (caps);
|
|
|
98d0844 |
});
|
|
|
98d0844 |
-
|
|
|
98d0844 |
- gst_object_unref (element);
|
|
|
98d0844 |
});
|
|
|
98d0844 |
|
|
|
98d0844 |
return preferred_mimetype;
|
|
|
98d0844 |
@@ -271,7 +268,7 @@ br_pipeline_construct (BansheeRipper *ripper)
|
|
|
98d0844 |
return FALSE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- ripper->cddasrc = gst_element_make_from_uri (GST_URI_SRC, "cdda://1", "cddasrc");
|
|
|
98d0844 |
+ ripper->cddasrc = gst_element_make_from_uri (GST_URI_SRC, "cdda://1", "cddasrc", NULL);
|
|
|
98d0844 |
if (ripper->cddasrc == NULL) {
|
|
|
98d0844 |
br_raise_error (ripper, _("Could not initialize element from cdda URI"), NULL);
|
|
|
98d0844 |
return FALSE;
|
|
|
98d0844 |
@@ -405,7 +402,6 @@ br_rip_track (BansheeRipper *ripper, gint track_number, gchar *output_path,
|
|
|
98d0844 |
|
|
|
98d0844 |
// We'll warn the user in the UI if we can't tag the encoded audio files
|
|
|
98d0844 |
*tagging_supported = TRUE;
|
|
|
98d0844 |
- gst_object_unref (element);
|
|
|
98d0844 |
}
|
|
|
98d0844 |
});
|
|
|
98d0844 |
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-tagger.c b/libbanshee/banshee-tagger.c
|
|
|
98d0844 |
index ca15e8f..762dfa9 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-tagger.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-tagger.c
|
|
|
98d0844 |
@@ -69,7 +69,7 @@ bt_tag_list_foreach (const GstTagList *list, const gchar *tag, gpointer userdata
|
|
|
98d0844 |
GstTagList *
|
|
|
98d0844 |
bt_tag_list_new ()
|
|
|
98d0844 |
{
|
|
|
98d0844 |
- return gst_tag_list_new ();
|
|
|
98d0844 |
+ return gst_tag_list_new_empty ();
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
void
|
|
|
98d0844 |
diff --git a/libbanshee/banshee-transcoder.c b/libbanshee/banshee-transcoder.c
|
|
|
98d0844 |
index 10fc35c..0e241f0 100644
|
|
|
98d0844 |
--- a/libbanshee/banshee-transcoder.c
|
|
|
98d0844 |
+++ b/libbanshee/banshee-transcoder.c
|
|
|
98d0844 |
@@ -64,14 +64,13 @@ gst_transcoder_raise_error(GstTranscoder *transcoder, const gchar *error, const
|
|
|
98d0844 |
static gboolean
|
|
|
98d0844 |
gst_transcoder_iterate_timeout(GstTranscoder *transcoder)
|
|
|
98d0844 |
{
|
|
|
98d0844 |
- GstFormat format = GST_FORMAT_TIME;
|
|
|
98d0844 |
gint64 position;
|
|
|
98d0844 |
gint64 duration;
|
|
|
98d0844 |
|
|
|
98d0844 |
g_return_val_if_fail(transcoder != NULL, FALSE);
|
|
|
98d0844 |
|
|
|
98d0844 |
- if(!gst_element_query_duration(transcoder->pipeline, &format, &duration) ||
|
|
|
98d0844 |
- !gst_element_query_position(transcoder->sink_bin, &format, &position)) {
|
|
|
98d0844 |
+ if(!gst_element_query_duration(transcoder->pipeline, GST_FORMAT_TIME, &duration) ||
|
|
|
98d0844 |
+ !gst_element_query_position(transcoder->sink_bin, GST_FORMAT_TIME, &position)) {
|
|
|
98d0844 |
return TRUE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
@@ -196,14 +195,14 @@ gst_transcoder_new_decoded_pad(GstElement *decodebin, GstPad *pad,
|
|
|
98d0844 |
|
|
|
98d0844 |
g_return_if_fail(transcoder != NULL);
|
|
|
98d0844 |
|
|
|
98d0844 |
- audiopad = gst_element_get_pad(transcoder->sink_bin, "sink");
|
|
|
98d0844 |
+ audiopad = gst_element_get_static_pad(transcoder->sink_bin, "sink");
|
|
|
98d0844 |
|
|
|
98d0844 |
if(GST_PAD_IS_LINKED(audiopad)) {
|
|
|
98d0844 |
g_object_unref(audiopad);
|
|
|
98d0844 |
return;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- caps = gst_pad_get_caps(pad);
|
|
|
98d0844 |
+ caps = gst_pad_query_caps(pad, NULL);
|
|
|
98d0844 |
str = gst_caps_get_structure(caps, 0);
|
|
|
98d0844 |
|
|
|
98d0844 |
if(!g_strrstr(gst_structure_get_name(str), "audio")) {
|
|
|
98d0844 |
@@ -235,19 +234,19 @@ gst_transcoder_create_pipeline(GstTranscoder *transcoder,
|
|
|
98d0844 |
|
|
|
98d0844 |
transcoder->pipeline = gst_pipeline_new("pipeline");
|
|
|
98d0844 |
|
|
|
98d0844 |
- source_elem = gst_element_make_from_uri(GST_URI_SRC, input_uri, "source");
|
|
|
98d0844 |
+ source_elem = gst_element_make_from_uri(GST_URI_SRC, input_uri, "source", NULL);
|
|
|
98d0844 |
if(source_elem == NULL) {
|
|
|
98d0844 |
gst_transcoder_raise_error(transcoder, _("Could not create source element"), NULL);
|
|
|
98d0844 |
return FALSE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- decoder_elem = gst_element_factory_make("decodebin2", "decodebin2");
|
|
|
98d0844 |
+ decoder_elem = gst_element_factory_make("decodebin", "decodebin");
|
|
|
98d0844 |
if(decoder_elem == NULL) {
|
|
|
98d0844 |
- gst_transcoder_raise_error(transcoder, _("Could not create decodebin2 plugin"), NULL);
|
|
|
98d0844 |
+ gst_transcoder_raise_error(transcoder, _("Could not create decodebin plugin"), NULL);
|
|
|
98d0844 |
return FALSE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- sink_elem = gst_element_make_from_uri(GST_URI_SINK, output_uri, "sink");
|
|
|
98d0844 |
+ sink_elem = gst_element_make_from_uri(GST_URI_SINK, output_uri, "sink", NULL);
|
|
|
98d0844 |
if(sink_elem == NULL) {
|
|
|
98d0844 |
gst_transcoder_raise_error(transcoder, _("Could not create sink element"), NULL);
|
|
|
98d0844 |
return FALSE;
|
|
|
98d0844 |
@@ -277,7 +276,7 @@ gst_transcoder_create_pipeline(GstTranscoder *transcoder,
|
|
|
98d0844 |
return FALSE;
|
|
|
98d0844 |
}
|
|
|
98d0844 |
|
|
|
98d0844 |
- encoder_pad = gst_element_get_pad(conv_elem, "sink");
|
|
|
98d0844 |
+ encoder_pad = gst_element_get_static_pad(conv_elem, "sink");
|
|
|
98d0844 |
if(encoder_pad == NULL) {
|
|
|
98d0844 |
gst_transcoder_raise_error(transcoder, _("Could not get sink pad from encoder"), NULL);
|
|
|
98d0844 |
return FALSE;
|