summaryrefslogtreecommitdiff
path: root/gst/audiovisualizers/gstspacescope.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/audiovisualizers/gstspacescope.c')
-rw-r--r--gst/audiovisualizers/gstspacescope.c48
1 files changed, 26 insertions, 22 deletions
diff --git a/gst/audiovisualizers/gstspacescope.c b/gst/audiovisualizers/gstspacescope.c
index 7d44d338d..b9efaf08a 100644
--- a/gst/audiovisualizers/gstspacescope.c
+++ b/gst/audiovisualizers/gstspacescope.c
@@ -42,14 +42,20 @@ static GstStaticPadTemplate gst_space_scope_src_template =
GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_xRGB_HOST_ENDIAN)
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("xRGB"))
+#else
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("BGRx"))
+#endif
);
static GstStaticPadTemplate gst_space_scope_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_AUDIO_INT_STANDARD_PAD_TEMPLATE_CAPS)
+ GST_STATIC_CAPS ("audio/x-raw, "
+ "format = (string) " GST_AUDIO_NE (S16) ", "
+ "rate = (int) [ 8000, 96000 ], " "channels = (int) 2")
);
@@ -109,30 +115,24 @@ static gboolean gst_space_scope_render (GstBaseAudioVisualizer * scope,
GstBuffer * audio, GstBuffer * video);
-GST_BOILERPLATE (GstSpaceScope, gst_space_scope, GstBaseAudioVisualizer,
- GST_TYPE_BASE_AUDIO_VISUALIZER);
+G_DEFINE_TYPE (GstSpaceScope, gst_space_scope, GST_TYPE_BASE_AUDIO_VISUALIZER);
static void
-gst_space_scope_base_init (gpointer g_class)
+gst_space_scope_class_init (GstSpaceScopeClass * g_class)
{
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
+ GObjectClass *gobject_class = (GObjectClass *) g_class;
+ GstElementClass *element_class = (GstElementClass *) g_class;
+ GstBaseAudioVisualizerClass *scope_class =
+ (GstBaseAudioVisualizerClass *) g_class;
gst_element_class_set_details_simple (element_class, "Stereo visualizer",
"Visualization",
"Simple stereo visualizer", "Stefan Kost <ensonic@users.sf.net>");
- gst_element_class_add_static_pad_template (element_class,
- &gst_space_scope_src_template);
- gst_element_class_add_static_pad_template (element_class,
- &gst_space_scope_sink_template);
-}
-
-static void
-gst_space_scope_class_init (GstSpaceScopeClass * g_class)
-{
- GObjectClass *gobject_class = (GObjectClass *) g_class;
- GstBaseAudioVisualizerClass *scope_class =
- (GstBaseAudioVisualizerClass *) g_class;
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_space_scope_src_template));
+ gst_element_class_add_pad_template (element_class,
+ gst_static_pad_template_get (&gst_space_scope_sink_template));
gobject_class->set_property = gst_space_scope_set_property;
gobject_class->get_property = gst_space_scope_get_property;
@@ -147,7 +147,7 @@ gst_space_scope_class_init (GstSpaceScopeClass * g_class)
}
static void
-gst_space_scope_init (GstSpaceScope * scope, GstSpaceScopeClass * g_class)
+gst_space_scope_init (GstSpaceScope * scope)
{
/* do nothing */
}
@@ -427,12 +427,16 @@ gst_space_scope_render (GstBaseAudioVisualizer * base, GstBuffer * audio,
GstBuffer * video)
{
GstSpaceScope *scope = GST_SPACE_SCOPE (base);
- guint32 *vdata = (guint32 *) GST_BUFFER_DATA (video);
- gint16 *adata = (gint16 *) GST_BUFFER_DATA (audio);
+ gsize asize;
+ guint32 *vdata =
+ (guint32 *) gst_buffer_map (video, NULL, NULL, GST_MAP_WRITE);
+ gint16 *adata = (gint16 *) gst_buffer_map (audio, &asize, NULL, GST_MAP_READ);
guint num_samples;
- num_samples = GST_BUFFER_SIZE (audio) / (base->channels * sizeof (gint16));
+ num_samples = asize / (base->channels * sizeof (gint16));
scope->process (base, vdata, adata, num_samples);
+ gst_buffer_unmap (video, vdata, -1);
+ gst_buffer_unmap (audio, adata, -1);
return TRUE;
}