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

Side by Side Diff: chromecast/media/cma/backend/alsa/mock_alsa_wrapper.cc

Issue 2133293003: [Chromecast] Make ALSA rendering delay either accurate or kNoTimestamp (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Fix ALSA unit tests Created 4 years, 5 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "chromecast/media/cma/backend/alsa/mock_alsa_wrapper.h" 5 #include "chromecast/media/cma/backend/alsa/mock_alsa_wrapper.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 8
9 // Define dummy structs here to avoid linking in the ALSA lib. 9 // Define dummy structs here to avoid linking in the ALSA lib.
10 struct _snd_pcm_hw_params {}; 10 struct _snd_pcm_hw_params {};
11 struct _snd_pcm_status {};
11 struct _snd_pcm {}; 12 struct _snd_pcm {};
12 13
13 namespace chromecast { 14 namespace chromecast {
14 namespace media { 15 namespace media {
15 16
16 const size_t kBytesPerSample = sizeof(int32_t); 17 const size_t kBytesPerSample = sizeof(int32_t);
17 const int kNumChannels = 2; 18 const int kNumChannels = 2;
18 19
19 // This class keeps basic state to ensure that ALSA is being used correctly. 20 // This class keeps basic state to ensure that ALSA is being used correctly.
20 // Calls from MockAlsaWrapper are delegated to an instance of this class in 21 // Calls from MockAlsaWrapper are delegated to an instance of this class in
21 // cases where internal ALSA state change occurs, or where a valid value needs 22 // cases where internal ALSA state change occurs, or where a valid value needs
22 // to be returned to the caller. 23 // to be returned to the caller.
23 class MockAlsaWrapper::FakeAlsaWrapper : public AlsaWrapper { 24 class MockAlsaWrapper::FakeAlsaWrapper : public AlsaWrapper {
24 public: 25 public:
25 FakeAlsaWrapper() 26 FakeAlsaWrapper()
26 : state_(SND_PCM_STATE_RUNNING), 27 : state_(SND_PCM_STATE_RUNNING),
27 fake_handle_(nullptr), 28 fake_handle_(nullptr),
28 fake_pcm_hw_params_(nullptr) {} 29 fake_pcm_hw_params_(nullptr),
30 fake_pcm_status_(nullptr) {}
29 31
30 ~FakeAlsaWrapper() override { 32 ~FakeAlsaWrapper() override {
31 delete fake_handle_; 33 delete fake_handle_;
32 delete fake_pcm_hw_params_; 34 delete fake_pcm_hw_params_;
35 delete fake_pcm_status_;
33 } 36 }
34 37
35 // AlsaWrapper implementation: 38 // AlsaWrapper implementation:
36 int PcmPause(snd_pcm_t* handle, int pause) override { 39 int PcmPause(snd_pcm_t* handle, int pause) override {
37 CHECK_NE(pause, (state_ == SND_PCM_STATE_PAUSED)); 40 CHECK_NE(pause, (state_ == SND_PCM_STATE_PAUSED));
38 if (pause) 41 if (pause)
39 state_ = SND_PCM_STATE_PAUSED; 42 state_ = SND_PCM_STATE_PAUSED;
40 else 43 else
41 state_ = SND_PCM_STATE_RUNNING; 44 state_ = SND_PCM_STATE_RUNNING;
42 return 0; 45 return 0;
(...skipping 22 matching lines...) Expand all
65 return size; 68 return size;
66 } 69 }
67 70
68 int PcmHwParamsMalloc(snd_pcm_hw_params_t** ptr) override { 71 int PcmHwParamsMalloc(snd_pcm_hw_params_t** ptr) override {
69 fake_pcm_hw_params_ = new snd_pcm_hw_params_t(); 72 fake_pcm_hw_params_ = new snd_pcm_hw_params_t();
70 CHECK(fake_pcm_hw_params_); 73 CHECK(fake_pcm_hw_params_);
71 *ptr = fake_pcm_hw_params_; 74 *ptr = fake_pcm_hw_params_;
72 return 0; 75 return 0;
73 } 76 }
74 77
78 int PcmStatusMalloc(snd_pcm_status_t** ptr) override {
79 fake_pcm_status_ = new snd_pcm_status_t();
80 CHECK(fake_pcm_status_);
81 *ptr = fake_pcm_status_;
82 return 0;
83 }
84
85 snd_pcm_state_t PcmStatusGetState(const snd_pcm_status_t* obj) override {
86 return state_;
87 }
88
75 ssize_t PcmFormatSize(snd_pcm_format_t format, size_t samples) override { 89 ssize_t PcmFormatSize(snd_pcm_format_t format, size_t samples) override {
76 return kBytesPerSample * samples; 90 return kBytesPerSample * samples;
77 }; 91 };
78 92
79 snd_pcm_state_t state() { return state_; } 93 snd_pcm_state_t state() { return state_; }
80 std::vector<uint8_t>& data() { return data_; } 94 std::vector<uint8_t>& data() { return data_; }
81 95
82 private: 96 private:
83 snd_pcm_state_t state_; 97 snd_pcm_state_t state_;
84 snd_pcm_t* fake_handle_; 98 snd_pcm_t* fake_handle_;
85 snd_pcm_hw_params_t* fake_pcm_hw_params_; 99 snd_pcm_hw_params_t* fake_pcm_hw_params_;
100 snd_pcm_status_t* fake_pcm_status_;
86 std::vector<uint8_t> data_; 101 std::vector<uint8_t> data_;
87 102
88 DISALLOW_COPY_AND_ASSIGN(FakeAlsaWrapper); 103 DISALLOW_COPY_AND_ASSIGN(FakeAlsaWrapper);
89 }; 104 };
90 105
91 using ::testing::_; 106 using ::testing::_;
92 using ::testing::Invoke; 107 using ::testing::Invoke;
93 108
94 MockAlsaWrapper::MockAlsaWrapper() : fake_(new FakeAlsaWrapper()) { 109 MockAlsaWrapper::MockAlsaWrapper() : fake_(new FakeAlsaWrapper()) {
95 // Delgate calls that need to be faked. 110 // Delgate calls that need to be faked.
96 ON_CALL(*this, PcmOpen(_, _, _, _)) 111 ON_CALL(*this, PcmOpen(_, _, _, _))
97 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmOpen)); 112 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmOpen));
98 ON_CALL(*this, PcmWritei(_, _, _)) 113 ON_CALL(*this, PcmWritei(_, _, _))
99 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmWritei)); 114 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmWritei));
100 ON_CALL(*this, PcmState(_)) 115 ON_CALL(*this, PcmState(_))
101 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmState)); 116 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmState));
102 ON_CALL(*this, PcmFormatSize(_, _)).WillByDefault( 117 ON_CALL(*this, PcmFormatSize(_, _)).WillByDefault(
103 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmFormatSize)); 118 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmFormatSize));
104 ON_CALL(*this, PcmPause(_, _)) 119 ON_CALL(*this, PcmPause(_, _))
105 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmPause)); 120 .WillByDefault(testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmPause));
106 ON_CALL(*this, PcmHwParamsCanPause(_)).WillByDefault(testing::Return(true)); 121 ON_CALL(*this, PcmHwParamsCanPause(_)).WillByDefault(testing::Return(true));
107 ON_CALL(*this, PcmHwParamsMalloc(_)).WillByDefault( 122 ON_CALL(*this, PcmHwParamsMalloc(_)).WillByDefault(
108 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmHwParamsMalloc)); 123 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmHwParamsMalloc));
124 ON_CALL(*this, PcmStatusMalloc(_))
125 .WillByDefault(
126 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmStatusMalloc));
127 ON_CALL(*this, PcmStatusGetState(_))
128 .WillByDefault(
129 testing::Invoke(fake_.get(), &FakeAlsaWrapper::PcmStatusGetState));
109 } 130 }
110 131
111 MockAlsaWrapper::~MockAlsaWrapper() { 132 MockAlsaWrapper::~MockAlsaWrapper() {
112 } 133 }
113 134
114 snd_pcm_state_t MockAlsaWrapper::state() { 135 snd_pcm_state_t MockAlsaWrapper::state() {
115 return fake_->state(); 136 return fake_->state();
116 } 137 }
117 138
118 const std::vector<uint8_t>& MockAlsaWrapper::data() { 139 const std::vector<uint8_t>& MockAlsaWrapper::data() {
119 return fake_->data(); 140 return fake_->data();
120 } 141 }
121 142
122 } // namespace media 143 } // namespace media
123 } // namespace chromecast 144 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/media/cma/backend/alsa/mock_alsa_wrapper.h ('k') | chromecast/media/cma/backend/alsa/stream_mixer_alsa.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698