audioresample: Add locking to protect the resampling context

When setting the quality/filter-length while PLAYING the
resampling context will be destroyed and created again in
some cases, which will cause crashes in the transform function
if it's called at that time.
This commit is contained in:
Sebastian Dröge 2009-02-15 07:30:17 +01:00
parent c080bfae6d
commit 6c28744f76

View file

@ -1174,16 +1174,19 @@ gst_audio_resample_set_property (GObject * object, guint prop_id,
switch (prop_id) {
case PROP_QUALITY:
GST_BASE_TRANSFORM_LOCK (resample);
resample->quality = g_value_get_int (value);
GST_DEBUG_OBJECT (resample, "new quality %d", resample->quality);
gst_audio_resample_update_state (resample, resample->width,
resample->channels, resample->inrate, resample->outrate,
resample->quality, resample->fp);
GST_BASE_TRANSFORM_UNLOCK (resample);
break;
case PROP_FILTER_LENGTH:{
gint filter_length = g_value_get_int (value);
GST_BASE_TRANSFORM_LOCK (resample);
if (filter_length <= 8)
resample->quality = 0;
else if (filter_length <= 16)
@ -1212,6 +1215,7 @@ gst_audio_resample_set_property (GObject * object, guint prop_id,
gst_audio_resample_update_state (resample, resample->width,
resample->channels, resample->inrate, resample->outrate,
resample->quality, resample->fp);
GST_BASE_TRANSFORM_UNLOCK (resample);
break;
}
default: