[longomatch] Add an audio pad yo the source when the source has audio
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [longomatch] Add an audio pad yo the source when the source has audio
- Date: Tue, 2 Nov 2010 01:15:18 +0000 (UTC)
commit daf0e7a3a03d8ba8a426be64eeaed4df5a4080a6
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date: Fri Oct 29 22:51:05 2010 +0200
Add an audio pad yo the source when the source has audio
libcesarplayer/src/gst-camera-capturer.c | 48 ++++++++++++++++++++++++++----
1 files changed, 42 insertions(+), 6 deletions(-)
---
diff --git a/libcesarplayer/src/gst-camera-capturer.c b/libcesarplayer/src/gst-camera-capturer.c
index 9502cdb..86fb2fc 100644
--- a/libcesarplayer/src/gst-camera-capturer.c
+++ b/libcesarplayer/src/gst-camera-capturer.c
@@ -919,6 +919,39 @@ gst_camera_capture_videosrc_buffer_probe (GstPad * pad, GstBuffer * buf,
return TRUE;
}
+static gboolean
+add_audio_pad (GstBin * source_bin, GstPad * audio_src_pad)
+{
+ /* audio */
+ GstElement *audio_queue;
+ GstElement * audioconvert;
+ GstPad * queue_sink_pad;
+ GstPad * audioconvert_src_pad;
+ GstPad * ghost_pad;
+
+ audio_queue = gst_element_factory_make ("queue", "audio_queue");
+ audioconvert = gst_element_factory_make ("audioconvert", NULL);
+
+ gst_bin_add_many (source_bin, audio_queue, audioconvert, NULL);
+
+ gst_element_set_state (audio_queue, GST_STATE_PLAYING);
+ gst_element_set_state (audioconvert, GST_STATE_PLAYING);
+
+ queue_sink_pad = gst_element_get_static_pad (audio_queue, "sink");
+ gst_pad_link (audio_src_pad, queue_sink_pad);
+ gst_element_link (audio_queue, audioconvert);
+ gst_object_unref (GST_OBJECT (queue_sink_pad));
+
+ /* add ghostpad */
+ audioconvert_src_pad = gst_element_get_static_pad (audioconvert, "src");
+ ghost_pad = gst_ghost_pad_new ("audio", audioconvert_src_pad);
+ gst_pad_set_active(ghost_pad,TRUE);
+ gst_element_add_pad (GST_ELEMENT (source_bin), ghost_pad);
+ gst_object_unref (GST_OBJECT (audioconvert_src_pad));
+
+ return TRUE;
+}
+
static void
cb_new_pad (GstElement * element, GstPad * pad, gpointer data)
{
@@ -932,9 +965,8 @@ cb_new_pad (GstElement * element, GstPad * pad, gpointer data)
if (g_strrstr (mime, "video")) {
sink = gst_bin_get_by_name (bin, "source_video_sink");
gst_pad_link (pad, gst_element_get_pad (sink, "sink"));
- }
- if (g_strrstr (mime, "audio")) {
- /* Not implemented yet */
+ } else if (g_strrstr (mime, "audio")) {
+ add_audio_pad (bin, pad);
}
}
@@ -993,6 +1025,7 @@ gst_camera_capture_create_dshow_source_bin (GstCameraCapturer * gcc)
{
GstElement *bin;
GstElement *decoder;
+ GstElement *video_queue;
GstElement *deinterlacer;
GstElement *colorspace;
GstElement *videorate;
@@ -1004,8 +1037,10 @@ gst_camera_capture_create_dshow_source_bin (GstCameraCapturer * gcc)
gcc->priv->device_source =
gst_element_factory_make (DVVIDEOSRC, "source_device");
decoder = gst_element_factory_make ("decodebin2", NULL);
- colorspace = gst_element_factory_make ("ffmpegcolorspace",
+ video_queue = gst_element_factory_make ("queue",
"source_video_sink");
+ colorspace = gst_element_factory_make ("ffmpegcolorspace",
+ NULL);
deinterlacer = gst_element_factory_make ("ffdeinterlace", NULL);
videorate = gst_element_factory_make ("videorate", NULL);
videoscale = gst_element_factory_make ("videoscale", NULL);
@@ -1016,12 +1051,13 @@ gst_camera_capture_create_dshow_source_bin (GstCameraCapturer * gcc)
gcc->priv->device_id, NULL);
gst_bin_add_many (GST_BIN (bin), gcc->priv->device_source, decoder,
- colorspace, deinterlacer, videorate, videoscale, NULL);
+ video_queue, colorspace, deinterlacer, videorate, videoscale, NULL);
source_caps =
gst_caps_from_string ("video/x-dv, systemstream=true;"
"video/x-raw-rgb; video/x-raw-yuv");
gst_element_link_filtered (gcc->priv->device_source, decoder, source_caps);
- gst_element_link_many (colorspace, deinterlacer, videorate, videoscale, NULL);
+ gst_element_link_many (video_queue, colorspace, deinterlacer,
+ videorate, videoscale, NULL);
g_signal_connect (decoder, "pad-added", G_CALLBACK (cb_new_pad), bin);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]