Allow to configure the resampler function for integer to skip the benchmarking. Fix releasing the intger resampler in benchmark.
This commit is contained in:
parent
e7f910e0fc
commit
0ea2afee42
20
configure.ac
20
configure.ac
@ -294,6 +294,26 @@ AG_GST_SET_LEVEL_DEFAULT($GST_CVS)
|
|||||||
dnl used in examples
|
dnl used in examples
|
||||||
AG_GST_DEFAULT_ELEMENTS
|
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 *** plug-ins to include ***
|
||||||
|
|
||||||
dnl these are all the gst plug-ins, compilable without additional libs
|
dnl these are all the gst plug-ins, compilable without additional libs
|
||||||
|
@ -101,7 +101,13 @@ GST_STATIC_CAPS ( \
|
|||||||
)
|
)
|
||||||
|
|
||||||
/* If TRUE integer arithmetic resampling is faster and will be used if appropiate */
|
/* 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;
|
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 =
|
static GstStaticPadTemplate gst_audio_resample_sink_template =
|
||||||
GST_STATIC_PAD_TEMPLATE ("sink",
|
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
|
#define BENCHMARK_SIZE 512
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -1360,23 +1367,25 @@ _benchmark_integer_resampling (void)
|
|||||||
oil_profile_get_ave_std (&a, &av, NULL);
|
oil_profile_get_ave_std (&a, &av, NULL);
|
||||||
oil_profile_get_ave_std (&b, &bv, NULL);
|
oil_profile_get_ave_std (&b, &bv, NULL);
|
||||||
|
|
||||||
|
/* Remember benchmark result in global variable */
|
||||||
gst_audio_resample_use_int = (av > bv);
|
gst_audio_resample_use_int = (av > bv);
|
||||||
resample_float_resampler_destroy (sta);
|
resample_float_resampler_destroy (sta);
|
||||||
resample_float_resampler_destroy (stb);
|
resample_int_resampler_destroy (stb);
|
||||||
|
|
||||||
if (av > bv)
|
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
|
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;
|
return TRUE;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
resample_float_resampler_destroy (sta);
|
resample_float_resampler_destroy (sta);
|
||||||
resample_float_resampler_destroy (stb);
|
resample_int_resampler_destroy (stb);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
plugin_init (GstPlugin * plugin)
|
plugin_init (GstPlugin * plugin)
|
||||||
@ -1386,8 +1395,10 @@ plugin_init (GstPlugin * plugin)
|
|||||||
|
|
||||||
oil_init ();
|
oil_init ();
|
||||||
|
|
||||||
|
#if defined AUDIORESAMPLE_FORMAT_AUTO
|
||||||
if (!_benchmark_integer_resampling ())
|
if (!_benchmark_integer_resampling ())
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!gst_element_register (plugin, "audioresample", GST_RANK_PRIMARY,
|
if (!gst_element_register (plugin, "audioresample", GST_RANK_PRIMARY,
|
||||||
GST_TYPE_AUDIO_RESAMPLE)) {
|
GST_TYPE_AUDIO_RESAMPLE)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user