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

Unified Diff: chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc

Issue 2701613006: [Chromecast] Process streams with different post-processing. (Closed)
Patch Set: Fix unittests Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
diff --git a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
index 9770a4c023129252ec0b7905f128f33fb914b9e7..db5e3421bb6a6df36c083dd7299f3cf37db9b3f4 100644
--- a/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
+++ b/chromecast/media/cma/backend/alsa/stream_mixer_alsa_unittest.cc
@@ -15,6 +15,7 @@
#include "base/run_loop.h"
#include "base/threading/thread_task_runner_handle.h"
#include "chromecast/media/cma/backend/alsa/mock_alsa_wrapper.h"
+#include "media/audio/audio_device_description.h"
#include "media/base/audio_bus.h"
#include "media/base/vector_math.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -126,13 +127,17 @@ std::unique_ptr<::media::AudioBus> GetTestData(size_t index) {
class MockInputQueue : public StreamMixerAlsa::InputQueue {
public:
- explicit MockInputQueue(int samples_per_second)
+ explicit MockInputQueue(int samples_per_second,
+ const std::string& device_id =
+ ::media::AudioDeviceDescription::kDefaultDeviceId)
: paused_(true),
samples_per_second_(samples_per_second),
max_read_size_(kTestMaxReadSize),
multiplier_(1.0),
primary_(true),
- deleting_(false) {
+ deleting_(false),
+ device_id_(device_id),
+ filter_group_(nullptr) {
ON_CALL(*this, GetResampledData(_, _)).WillByDefault(
testing::Invoke(this, &MockInputQueue::DoGetResampledData));
ON_CALL(*this, VolumeScaleAccumulate(_, _, _, _)).WillByDefault(
@@ -151,6 +156,9 @@ class MockInputQueue : public StreamMixerAlsa::InputQueue {
MOCK_METHOD1(Initialize,
void(const MediaPipelineBackendAlsa::RenderingDelay&
mixer_rendering_delay));
+ std::string device_id() const override { return device_id_; }
+ void set_filter_group(FilterGroup* group) override { filter_group_ = group; }
+ FilterGroup* filter_group() override { return filter_group_; }
int MaxReadSize() override { return max_read_size_; }
MOCK_METHOD2(GetResampledData, void(::media::AudioBus* dest, int frames));
MOCK_METHOD4(
@@ -214,6 +222,9 @@ class MockInputQueue : public StreamMixerAlsa::InputQueue {
float multiplier_;
bool primary_;
bool deleting_;
+ const std::string device_id_;
+ FilterGroup* filter_group_;
+
std::unique_ptr<::media::AudioBus> data_;
DISALLOW_COPY_AND_ASSIGN(MockInputQueue);
@@ -514,6 +525,48 @@ TEST_F(StreamMixerAlsaTest, TwoUnscaledStreamsMixProperly) {
// Get the actual stream rendered to ALSA, and compare it against the
// expected stream. The stream should match exactly.
auto actual = ::media::AudioBus::Create(kNumChannels, kNumFrames);
+ actual->FromInterleaved(&(mock_alsa()->data()[0]), kNumFrames,
+ kBytesPerSample);
+ CompareAudioData(*expected, *actual);
+}
+
+TEST_F(StreamMixerAlsaTest, TwoUnscaledStreamsWithDifferentIdsMixProperly) {
+ // Create a group of input streams.
+ std::vector<testing::StrictMock<MockInputQueue>*> inputs;
+ inputs.push_back(new testing::StrictMock<MockInputQueue>(
+ kTestSamplesPerSecond,
+ ::media::AudioDeviceDescription::kDefaultDeviceId));
+ inputs.back()->SetPaused(false);
+ inputs.push_back(new testing::StrictMock<MockInputQueue>(
+ kTestSamplesPerSecond,
+ ::media::AudioDeviceDescription::kCommunicationsDeviceId));
+ inputs.back()->SetPaused(false);
+
+ StreamMixerAlsa* mixer = StreamMixerAlsa::Get();
+ for (size_t i = 0; i < inputs.size(); ++i) {
+ EXPECT_CALL(*inputs[i], Initialize(_)).Times(1);
+ mixer->AddInput(base::WrapUnique(inputs[i]));
+ }
+
+ // Poll the inputs for data.
+ const int kNumFrames = 32;
+ for (size_t i = 0; i < inputs.size(); ++i) {
+ inputs[i]->SetData(GetTestData(i));
+ EXPECT_CALL(*inputs[i], GetResampledData(_, kNumFrames));
+ EXPECT_CALL(*inputs[i], VolumeScaleAccumulate(_, _, kNumFrames, _))
+ .Times(kNumChannels);
+ EXPECT_CALL(*inputs[i], AfterWriteFrames(_));
+ }
+
+ EXPECT_CALL(*mock_alsa(), PcmWritei(_, _, kNumFrames)).Times(1);
+ mixer->WriteFramesForTest();
+
+ // Mix the inputs manually.
+ auto expected = GetMixedAudioData(inputs);
+
+ // Get the actual stream rendered to ALSA, and compare it against the
+ // expected stream. The stream should match exactly.
+ auto actual = ::media::AudioBus::Create(kNumChannels, kNumFrames);
actual->FromInterleaved(
&(mock_alsa()->data()[0]), kNumFrames, kBytesPerSample);
CompareAudioData(*expected, *actual);

Powered by Google App Engine
This is Rietveld 408576698