[longomatch] Filter out hardare accelerated decoder for transcoding



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]