mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
ext/soundtouch/gstbpmdetect.cc: Clean up a bit and only allocate a temporary buffer for the data if processing stereo...
Original commit message from CVS: * ext/soundtouch/gstbpmdetect.cc: Clean up a bit and only allocate a temporary buffer for the data if processing stereo data as BPMDetect downmixes from stereo to mono and stores the result in the input data. Thanks to Stefan Kost for the suggestions.
This commit is contained in:
parent
b0c8b0f322
commit
e6e86c4f2d
2 changed files with 28 additions and 11 deletions
|
@ -1,3 +1,11 @@
|
|||
2008-01-28 Sebastian Dröge <slomo@circular-chaos.org>
|
||||
|
||||
* ext/soundtouch/gstbpmdetect.cc:
|
||||
Clean up a bit and only allocate a temporary buffer for the data
|
||||
if processing stereo data as BPMDetect downmixes from stereo to
|
||||
mono and stores the result in the input data. Thanks to
|
||||
Stefan Kost for the suggestions.
|
||||
|
||||
2008-01-27 Sebastian Dröge <slomo@circular-chaos.org>
|
||||
|
||||
* ext/soundtouch/gstpitch.cc:
|
||||
|
|
|
@ -189,23 +189,32 @@ gst_bpm_detect_transform_ip (GstBaseTransform * trans, GstBuffer * in)
|
|||
GstBPMDetect *bpm_detect = GST_BPM_DETECT (trans);
|
||||
GstAudioFilter *filter = GST_AUDIO_FILTER (trans);
|
||||
gint nsamples;
|
||||
gfloat *data;
|
||||
gfloat bpm;
|
||||
|
||||
if (filter->format.channels == 0 || filter->format.rate == 0) {
|
||||
GST_ERROR_OBJECT (bpm_detect, "No channels or rate set yet");
|
||||
return GST_FLOW_ERROR;
|
||||
if (G_UNLIKELY (!bpm_detect->priv->detect)) {
|
||||
if (filter->format.channels == 0 || filter->format.rate == 0) {
|
||||
GST_ERROR_OBJECT (bpm_detect, "No channels or rate set yet");
|
||||
return GST_FLOW_ERROR;
|
||||
}
|
||||
|
||||
bpm_detect->priv->detect =
|
||||
new BPMDetect (filter->format.channels, filter->format.rate);
|
||||
}
|
||||
|
||||
nsamples = GST_BUFFER_SIZE (in) / (4 * filter->format.channels);
|
||||
|
||||
if (!bpm_detect->priv->detect)
|
||||
bpm_detect->priv->detect =
|
||||
new BPMDetect (filter->format.channels, filter->format.rate);
|
||||
|
||||
data = (gfloat *) g_memdup (GST_BUFFER_DATA (in), GST_BUFFER_SIZE (in));
|
||||
bpm_detect->priv->detect->inputSamples (data, nsamples);
|
||||
g_free (data);
|
||||
/* For stereo BPMDetect->inputSamples() does downmixing into the input
|
||||
* data but our buffer data shouldn't be modified.
|
||||
*/
|
||||
if (filter->format.channels == 1) {
|
||||
bpm_detect->priv->detect->inputSamples ((gfloat *) GST_BUFFER_DATA (in),
|
||||
nsamples);
|
||||
} else {
|
||||
gfloat *data =
|
||||
(gfloat *) g_memdup (GST_BUFFER_DATA (in), GST_BUFFER_SIZE (in));
|
||||
bpm_detect->priv->detect->inputSamples (data, nsamples);
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
bpm = bpm_detect->priv->detect->getBpm ();
|
||||
if (bpm >= 1.0 && fabs (bpm_detect->bpm - bpm) >= 1.0) {
|
||||
|
|
Loading…
Reference in a new issue