summaryrefslogtreecommitdiffstats
path: root/media/base/sinc_resampler_unittest.cc
diff options
context:
space:
mode:
authordalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-17 21:40:21 +0000
committerdalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-17 21:40:21 +0000
commitbcae835db15c63fa3f0f45746c3fc4eb8ea7cbe6 (patch)
tree83784b1497d4bf46fcaadb0db1e68c5ab09e7a6d /media/base/sinc_resampler_unittest.cc
parent0463af04eafa965879743b5707dcfc3e129cd6c4 (diff)
downloadchromium_src-bcae835db15c63fa3f0f45746c3fc4eb8ea7cbe6.zip
chromium_src-bcae835db15c63fa3f0f45746c3fc4eb8ea7cbe6.tar.gz
chromium_src-bcae835db15c63fa3f0f45746c3fc4eb8ea7cbe6.tar.bz2
Varispeed support for SincResampler.
Provides a 3x speedup on all platforms for subsequent kernel creations with only an extra 8k in memory. BUG=none TEST=media_unittests Review URL: https://codereview.chromium.org/13741004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194690 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base/sinc_resampler_unittest.cc')
-rw-r--r--media/base/sinc_resampler_unittest.cc31
1 files changed, 30 insertions, 1 deletions
diff --git a/media/base/sinc_resampler_unittest.cc b/media/base/sinc_resampler_unittest.cc
index 62156d2..8b8b4dd 100644
--- a/media/base/sinc_resampler_unittest.cc
+++ b/media/base/sinc_resampler_unittest.cc
@@ -98,6 +98,22 @@ TEST(SincResamplerTest, Flush) {
ASSERT_FLOAT_EQ(resampled_destination[i], 0);
}
+// Test flush resets the internal state properly.
+TEST(SincResamplerTest, DISABLED_SetRatioBench) {
+ MockSource mock_source;
+ SincResampler resampler(
+ kSampleRateRatio,
+ base::Bind(&MockSource::ProvideInput, base::Unretained(&mock_source)));
+
+ base::TimeTicks start = base::TimeTicks::HighResNow();
+ for (int i = 1; i < 10000; ++i)
+ resampler.SetRatio(1.0 / i);
+ double total_time_c_ms =
+ (base::TimeTicks::HighResNow() - start).InMillisecondsF();
+ printf("SetRatio() took %.2fms.\n", total_time_c_ms);
+}
+
+
// Define platform independent function name for Convolve* tests.
#if defined(ARCH_CPU_X86_FAMILY)
#define CONVOLVE_FUNC Convolve_SSE
@@ -299,11 +315,24 @@ TEST_P(SincResamplerTest, Resample) {
SinusoidalLinearChirpSource resampler_source(
input_rate_, input_samples, input_nyquist_freq);
+ const double io_ratio = input_rate_ / static_cast<double>(output_rate_);
SincResampler resampler(
- input_rate_ / static_cast<double>(output_rate_),
+ io_ratio,
base::Bind(&SinusoidalLinearChirpSource::ProvideInput,
base::Unretained(&resampler_source)));
+ // Force an update to the sample rate ratio to ensure dyanmic sample rate
+ // changes are working correctly.
+ scoped_ptr<float[]> kernel(new float[SincResampler::kKernelStorageSize]);
+ memcpy(kernel.get(), resampler.get_kernel_for_testing(),
+ SincResampler::kKernelStorageSize);
+ resampler.SetRatio(M_PI);
+ ASSERT_NE(0, memcmp(kernel.get(), resampler.get_kernel_for_testing(),
+ SincResampler::kKernelStorageSize));
+ resampler.SetRatio(io_ratio);
+ ASSERT_EQ(0, memcmp(kernel.get(), resampler.get_kernel_for_testing(),
+ SincResampler::kKernelStorageSize));
+
// TODO(dalecurtis): If we switch to AVX/SSE optimization, we'll need to
// allocate these on 32-byte boundaries and ensure they're sized % 32 bytes.
scoped_ptr<float[]> resampled_destination(new float[output_samples]);