diff options
author | dalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-17 21:40:21 +0000 |
---|---|---|
committer | dalecurtis@google.com <dalecurtis@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-17 21:40:21 +0000 |
commit | bcae835db15c63fa3f0f45746c3fc4eb8ea7cbe6 (patch) | |
tree | 83784b1497d4bf46fcaadb0db1e68c5ab09e7a6d /media/base/sinc_resampler_unittest.cc | |
parent | 0463af04eafa965879743b5707dcfc3e129cd6c4 (diff) | |
download | chromium_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.cc | 31 |
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]); |