Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Side by Side Diff: media/filters/audio_renderer_algorithm_unittest.cc

Issue 217553004: Handle near-colinear case in WSOLAS QuadraticInterpolation better. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | media/filters/wsola_internals.h » ('j') | media/filters/wsola_internals.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // The format of these tests are to enqueue a known amount of data and then 5 // The format of these tests are to enqueue a known amount of data and then
6 // request the exact amount we expect in order to dequeue the known amount of 6 // request the exact amount we expect in order to dequeue the known amount of
7 // data. This ensures that for any rate we are consuming input data at the 7 // data. This ensures that for any rate we are consuming input data at the
8 // correct rate. We always pass in a very large destination buffer with the 8 // correct rate. We always pass in a very large destination buffer with the
9 // expectation that FillBuffer() will fill as much as it can but no more. 9 // expectation that FillBuffer() will fill as much as it can but no more.
10 10
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 // An interval which is of no effect. 583 // An interval which is of no effect.
584 exclude_interval = std::make_pair(-100, -10); 584 exclude_interval = std::make_pair(-100, -10);
585 EXPECT_EQ(4, internal::DecimatedSearch( 585 EXPECT_EQ(4, internal::DecimatedSearch(
586 4, exclude_interval, target.get(), search_region.get(), 586 4, exclude_interval, target.get(), search_region.get(),
587 energy_target.get(), energy_candid_blocks.get())); 587 energy_target.get(), energy_candid_blocks.get()));
588 588
589 EXPECT_EQ(5, internal::OptimalIndex(search_region.get(), target.get(), 589 EXPECT_EQ(5, internal::OptimalIndex(search_region.get(), target.get(),
590 exclude_interval)); 590 exclude_interval));
591 } 591 }
592 592
593 TEST_F(AudioRendererAlgorithmTest, CubicInterpolation) { 593 TEST_F(AudioRendererAlgorithmTest, QuadraticInterpolation) {
594 // Arbitrary coefficients. 594 // Arbitrary coefficients.
595 const float kA = 0.7f; 595 const float kA = 0.7f;
596 const float kB = 1.2f; 596 const float kB = 1.2f;
597 const float kC = 0.8f; 597 const float kC = 0.8f;
598 598
599 float y_values[3]; 599 float y_values[3];
600 y_values[0] = kA - kB + kC; 600 y_values[0] = kA - kB + kC;
601 y_values[1] = kC; 601 y_values[1] = kC;
602 y_values[2] = kA + kB + kC; 602 y_values[2] = kA + kB + kC;
603 603
604 float extremum; 604 float extremum;
605 float extremum_value; 605 float extremum_value;
606 606
607 internal::CubicInterpolation(y_values, &extremum, &extremum_value); 607 internal::QuadraticInterpolation(y_values, &extremum, &extremum_value);
608 608
609 float x_star = -kB / (2.f * kA); 609 float x_star = -kB / (2.f * kA);
610 float y_star = kA * x_star * x_star + kB * x_star + kC; 610 float y_star = kA * x_star * x_star + kB * x_star + kC;
611 611
612 EXPECT_FLOAT_EQ(x_star, extremum); 612 EXPECT_FLOAT_EQ(x_star, extremum);
613 EXPECT_FLOAT_EQ(y_star, extremum_value); 613 EXPECT_FLOAT_EQ(y_star, extremum_value);
614 } 614 }
615 615
616 TEST_F(AudioRendererAlgorithmTest, QuadraticInterpolation_Colinear) {
617 float y_values[3];
618 y_values[0] = 1.0;
619 y_values[1] = 1.0;
620 y_values[2] = 1.0;
621
622 float extremum;
623 float extremum_value;
624
625 internal::QuadraticInterpolation(y_values, &extremum, &extremum_value);
626
627 EXPECT_NEAR(extremum, 0.0, 1.0);
DaleCurtis 2014/03/29 01:10:01 within 1 seems pretty large?
sandersd (OOO until July 31) 2014/03/29 01:19:37 Since the choice of x = 0 was arbitrary, I'm only
628 EXPECT_FLOAT_EQ(extremum_value, 1.0);
629 }
630
616 TEST_F(AudioRendererAlgorithmTest, WsolaSlowdown) { 631 TEST_F(AudioRendererAlgorithmTest, WsolaSlowdown) {
617 WsolaTest(0.6f); 632 WsolaTest(0.6f);
618 } 633 }
619 634
620 TEST_F(AudioRendererAlgorithmTest, WsolaSpeedup) { 635 TEST_F(AudioRendererAlgorithmTest, WsolaSpeedup) {
621 WsolaTest(1.6f); 636 WsolaTest(1.6f);
622 } 637 }
623 638
624 } // namespace media 639 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | media/filters/wsola_internals.h » ('j') | media/filters/wsola_internals.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698