audiovisualizer: fix timestamp calculation for audio channels > 1

We have to use bps*channels instead of just bps, which is exactly what bpf is for.

https://bugzilla.gnome.org/show_bug.cgi?id=767507
This commit is contained in:
Thomas Jones 2016-06-10 22:50:41 -04:00 committed by Sebastian Dröge
parent 8b8708f946
commit 721e415fd2

View file

@ -1036,7 +1036,7 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent,
guint64 dist, ts; guint64 dist, ts;
guint avail, sbpf; guint avail, sbpf;
gpointer adata; gpointer adata;
gint bps, channels, rate; gint bpf, channels, rate;
scope = GST_AUDIO_VISUALIZER (parent); scope = GST_AUDIO_VISUALIZER (parent);
klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope)); klass = GST_AUDIO_VISUALIZER_CLASS (G_OBJECT_GET_CLASS (scope));
@ -1058,9 +1058,9 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent,
channels = GST_AUDIO_INFO_CHANNELS (&scope->ainfo); channels = GST_AUDIO_INFO_CHANNELS (&scope->ainfo);
rate = GST_AUDIO_INFO_RATE (&scope->ainfo); rate = GST_AUDIO_INFO_RATE (&scope->ainfo);
bps = GST_AUDIO_INFO_BPS (&scope->ainfo); bpf = GST_AUDIO_INFO_BPF (&scope->ainfo);
if (bps == 0) { if (bpf == 0) {
ret = GST_FLOW_NOT_NEGOTIATED; ret = GST_FLOW_NOT_NEGOTIATED;
goto beach; goto beach;
} }
@ -1087,8 +1087,7 @@ gst_audio_visualizer_chain (GstPad * pad, GstObject * parent,
ts = gst_adapter_prev_pts (scope->priv->adapter, &dist); ts = gst_adapter_prev_pts (scope->priv->adapter, &dist);
if (GST_CLOCK_TIME_IS_VALID (ts)) { if (GST_CLOCK_TIME_IS_VALID (ts)) {
/* convert bytes to time */ /* convert bytes to time */
dist /= bps; ts += gst_util_uint64_scale_int (dist, GST_SECOND, rate * bpf);
ts += gst_util_uint64_scale_int (dist, GST_SECOND, rate);
} }
/* check for QoS, don't compute buffers that are known to be late */ /* check for QoS, don't compute buffers that are known to be late */