From: Jan Alexander Steffens (heftig) Date: Mon, 15 Mar 2021 14:33:47 +0000 (+0100) Subject: audioaggregator: Consider converting for equal audio formats X-Git-Tag: 1.19.3~511^2~241 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a379e0e5f1870b15c220207a86393d0fdf23874e;p=platform%2Fupstream%2Fgstreamer.git audioaggregator: Consider converting for equal audio formats The converter might have a non-passthrough mix-matrix. The converter can determine whether it should pass through, so let it, then remove it if it's indeed a passthrough. FIXME: Not converting when we need to but the config is invalid (e.g. because the mix-matrix is not the right size) produces garbage. An invalid config should cause a GST_FLOW_NOT_NEGOTIATED. Part-of: --- diff --git a/gst-libs/gst/audio/gstaudioaggregator.c b/gst-libs/gst/audio/gstaudioaggregator.c index d2b9cbb..44fc7c6 100644 --- a/gst-libs/gst/audio/gstaudioaggregator.c +++ b/gst-libs/gst/audio/gstaudioaggregator.c @@ -200,6 +200,7 @@ gst_audio_aggregator_convert_pad_update_converter (GstAudioAggregatorConvertPad * aaggcpad, GstAudioInfo * in_info, GstAudioInfo * out_info) { GstStructure *config = aaggcpad->priv->converter_config; + GstAudioConverter *converter; if (!aaggcpad->priv->converter_config_changed) return; @@ -207,16 +208,27 @@ gst_audio_aggregator_convert_pad_update_converter (GstAudioAggregatorConvertPad g_clear_pointer (&aaggcpad->priv->converter, gst_audio_converter_free); aaggcpad->priv->converter_config_changed = FALSE; - if (gst_audio_info_is_equal (in_info, out_info) || - in_info->finfo->format == GST_AUDIO_FORMAT_UNKNOWN) { + if (in_info->finfo->format == GST_AUDIO_FORMAT_UNKNOWN) { /* If we haven't received caps yet, this pad should not have * a buffer to convert anyway */ return; } - aaggcpad->priv->converter = + converter = gst_audio_converter_new (GST_AUDIO_CONVERTER_FLAG_NONE, in_info, out_info, config ? gst_structure_copy (config) : NULL); + + if (converter == NULL) { + /* FIXME: Not converting when we need to but the config is invalid (e.g. + * because the mix-matrix is not the right size) produces garbage. An + * invalid config should cause a GST_FLOW_NOT_NEGOTIATED. */ + return; + } + + if (!gst_audio_converter_is_passthrough (converter)) + aaggcpad->priv->converter = converter; + else + gst_audio_converter_free (converter); } static void