diff options
Diffstat (limited to 'gst/audiovisualizers/gstspacescope.c')
-rw-r--r-- | gst/audiovisualizers/gstspacescope.c | 48 |
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; } |