[longomatch] Filter out hardare accelerated decoder for transcoding
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [longomatch] Filter out hardare accelerated decoder for transcoding
- Date: Wed, 24 Sep 2014 20:27:21 +0000 (UTC)
commit d6370a4d251ccee30398ad8e77381da51f8ca340
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date: Tue Sep 9 02:46:16 2014 +0200
Filter out hardare accelerated decoder for transcoding
libcesarplayer/gst-camera-capturer.c | 2 ++
libcesarplayer/gst-nle-source.c | 2 ++
libcesarplayer/gst-video-encoder.c | 2 ++
libcesarplayer/video-utils.c | 11 +++++++++++
libcesarplayer/video-utils.h | 9 +++++++++
5 files changed, 26 insertions(+), 0 deletions(-)
---
diff --git a/libcesarplayer/gst-camera-capturer.c b/libcesarplayer/gst-camera-capturer.c
index 99e8653..4a48785 100644
--- a/libcesarplayer/gst-camera-capturer.c
+++ b/libcesarplayer/gst-camera-capturer.c
@@ -462,6 +462,8 @@ gst_camera_capturer_prepare_uri_source (GstCameraCapturer *gcc)
bin = gcc->priv->source_decoder_bin;
decodebin = gst_element_factory_make ("uridecodebin", NULL);
g_object_set (decodebin, "uri", gcc->priv->device_id, NULL);
+ g_signal_connect (decodebin, "autoplug-select",
+ G_CALLBACK (lgm_filter_video_decoders), gcc);
identity = gst_element_factory_make ("identity", "video-pad");
gst_bin_add_many (GST_BIN (bin), decodebin, identity, NULL);
diff --git a/libcesarplayer/gst-nle-source.c b/libcesarplayer/gst-nle-source.c
index 86b922e..01025b0 100644
--- a/libcesarplayer/gst-nle-source.c
+++ b/libcesarplayer/gst-nle-source.c
@@ -605,6 +605,8 @@ gst_nle_source_next (GstNleSource * nlesrc)
uridecodebin = gst_element_factory_make ("uridecodebin", NULL);
gst_bin_add (GST_BIN (nlesrc->decoder), uridecodebin);
+ g_signal_connect (uridecodebin, "autoplug-select",
+ G_CALLBACK (lgm_filter_video_decoders), nlesrc);
g_signal_connect (uridecodebin, "pad-added",
G_CALLBACK (gst_nle_source_pad_added_cb), nlesrc);
g_signal_connect (uridecodebin, "no-more-pads",
diff --git a/libcesarplayer/gst-video-encoder.c b/libcesarplayer/gst-video-encoder.c
index 0d37d77..95932aa 100644
--- a/libcesarplayer/gst-video-encoder.c
+++ b/libcesarplayer/gst-video-encoder.c
@@ -395,6 +395,8 @@ gst_video_encoder_create_source (GstVideoEncoder *gve, gchar *location)
gve->priv->source_bin = gst_element_factory_make ("uridecodebin", NULL);
g_object_set (gve->priv->source_bin, "uri", location, NULL);
g_signal_connect (gve->priv->source_bin, "pad-added", G_CALLBACK (cb_new_pad), gve);
+ g_signal_connect (gve->priv->source_bin, "autoplug-select",
+ G_CALLBACK (lgm_filter_video_decoders), gve);
gst_bin_add (GST_BIN(gve->priv->main_pipeline), gve->priv->source_bin);
gst_element_sync_state_with_parent (gve->priv->source_bin);
gve->priv->audio_drained = FALSE;
diff --git a/libcesarplayer/video-utils.c b/libcesarplayer/video-utils.c
index 5e6c42f..51d231d 100644
--- a/libcesarplayer/video-utils.c
+++ b/libcesarplayer/video-utils.c
@@ -40,6 +40,17 @@
#include <gdk/gdkquartz.h>
#endif
+GstAutoplugSelectResult
+lgm_filter_video_decoders (GstElement* object, GstPad* arg0,
+ GstCaps* arg1, GstElementFactory* arg2, gpointer user_data)
+{
+ const gchar *name = gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (arg2));
+ if (!g_strcmp0(name, "fluvadec")) {
+ return GST_AUTOPLUG_SELECT_SKIP;
+ }
+ return GST_AUTOPLUG_SELECT_TRY;
+}
+
guintptr
lgm_get_window_handle(GdkWindow *window)
{
diff --git a/libcesarplayer/video-utils.h b/libcesarplayer/video-utils.h
index 4469559..c44a941 100644
--- a/libcesarplayer/video-utils.h
+++ b/libcesarplayer/video-utils.h
@@ -41,6 +41,13 @@
#define EXPORT
#endif
+typedef enum {
+ GST_AUTOPLUG_SELECT_TRY,
+ GST_AUTOPLUG_SELECT_EXPOSE,
+ GST_AUTOPLUG_SELECT_SKIP
+} GstAutoplugSelectResult;
+
+
EXPORT void lgm_init_backend (int argc, char **argv);
EXPORT guintptr lgm_get_window_handle (GdkWindow *window);
EXPORT void lgm_set_window_handle (GstXOverlay *overlay, guintptr window_handle);
@@ -57,3 +64,5 @@ EXPORT GstElement * lgm_create_audio_encoder (AudioEncoderType type, guint quali
GQuark quark, GError **err);
EXPORT GstElement * lgm_create_muxer (VideoMuxerType type,
GQuark quark, GError **err);
+EXPORT GstAutoplugSelectResult lgm_filter_video_decoders (GstElement* object,
+ GstPad* arg0, GstCaps* arg1, GstElementFactory* arg2, gpointer user_data);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]