Allow to configure the resampler function for integer to skip the benchmarking. Fix releasing the intger resampler in benchmark.

This commit is contained in:
Stefan Kost 2009-02-02 15:43:03 +02:00
parent e7f910e0fc
commit 0ea2afee42
2 changed files with 35 additions and 4 deletions

View file

@ -294,6 +294,26 @@ AG_GST_SET_LEVEL_DEFAULT($GST_CVS)
dnl used in examples
AG_GST_DEFAULT_ELEMENTS
dnl behaviour of speex based audio resampler
AC_MSG_CHECKING(which audio resample format to use for integer)
AC_ARG_WITH([audioresample_format],
AS_HELP_STRING([--with-audioresample-format],[Which implementation should be used for integer audio resampling, int/float/auto, (default is auto)]),
[ac_cv_audioresample_format=$withval], [ac_cv_audioresample_format=auto])dnl
AC_MSG_RESULT($ac_cv_audioresample_format)
case $ac_cv_audioresample_format in
int)
AC_DEFINE(AUDIORESAMPLE_FORMAT_INT,1,[The int implementation should be used for integer audio resampling])
AC_SUBST(AUDIORESAMPLE_FORMAT_INT)
;;
float)
AC_DEFINE(AUDIORESAMPLE_FORMAT_FLOAT,1,[The float implementation should be used for integer audio resampling])
AC_SUBST(AUDIORESAMPLE_FORMAT_FLOAT)
;;
auto)
AC_DEFINE(AUDIORESAMPLE_FORMAT_AUTO,1,[The implementation that should be used for integer audio resampling witll be benchmarked at runtime])
AC_SUBST(AUDIORESAMPLE_FORMAT_AUTO)
esac
dnl *** plug-ins to include ***
dnl these are all the gst plug-ins, compilable without additional libs

View file

@ -101,7 +101,13 @@ GST_STATIC_CAPS ( \
)
/* If TRUE integer arithmetic resampling is faster and will be used if appropiate */
#if defined AUDIORESAMPLE_FORMAT_INT
static gboolean gst_audio_resample_use_int = TRUE;
#elif defined AUDIORESAMPLE_FORMAT_FLOAT
static gboolean gst_audio_resample_use_int = FALSE;
#else
static gboolean gst_audio_resample_use_int = FALSE;
#endif
static GstStaticPadTemplate gst_audio_resample_sink_template =
GST_STATIC_PAD_TEMPLATE ("sink",
@ -1261,6 +1267,7 @@ gst_audio_resample_get_property (GObject * object, guint prop_id,
}
}
#if defined AUDIORESAMPLE_FORMAT_AUTO
#define BENCHMARK_SIZE 512
static gboolean
@ -1360,23 +1367,25 @@ _benchmark_integer_resampling (void)
oil_profile_get_ave_std (&a, &av, NULL);
oil_profile_get_ave_std (&b, &bv, NULL);
/* Remember benchmark result in global variable */
gst_audio_resample_use_int = (av > bv);
resample_float_resampler_destroy (sta);
resample_float_resampler_destroy (stb);
resample_int_resampler_destroy (stb);
if (av > bv)
GST_DEBUG ("Using integer resampler if appropiate: %lf < %lf", bv, av);
GST_INFO ("Using integer resampler if appropiate: %lf < %lf", bv, av);
else
GST_DEBUG ("Using float resampler for everything: %lf <= %lf", av, bv);
GST_INFO ("Using float resampler for everything: %lf <= %lf", av, bv);
return TRUE;
error:
resample_float_resampler_destroy (sta);
resample_float_resampler_destroy (stb);
resample_int_resampler_destroy (stb);
return FALSE;
}
#endif
static gboolean
plugin_init (GstPlugin * plugin)
@ -1386,8 +1395,10 @@ plugin_init (GstPlugin * plugin)
oil_init ();
#if defined AUDIORESAMPLE_FORMAT_AUTO
if (!_benchmark_integer_resampling ())
return FALSE;
#endif
if (!gst_element_register (plugin, "audioresample", GST_RANK_PRIMARY,
GST_TYPE_AUDIO_RESAMPLE)) {