[longomatch/camera_capturer] more



commit d5b9c67c52dbe325f34b6a533da06366dc5410c2
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Tue Oct 2 22:23:52 2012 +0200

    more

 libcesarplayer/gst-camera-capturer.c |   27 ++++++++++++++++++++-------
 1 files changed, 20 insertions(+), 7 deletions(-)
---
diff --git a/libcesarplayer/gst-camera-capturer.c b/libcesarplayer/gst-camera-capturer.c
index a0a1d18..823781e 100644
--- a/libcesarplayer/gst-camera-capturer.c
+++ b/libcesarplayer/gst-camera-capturer.c
@@ -105,16 +105,18 @@ struct GstCameraCapturerPrivate
 
   /*GStreamer elements */
   GstElement *main_pipeline;
-  GstElement *source;
+  GstElement *source_bin;
   GstElement *source_decoder_bin;
   GstElement *decoder_bin;
   GstElement *preview_bin;
   GstElement *encoder_bin;
+  GstElement *source;
   GstElement *video_filter;
   GstElement *video_enc;
   GstElement *audio_enc;
   GstElement *muxer;
   GstElement *filesink;
+  const gchar *source_element_name;
 
   /* Recording */
   gboolean is_recording;
@@ -711,8 +713,17 @@ static void
 gst_camera_capturer_set_device_id (GstCameraCapturer * gcc,
     const gchar * device_id)
 {
+  gchar *prop_name;
+
   gcc->priv->device_id = g_strdup (device_id);
-  GST_INFO_OBJECT (gcc, "Changed device id/name to: %s", device_id);
+  if (!g_strcmp0 (gcc->priv->source_element_name, "dv1394src"))
+    prop_name = "guid";
+  else if (!g_strcmp0 (gcc->priv->source_element_name, "v4l2src"))
+    prop_name = "device";
+  else
+    prop_name = "device-name";
+  g_object_set(gcc->priv->source, prop_name, gcc->priv->device_id, NULL);
+  GST_INFO_OBJECT (gcc, "Changed device id/name to: %s", gcc->priv->device_id);
 }
 
 static void
@@ -1413,7 +1424,7 @@ gst_camera_capturer_link_preview (GstCameraCapturer *gcc)
 
   gst_bin_add(GST_BIN(gcc->priv->main_pipeline), gcc->priv->decoder_bin);
 
-  gst_element_link(gcc->priv->source, gcc->priv->decoder_bin);
+  gst_element_link(gcc->priv->source_bin, gcc->priv->decoder_bin);
 
   v_dec_prev_pad = gst_element_get_static_pad(gcc->priv->decoder_bin, "video_preview");
   v_prev_pad = gst_element_get_static_pad(gcc->priv->preview_bin, "video");
@@ -1550,10 +1561,12 @@ gst_camera_capturer_create_video_source (GstCameraCapturer * gcc,
     case GST_CAMERA_CAPTURE_SOURCE_TYPE_DV:
       GST_INFO_OBJECT(gcc, "Creating dv video source");
       source_desc = DVVIDEOSRC;
+      gcc->priv->source_element_name = source_desc;
       break;
     case GST_CAMERA_CAPTURE_SOURCE_TYPE_SYSTEM:
       GST_INFO_OBJECT(gcc, "Creating system video source");
       source_desc = SYSVIDEOSRC;
+      gcc->priv->source_element_name = source_desc;
       //source_desc = "filesrc location=/home/andoni/test.ts";
       break;
     default:
@@ -1561,9 +1574,9 @@ gst_camera_capturer_create_video_source (GstCameraCapturer * gcc,
   }
 
   source_str = g_strdup_printf("%s name=source ! typefind name=typefind", source_desc);
-  gcc->priv->source = gst_parse_bin_from_description(source_str, TRUE, NULL);
+  gcc->priv->source_bin = gst_parse_bin_from_description(source_str, TRUE, NULL);
   g_free(source_str);
-  if (!gcc->priv->source) {
+  if (!gcc->priv->source_bin) {
     g_set_error (err,
         GCC_ERROR,
         GST_ERROR_PLUGIN_LOAD,
@@ -1573,7 +1586,7 @@ gst_camera_capturer_create_video_source (GstCameraCapturer * gcc,
   }
   gcc->priv->source_type = type;
 
-  typefind = gst_bin_get_by_name (GST_BIN(gcc->priv->source), "typefind");
+  typefind = gst_bin_get_by_name (GST_BIN(gcc->priv->source_bin), "typefind");
   g_signal_connect (typefind, "have-type",
       G_CALLBACK (gst_camera_capturer_have_type_cb), gcc);
 
@@ -2279,7 +2292,7 @@ gst_camera_capturer_new (gchar * filename, GstCameraCaptureSourceType source,
     goto missing_plugin;
 
   /* add the source element */
-  gst_bin_add(GST_BIN(gcc->priv->main_pipeline), gcc->priv->source);
+  gst_bin_add(GST_BIN(gcc->priv->main_pipeline), gcc->priv->source_bin);
 
   /* assume we're always called from the main Gtk+ GUI thread */
   gui_thread = g_thread_self ();



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]