mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 06:58:56 +00:00
audioaggregator: Update converters after updating with the new audioinfo/caps
Otherwise subclasses might accidentially use the old audioinfo/caps. None of the subclasses currently uses the audioinfo/caps, but future subclasses might. https://bugzilla.gnome.org/show_bug.cgi?id=795827
This commit is contained in:
parent
ef71c5a29d
commit
5b736d2c7a
1 changed files with 22 additions and 22 deletions
|
@ -832,7 +832,7 @@ gst_audio_aggregator_fixate_src_caps (GstAggregator * agg, GstCaps * caps)
|
||||||
/* Must be called with OBJECT_LOCK taken */
|
/* Must be called with OBJECT_LOCK taken */
|
||||||
static void
|
static void
|
||||||
gst_audio_aggregator_update_converters (GstAudioAggregator * aagg,
|
gst_audio_aggregator_update_converters (GstAudioAggregator * aagg,
|
||||||
GstAudioInfo * new_info)
|
GstAudioInfo * new_info, GstAudioInfo * old_info)
|
||||||
{
|
{
|
||||||
GList *l;
|
GList *l;
|
||||||
|
|
||||||
|
@ -849,7 +849,7 @@ gst_audio_aggregator_update_converters (GstAudioAggregator * aagg,
|
||||||
if (aaggpad->priv->buffer) {
|
if (aaggpad->priv->buffer) {
|
||||||
GstBuffer *new_converted_buffer =
|
GstBuffer *new_converted_buffer =
|
||||||
gst_audio_aggregator_convert_buffer (aagg, GST_PAD (aaggpad),
|
gst_audio_aggregator_convert_buffer (aagg, GST_PAD (aaggpad),
|
||||||
&aaggpad->info, new_info, aaggpad->priv->input_buffer);
|
old_info, new_info, aaggpad->priv->input_buffer);
|
||||||
gst_buffer_replace (&aaggpad->priv->buffer, new_converted_buffer);
|
gst_buffer_replace (&aaggpad->priv->buffer, new_converted_buffer);
|
||||||
gst_buffer_unref (new_converted_buffer);
|
gst_buffer_unref (new_converted_buffer);
|
||||||
}
|
}
|
||||||
|
@ -874,31 +874,31 @@ gst_audio_aggregator_negotiated_src_caps (GstAggregator * agg, GstCaps * caps)
|
||||||
GST_AUDIO_AGGREGATOR_LOCK (aagg);
|
GST_AUDIO_AGGREGATOR_LOCK (aagg);
|
||||||
GST_OBJECT_LOCK (aagg);
|
GST_OBJECT_LOCK (aagg);
|
||||||
|
|
||||||
if (GST_AUDIO_AGGREGATOR_PAD_GET_CLASS (agg->srcpad)->convert_buffer) {
|
|
||||||
gst_audio_aggregator_update_converters (aagg, &info);
|
|
||||||
|
|
||||||
if (aagg->priv->current_buffer
|
|
||||||
&& !gst_audio_info_is_equal (&srcpad->info, &info)) {
|
|
||||||
GstBuffer *converted;
|
|
||||||
GstAudioAggregatorPadClass *klass =
|
|
||||||
GST_AUDIO_AGGREGATOR_PAD_GET_CLASS (agg->srcpad);
|
|
||||||
|
|
||||||
if (klass->update_conversion_info)
|
|
||||||
klass->update_conversion_info (GST_AUDIO_AGGREGATOR_PAD (agg->srcpad));
|
|
||||||
|
|
||||||
converted =
|
|
||||||
gst_audio_aggregator_convert_buffer (aagg, agg->srcpad, &srcpad->info,
|
|
||||||
&info, aagg->priv->current_buffer);
|
|
||||||
gst_buffer_unref (aagg->priv->current_buffer);
|
|
||||||
aagg->priv->current_buffer = converted;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!gst_audio_info_is_equal (&info, &srcpad->info)) {
|
if (!gst_audio_info_is_equal (&info, &srcpad->info)) {
|
||||||
|
GstAudioInfo old_info = srcpad->info;
|
||||||
|
GstAudioAggregatorPadClass *srcpad_klass =
|
||||||
|
GST_AUDIO_AGGREGATOR_PAD_GET_CLASS (agg->srcpad);
|
||||||
|
|
||||||
GST_INFO_OBJECT (aagg, "setting caps to %" GST_PTR_FORMAT, caps);
|
GST_INFO_OBJECT (aagg, "setting caps to %" GST_PTR_FORMAT, caps);
|
||||||
gst_caps_replace (&aagg->current_caps, caps);
|
gst_caps_replace (&aagg->current_caps, caps);
|
||||||
|
|
||||||
memcpy (&srcpad->info, &info, sizeof (info));
|
memcpy (&srcpad->info, &info, sizeof (info));
|
||||||
|
|
||||||
|
gst_audio_aggregator_update_converters (aagg, &info, &old_info);
|
||||||
|
|
||||||
|
if (srcpad_klass->update_conversion_info)
|
||||||
|
srcpad_klass->
|
||||||
|
update_conversion_info (GST_AUDIO_AGGREGATOR_PAD (agg->srcpad));
|
||||||
|
|
||||||
|
if (aagg->priv->current_buffer) {
|
||||||
|
GstBuffer *converted;
|
||||||
|
|
||||||
|
converted =
|
||||||
|
gst_audio_aggregator_convert_buffer (aagg, agg->srcpad, &old_info,
|
||||||
|
&info, aagg->priv->current_buffer);
|
||||||
|
gst_buffer_unref (aagg->priv->current_buffer);
|
||||||
|
aagg->priv->current_buffer = converted;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_OBJECT_UNLOCK (aagg);
|
GST_OBJECT_UNLOCK (aagg);
|
||||||
|
|
Loading…
Reference in a new issue