[longomatch/camera_capturer] more
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [longomatch/camera_capturer] more
- Date: Tue, 2 Oct 2012 20:24:18 +0000 (UTC)
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]