[vlc-commits] aout: remove the old rate kludge to probe resamplers

Rémi Denis-Courmont git at videolan.org
Sat Nov 17 21:34:20 CET 2012


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Nov 17 22:25:06 2012 +0200| [fdd2b7b1c4106b8b59d7cb243c50c5b27ea6673d] | committer: Rémi Denis-Courmont

aout: remove the old rate kludge to probe resamplers

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fdd2b7b1c4106b8b59d7cb243c50c5b27ea6673d
---

 src/audio_output/filters.c |   82 ++++++++++++++++++++------------------------
 1 file changed, 37 insertions(+), 45 deletions(-)

diff --git a/src/audio_output/filters.c b/src/audio_output/filters.c
index b2edd74..06ba42d 100644
--- a/src/audio_output/filters.c
+++ b/src/audio_output/filters.c
@@ -42,44 +42,43 @@
 #include <libvlc.h>
 #include "aout_internal.h"
 
-/*****************************************************************************
- * FindFilter: find an audio filter for a specific transformation
- *****************************************************************************/
-static filter_t * FindFilter( vlc_object_t *obj,
-                              const audio_sample_format_t *infmt,
-                              const audio_sample_format_t *outfmt )
+static filter_t *FindFilter (vlc_object_t *obj, const char *type,
+                             const char *name,
+                             const audio_sample_format_t *infmt,
+                             const audio_sample_format_t *outfmt)
 {
-    static const char typename[] = "audio converter";
-    const char *type = "audio converter", *name = NULL;
-    filter_t * p_filter;
-
-    p_filter = vlc_custom_create( obj, sizeof(*p_filter), typename );
-
-    if ( p_filter == NULL ) return NULL;
-
-    p_filter->fmt_in.audio = *infmt;
-    p_filter->fmt_in.i_codec = infmt->i_format;
-    p_filter->fmt_out.audio = *outfmt;
-    p_filter->fmt_out.i_codec = outfmt->i_format;
+    filter_t *filter = vlc_custom_create (obj, sizeof (*filter), type);
+    if (unlikely(filter == NULL))
+        return NULL;
 
-    if( infmt->i_format == outfmt->i_format
-     && infmt->i_physical_channels == outfmt->i_physical_channels
-     && infmt->i_original_channels == outfmt->i_original_channels )
+    filter->fmt_in.audio = *infmt;
+    filter->fmt_in.i_codec = infmt->i_format;
+    filter->fmt_out.audio = *outfmt;
+    filter->fmt_out.i_codec = outfmt->i_format;
+    filter->p_module = module_need (filter, type, name, false);
+    if (filter->p_module == NULL)
     {
-        assert( infmt->i_rate != outfmt->i_rate );
-        type = "audio resampler";
-        name = "$audio-resampler";
+        vlc_object_release (filter);
+        filter = NULL;
     }
+    else
+        assert (filter->pf_audio_filter != NULL);
+    return filter;
+}
 
-    p_filter->p_module = module_need( p_filter, type, name, false );
-    if ( p_filter->p_module == NULL )
-    {
-        vlc_object_release( p_filter );
-        return NULL;
-    }
+static filter_t *FindConverter (vlc_object_t *obj,
+                                const audio_sample_format_t *infmt,
+                                const audio_sample_format_t *outfmt)
+{
+    return FindFilter (obj, "audio converter", NULL, infmt, outfmt);
+}
 
-    assert( p_filter->pf_audio_filter );
-    return p_filter;
+static filter_t *FindResampler (vlc_object_t *obj,
+                                const audio_sample_format_t *infmt,
+                                const audio_sample_format_t *outfmt)
+{
+    return FindFilter (obj, "audio resampler", "$audio-resampler",
+                       infmt, outfmt);
 }
 
 /**
@@ -105,7 +104,7 @@ static filter_t *TryFormat (vlc_object_t *obj, vlc_fourcc_t codec,
     output.i_format = codec;
     aout_FormatPrepare (&output);
 
-    filter_t *filter = FindFilter (obj, fmt, &output);
+    filter_t *filter = FindConverter (obj, fmt, &output);
     if (filter != NULL)
         *fmt = output;
     return filter;
@@ -213,7 +212,7 @@ static int aout_FiltersPipelineCreate(vlc_object_t *obj, filter_t **filters,
         output.i_original_channels = outfmt->i_original_channels;
         aout_FormatPrepare (&output);
 
-        filter_t *f = FindFilter (obj, &input, &output);
+        filter_t *f = FindConverter (obj, &input, &output);
         if (f == NULL)
         {
             msg_Err (obj, "cannot find %s for conversion pipeline",
@@ -234,7 +233,7 @@ static int aout_FiltersPipelineCreate(vlc_object_t *obj, filter_t **filters,
         audio_sample_format_t output = input;
         output.i_rate = outfmt->i_rate;
 
-        filter_t *f = FindFilter (obj, &input, &output);
+        filter_t *f = FindConverter (obj, &input, &output);
         if (f == NULL)
         {
             msg_Err (obj, "cannot find %s for conversion pipeline",
@@ -573,23 +572,16 @@ int aout_FiltersNew (audio_output_t *aout,
     /* insert the resampler */
     output_format.i_rate = outfmt->i_rate;
     assert (AOUT_FMTS_IDENTICAL(&output_format, outfmt));
-
-    unsigned rate_bak = input_format.i_rate;
-    if (output_format.i_rate == input_format.i_rate)
-        /* For historical reasons, a different rate is required to probe
-         * resampling filters. */
-        input_format.i_rate++;
-    owner->resampler = FindFilter (VLC_OBJECT(aout), &input_format,
-                                   &output_format);
+    owner->resampler = FindResampler (VLC_OBJECT(aout), &input_format,
+                                      &output_format);
     if (owner->resampler == NULL)
     {
         msg_Err (aout, "cannot setup a resampler");
         goto error;
     }
-    owner->resampler->fmt_in.audio.i_rate = rate_bak;
     if (owner->rate_filter == NULL)
         owner->rate_filter = owner->resampler;
-   owner->resampling = 0;
+    owner->resampling = 0;
 
     return 0;
 



More information about the vlc-commits mailing list