summaryrefslogtreecommitdiff
path: root/gst/audiovisualizers
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2012-02-07 12:02:05 +0100
committerWim Taymans <wim.taymans@collabora.co.uk>2012-02-07 12:02:49 +0100
commit667c84b59cc4cb736e095abb970d479fe28cfcff (patch)
tree88320aeda931b1f729d09c37c9e7ad9fbeef0eb5 /gst/audiovisualizers
parentbc0dd274ee9a79a9ded0e1bdfa54e77ce32ac8dd (diff)
audiovis: port to 0.11 some more
Diffstat (limited to 'gst/audiovisualizers')
-rw-r--r--gst/audiovisualizers/gstbaseaudiovisualizer.c73
-rw-r--r--gst/audiovisualizers/gstbaseaudiovisualizer.h11
-rw-r--r--gst/audiovisualizers/gstspacescope.c3
-rw-r--r--gst/audiovisualizers/gstspectrascope.c7
-rw-r--r--gst/audiovisualizers/gstsynaescope.c2
-rw-r--r--gst/audiovisualizers/gstwavescope.c13
6 files changed, 45 insertions, 64 deletions
diff --git a/gst/audiovisualizers/gstbaseaudiovisualizer.c b/gst/audiovisualizers/gstbaseaudiovisualizer.c
index fdd839cc3..da0482ade 100644
--- a/gst/audiovisualizers/gstbaseaudiovisualizer.c
+++ b/gst/audiovisualizers/gstbaseaudiovisualizer.c
@@ -498,8 +498,7 @@ gst_base_audio_visualizer_init (GstBaseAudioVisualizer * scope,
scope->frame_duration = GST_CLOCK_TIME_NONE;
/* reset the initial audio state */
- scope->rate = GST_AUDIO_DEF_RATE;
- scope->channels = 2;
+ gst_audio_info_init (&scope->ainfo);
g_mutex_init (&scope->config_lock);
}
@@ -583,49 +582,24 @@ static gboolean
gst_base_audio_visualizer_sink_setcaps (GstBaseAudioVisualizer * scope,
GstCaps * caps)
{
- GstStructure *structure;
- gint channels;
- gint rate;
+ GstAudioInfo info;
gboolean res = TRUE;
- structure = gst_caps_get_structure (caps, 0);
-
- if (!gst_structure_get_int (structure, "channels", &channels) ||
- !gst_structure_get_int (structure, "rate", &rate))
- goto missing_caps_details;
-
- if (channels != 2)
- goto wrong_channels;
-
- if (rate <= 0)
- goto wrong_rate;
+ if (!gst_audio_info_from_caps (&info, caps))
+ goto wrong_caps;
- scope->channels = channels;
- scope->rate = rate;
+ scope->ainfo = info;
GST_DEBUG_OBJECT (scope, "audio: channels %d, rate %d",
- scope->channels, scope->rate);
+ GST_AUDIO_INFO_CHANNELS (&info), GST_AUDIO_INFO_RATE (&info));
done:
return res;
/* Errors */
-missing_caps_details:
- {
- GST_WARNING_OBJECT (scope, "missing channels or rate in the caps");
- res = FALSE;
- goto done;
- }
-wrong_channels:
- {
- GST_WARNING_OBJECT (scope, "number of channels must be 2, but is %d",
- channels);
- res = FALSE;
- goto done;
- }
-wrong_rate:
+wrong_caps:
{
- GST_WARNING_OBJECT (scope, "sample rate must be >0, but is %d", rate);
+ GST_WARNING_OBJECT (scope, "could not parse caps");
res = FALSE;
goto done;
}
@@ -652,7 +626,7 @@ gst_base_audio_visualizer_src_setcaps (GstBaseAudioVisualizer * scope,
scope->frame_duration = gst_util_uint64_scale_int (GST_SECOND,
scope->fps_d, scope->fps_n);
- scope->spf = gst_util_uint64_scale_int (scope->rate,
+ scope->spf = gst_util_uint64_scale_int (GST_AUDIO_INFO_RATE (&scope->ainfo),
scope->fps_d, scope->fps_n);
scope->req_spf = scope->spf;
@@ -795,6 +769,7 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstObject * parent,
gpointer adata;
gboolean (*render) (GstBaseAudioVisualizer * scope, GstBuffer * audio,
GstBuffer * video);
+ gint bps, channels, rate;
scope = GST_BASE_AUDIO_VISUALIZER (parent);
klass = GST_BASE_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
@@ -808,23 +783,27 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstObject * parent,
gst_adapter_clear (scope->adapter);
}
- if (scope->bps == 0) {
- ret = GST_FLOW_NOT_NEGOTIATED;
- goto beach;
- }
/* Make sure have an output format */
ret = gst_base_audio_visualizer_ensure_negotiated (scope);
if (ret != GST_FLOW_OK) {
gst_buffer_unref (buffer);
goto beach;
}
+ channels = GST_AUDIO_INFO_CHANNELS (&scope->ainfo);
+ rate = GST_AUDIO_INFO_RATE (&scope->ainfo);
+ bps = GST_AUDIO_INFO_BPS (&scope->ainfo);
+
+ if (bps == 0) {
+ ret = GST_FLOW_NOT_NEGOTIATED;
+ goto beach;
+ }
gst_adapter_push (scope->adapter, buffer);
g_mutex_lock (&scope->config_lock);
/* this is what we want */
- sbpf = scope->req_spf * scope->channels * sizeof (gint16);
+ sbpf = scope->req_spf * channels * sizeof (gint16);
inbuf = scope->inbuf;
/* FIXME: the timestamp in the adapter would be different */
@@ -841,8 +820,8 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstObject * parent,
ts = gst_adapter_prev_timestamp (scope->adapter, &dist);
if (GST_CLOCK_TIME_IS_VALID (ts)) {
/* convert bytes to time */
- dist /= scope->bps;
- ts += gst_util_uint64_scale_int (dist, GST_SECOND, scope->rate);
+ dist /= bps;
+ ts += gst_util_uint64_scale_int (dist, GST_SECOND, rate);
}
if (GST_CLOCK_TIME_IS_VALID (ts)) {
@@ -870,7 +849,7 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstObject * parent,
ret = gst_buffer_pool_acquire_buffer (scope->pool, &outbuf, NULL);
g_mutex_lock (&scope->config_lock);
/* recheck as the value could have changed */
- sbpf = scope->req_spf * scope->channels * sizeof (gint16);
+ sbpf = scope->req_spf * channels * sizeof (gint16);
/* no buffer allocated, we don't care why. */
if (ret != GST_FLOW_OK)
@@ -919,7 +898,7 @@ gst_base_audio_visualizer_chain (GstPad * pad, GstObject * parent,
skip:
/* recheck as the value could have changed */
- sbpf = scope->req_spf * scope->channels * sizeof (gint16);
+ sbpf = scope->req_spf * channels * sizeof (gint16);
GST_LOG_OBJECT (scope, "avail: %u, bpf: %u", avail, sbpf);
/* we want to take less or more, depending on spf : req_spf */
if (avail - sbpf >= sbpf) {
@@ -1044,8 +1023,9 @@ gst_base_audio_visualizer_src_query (GstPad * pad, GstObject * parent,
gboolean us_live;
GstClockTime our_latency;
guint max_samples;
+ gint rate = GST_AUDIO_INFO_RATE (&scope->ainfo);
- if (scope->rate == 0)
+ if (rate == 0)
break;
if ((res = gst_pad_peer_query (scope->sinkpad, query))) {
@@ -1057,8 +1037,7 @@ gst_base_audio_visualizer_src_query (GstPad * pad, GstObject * parent,
/* the max samples we must buffer buffer */
max_samples = MAX (scope->req_spf, scope->spf);
- our_latency =
- gst_util_uint64_scale_int (max_samples, GST_SECOND, scope->rate);
+ our_latency = gst_util_uint64_scale_int (max_samples, GST_SECOND, rate);
GST_DEBUG_OBJECT (scope, "Our latency: %" GST_TIME_FORMAT,
GST_TIME_ARGS (our_latency));
diff --git a/gst/audiovisualizers/gstbaseaudiovisualizer.h b/gst/audiovisualizers/gstbaseaudiovisualizer.h
index 26da1f33d..435c7660a 100644
--- a/gst/audiovisualizers/gstbaseaudiovisualizer.h
+++ b/gst/audiovisualizers/gstbaseaudiovisualizer.h
@@ -83,9 +83,6 @@ struct _GstBaseAudioVisualizer
GstBaseAudioVisualizerShaderFunc shader;
guint32 shade_amount;
- guint64 frame_duration;
- guint bpf; /* bytes per frame */
- guint bps; /* bytes per sample */
guint spf; /* samples per video frame */
guint req_spf; /* min samples per frame wanted by the subclass */
@@ -94,12 +91,12 @@ struct _GstBaseAudioVisualizer
gint fps_n, fps_d;
gint width;
gint height;
+ guint64 frame_duration;
+ guint bpf; /* bytes per frame */
/* audio state */
- gint sample_rate;
- gint channels;
- gint rate;
-
+ GstAudioInfo ainfo;
+
/* configuration mutex */
GMutex config_lock;
diff --git a/gst/audiovisualizers/gstspacescope.c b/gst/audiovisualizers/gstspacescope.c
index 5e19794e8..a718b8d47 100644
--- a/gst/audiovisualizers/gstspacescope.c
+++ b/gst/audiovisualizers/gstspacescope.c
@@ -435,7 +435,8 @@ gst_space_scope_render (GstBaseAudioVisualizer * base, GstBuffer * audio,
gst_buffer_map (audio, &amap, GST_MAP_READ);
gst_buffer_map (video, &vmap, GST_MAP_WRITE);
- num_samples = amap.size / (base->channels * sizeof (gint16));
+ num_samples =
+ amap.size / (GST_AUDIO_INFO_CHANNELS (&base->ainfo) * sizeof (gint16));
scope->process (base, (guint32 *) vmap.data, (gint16 *) amap.data,
num_samples);
gst_buffer_unmap (video, &vmap);
diff --git a/gst/audiovisualizers/gstspectrascope.c b/gst/audiovisualizers/gstspectrascope.c
index 95ce6e71f..6b4fe0ee0 100644
--- a/gst/audiovisualizers/gstspectrascope.c
+++ b/gst/audiovisualizers/gstspectrascope.c
@@ -175,15 +175,18 @@ gst_spectra_scope_render (GstBaseAudioVisualizer * bscope, GstBuffer * audio,
guint w = bscope->width;
GstMapInfo amap, vmap;
guint32 *vdata;
+ gint channels;
gst_buffer_map (audio, &amap, GST_MAP_READ);
gst_buffer_map (video, &vmap, GST_MAP_WRITE);
vdata = (guint32 *) vmap.data;
+ channels = GST_AUDIO_INFO_CHANNELS (&bscope->ainfo);
+
mono_adata = (gint16 *) g_memdup (amap.data, amap.size);
- if (bscope->channels > 1) {
- guint ch = bscope->channels;
+ if (channels > 1) {
+ guint ch = channels;
guint num_samples = amap.size / (ch * sizeof (gint16));
guint i, c, v, s = 0;
diff --git a/gst/audiovisualizers/gstsynaescope.c b/gst/audiovisualizers/gstsynaescope.c
index bba42962a..f81131bf3 100644
--- a/gst/audiovisualizers/gstsynaescope.c
+++ b/gst/audiovisualizers/gstsynaescope.c
@@ -219,7 +219,7 @@ gst_synae_scope_render (GstBaseAudioVisualizer * bscope, GstBuffer * audio,
guint32 *colors = scope->colors, c;
guint *shade = scope->shade;
//guint w2 = w /2;
- guint ch = bscope->channels;
+ guint ch = GST_AUDIO_INFO_CHANNELS (&bscope->ainfo);
guint num_samples;
gint i, j, b;
gint br, br1, br2;
diff --git a/gst/audiovisualizers/gstwavescope.c b/gst/audiovisualizers/gstwavescope.c
index df2a3451b..20bfa1a9c 100644
--- a/gst/audiovisualizers/gstwavescope.c
+++ b/gst/audiovisualizers/gstwavescope.c
@@ -181,7 +181,7 @@ gst_wave_scope_setup (GstBaseAudioVisualizer * bscope)
if (scope->flt)
g_free (scope->flt);
- scope->flt = g_new0 (gdouble, 6 * bscope->channels);
+ scope->flt = g_new0 (gdouble, 6 * GST_AUDIO_INFO_CHANNELS (&bscope->ainfo));
return TRUE;
}
@@ -238,7 +238,7 @@ static void
render_dots (GstBaseAudioVisualizer * base, guint32 * vdata, gint16 * adata,
guint num_samples)
{
- gint channels = base->channels;
+ gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo);
guint i, c, s, x, y, oy;
gfloat dx, dy;
guint w = base->width;
@@ -263,7 +263,7 @@ static void
render_lines (GstBaseAudioVisualizer * base, guint32 * vdata, gint16 * adata,
guint num_samples)
{
- gint channels = base->channels;
+ gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo);
guint i, c, s, x, y, oy;
gfloat dx, dy;
guint w = base->width;
@@ -308,7 +308,7 @@ render_color_dots (GstBaseAudioVisualizer * base, guint32 * vdata,
gint16 * adata, guint num_samples)
{
GstWaveScope *scope = (GstWaveScope *) base;
- gint channels = base->channels;
+ gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo);
guint i, c, s, x, y, oy;
gfloat dx, dy;
guint w = base->width;
@@ -348,7 +348,7 @@ render_color_lines (GstBaseAudioVisualizer * base, guint32 * vdata,
gint16 * adata, guint num_samples)
{
GstWaveScope *scope = (GstWaveScope *) base;
- gint channels = base->channels;
+ gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo);
guint i, c, s, x, y, oy;
gfloat dx, dy;
guint w = base->width;
@@ -409,11 +409,12 @@ gst_wave_scope_render (GstBaseAudioVisualizer * base, GstBuffer * audio,
GstWaveScope *scope = GST_WAVE_SCOPE (base);
GstMapInfo amap, vmap;
guint num_samples;
+ gint channels = GST_AUDIO_INFO_CHANNELS (&base->ainfo);
gst_buffer_map (audio, &amap, GST_MAP_READ);
gst_buffer_map (video, &vmap, GST_MAP_WRITE);
- num_samples = amap.size / (base->channels * sizeof (gint16));
+ num_samples = amap.size / (channels * sizeof (gint16));
scope->process (base, (guint32 *) vmap.data, (gint16 *) amap.data,
num_samples);