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

Side by Side Diff: media/renderers/audio_renderer_impl_unittest.cc

Issue 1146913008: Revert of media: Simplify {Audio|Video}Decoder initialization callback. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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 | « media/filters/vpx_video_decoder.cc ('k') | media/renderers/video_renderer_impl_unittest.cc » ('j') | no next file with comments »
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 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/callback_helpers.h" 6 #include "base/callback_helpers.h"
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "media/base/audio_buffer_converter.h" 10 #include "media/base/audio_buffer_converter.h"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 hardware_config_, 99 hardware_config_,
100 new MediaLog())); 100 new MediaLog()));
101 } 101 }
102 102
103 virtual ~AudioRendererImplTest() { 103 virtual ~AudioRendererImplTest() {
104 SCOPED_TRACE("~AudioRendererImplTest()"); 104 SCOPED_TRACE("~AudioRendererImplTest()");
105 } 105 }
106 106
107 void ExpectUnsupportedAudioDecoder() { 107 void ExpectUnsupportedAudioDecoder() {
108 EXPECT_CALL(*decoder_, Initialize(_, _, _)) 108 EXPECT_CALL(*decoder_, Initialize(_, _, _))
109 .WillOnce(DoAll(SaveArg<2>(&output_cb_), RunCallback<1>(false))); 109 .WillOnce(DoAll(SaveArg<2>(&output_cb_),
110 RunCallback<1>(DECODER_ERROR_NOT_SUPPORTED)));
110 } 111 }
111 112
112 MOCK_METHOD1(OnStatistics, void(const PipelineStatistics&)); 113 MOCK_METHOD1(OnStatistics, void(const PipelineStatistics&));
113 MOCK_METHOD1(OnBufferingStateChange, void(BufferingState)); 114 MOCK_METHOD1(OnBufferingStateChange, void(BufferingState));
114 MOCK_METHOD1(OnError, void(PipelineStatus)); 115 MOCK_METHOD1(OnError, void(PipelineStatus));
115 MOCK_METHOD0(OnWaitingForDecryptionKey, void(void)); 116 MOCK_METHOD0(OnWaitingForDecryptionKey, void(void));
116 117
117 void InitializeRenderer(const PipelineStatusCB& pipeline_status_cb) { 118 void InitializeRenderer(const PipelineStatusCB& pipeline_status_cb) {
118 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0); 119 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0);
119 renderer_->Initialize( 120 renderer_->Initialize(
120 &demuxer_stream_, pipeline_status_cb, SetDecryptorReadyCB(), 121 &demuxer_stream_, pipeline_status_cb, SetDecryptorReadyCB(),
121 base::Bind(&AudioRendererImplTest::OnStatistics, 122 base::Bind(&AudioRendererImplTest::OnStatistics,
122 base::Unretained(this)), 123 base::Unretained(this)),
123 base::Bind(&AudioRendererImplTest::OnBufferingStateChange, 124 base::Bind(&AudioRendererImplTest::OnBufferingStateChange,
124 base::Unretained(this)), 125 base::Unretained(this)),
125 base::Bind(&AudioRendererImplTest::OnEnded, base::Unretained(this)), 126 base::Bind(&AudioRendererImplTest::OnEnded, base::Unretained(this)),
126 base::Bind(&AudioRendererImplTest::OnError, base::Unretained(this)), 127 base::Bind(&AudioRendererImplTest::OnError, base::Unretained(this)),
127 base::Bind(&AudioRendererImplTest::OnWaitingForDecryptionKey, 128 base::Bind(&AudioRendererImplTest::OnWaitingForDecryptionKey,
128 base::Unretained(this))); 129 base::Unretained(this)));
129 } 130 }
130 131
131 void Initialize() { 132 void Initialize() {
132 EXPECT_CALL(*decoder_, Initialize(_, _, _)) 133 EXPECT_CALL(*decoder_, Initialize(_, _, _))
133 .WillOnce(DoAll(SaveArg<2>(&output_cb_), RunCallback<1>(true))); 134 .WillOnce(DoAll(SaveArg<2>(&output_cb_),
135 RunCallback<1>(PIPELINE_OK)));
134 InitializeWithStatus(PIPELINE_OK); 136 InitializeWithStatus(PIPELINE_OK);
135 137
136 next_timestamp_.reset(new AudioTimestampHelper(kInputSamplesPerSecond)); 138 next_timestamp_.reset(new AudioTimestampHelper(kInputSamplesPerSecond));
137 } 139 }
138 140
139 void InitializeWithStatus(PipelineStatus expected) { 141 void InitializeWithStatus(PipelineStatus expected) {
140 SCOPED_TRACE(base::StringPrintf("InitializeWithStatus(%d)", expected)); 142 SCOPED_TRACE(base::StringPrintf("InitializeWithStatus(%d)", expected));
141 143
142 WaitableMessageLoopEvent event; 144 WaitableMessageLoopEvent event;
143 InitializeRenderer(event.GetPipelineStatusCB()); 145 InitializeRenderer(event.GetPipelineStatusCB());
144 event.RunAndWaitForStatus(expected); 146 event.RunAndWaitForStatus(expected);
145 147
146 // We should have no reads. 148 // We should have no reads.
147 EXPECT_TRUE(decode_cb_.is_null()); 149 EXPECT_TRUE(decode_cb_.is_null());
148 } 150 }
149 151
150 void InitializeAndDestroy() { 152 void InitializeAndDestroy() {
151 EXPECT_CALL(*decoder_, Initialize(_, _, _)).WillOnce(RunCallback<1>(true)); 153 EXPECT_CALL(*decoder_, Initialize(_, _, _))
154 .WillOnce(RunCallback<1>(PIPELINE_OK));
152 155
153 WaitableMessageLoopEvent event; 156 WaitableMessageLoopEvent event;
154 InitializeRenderer(event.GetPipelineStatusCB()); 157 InitializeRenderer(event.GetPipelineStatusCB());
155 158
156 // Destroy the |renderer_| before we let the MessageLoop run, this simulates 159 // Destroy the |renderer_| before we let the MessageLoop run, this simulates
157 // an interleaving in which we end up destroying the |renderer_| while the 160 // an interleaving in which we end up destroying the |renderer_| while the
158 // OnDecoderSelected callback is in flight. 161 // OnDecoderSelected callback is in flight.
159 renderer_.reset(); 162 renderer_.reset();
160 event.RunAndWaitForStatus(PIPELINE_ERROR_ABORT); 163 event.RunAndWaitForStatus(PIPELINE_ERROR_ABORT);
161 } 164 }
162 165
163 void InitializeAndDestroyDuringDecoderInit() { 166 void InitializeAndDestroyDuringDecoderInit() {
164 EXPECT_CALL(*decoder_, Initialize(_, _, _)) 167 EXPECT_CALL(*decoder_, Initialize(_, _, _))
165 .WillOnce(EnterPendingDecoderInitStateAction(this)); 168 .WillOnce(EnterPendingDecoderInitStateAction(this));
166 169
167 WaitableMessageLoopEvent event; 170 WaitableMessageLoopEvent event;
168 InitializeRenderer(event.GetPipelineStatusCB()); 171 InitializeRenderer(event.GetPipelineStatusCB());
169 base::RunLoop().RunUntilIdle(); 172 base::RunLoop().RunUntilIdle();
170 DCHECK(!init_decoder_cb_.is_null()); 173 DCHECK(!init_decoder_cb_.is_null());
171 174
172 renderer_.reset(); 175 renderer_.reset();
173 event.RunAndWaitForStatus(PIPELINE_ERROR_ABORT); 176 event.RunAndWaitForStatus(PIPELINE_ERROR_ABORT);
174 } 177 }
175 178
176 void EnterPendingDecoderInitState(const AudioDecoder::InitCB& cb) { 179 void EnterPendingDecoderInitState(PipelineStatusCB cb) {
177 init_decoder_cb_ = cb; 180 init_decoder_cb_ = cb;
178 } 181 }
179 182
180 void FlushDuringPendingRead() { 183 void FlushDuringPendingRead() {
181 SCOPED_TRACE("FlushDuringPendingRead()"); 184 SCOPED_TRACE("FlushDuringPendingRead()");
182 WaitableMessageLoopEvent flush_event; 185 WaitableMessageLoopEvent flush_event;
183 renderer_->Flush(flush_event.GetClosure()); 186 renderer_->Flush(flush_event.GetClosure());
184 SatisfyPendingRead(InputFrames(256)); 187 SatisfyPendingRead(InputFrames(256));
185 flush_event.RunAndWait(); 188 flush_event.RunAndWait();
186 189
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 391
389 // Used for satisfying reads. 392 // Used for satisfying reads.
390 AudioDecoder::OutputCB output_cb_; 393 AudioDecoder::OutputCB output_cb_;
391 AudioDecoder::DecodeCB decode_cb_; 394 AudioDecoder::DecodeCB decode_cb_;
392 base::Closure reset_cb_; 395 base::Closure reset_cb_;
393 scoped_ptr<AudioTimestampHelper> next_timestamp_; 396 scoped_ptr<AudioTimestampHelper> next_timestamp_;
394 397
395 // Run during DecodeDecoder() to unblock WaitForPendingRead(). 398 // Run during DecodeDecoder() to unblock WaitForPendingRead().
396 base::Closure wait_for_pending_decode_cb_; 399 base::Closure wait_for_pending_decode_cb_;
397 400
398 AudioDecoder::InitCB init_decoder_cb_; 401 PipelineStatusCB init_decoder_cb_;
399 bool ended_; 402 bool ended_;
400 403
401 DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest); 404 DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest);
402 }; 405 };
403 406
404 TEST_F(AudioRendererImplTest, Initialize_Successful) { 407 TEST_F(AudioRendererImplTest, Initialize_Successful) {
405 Initialize(); 408 Initialize();
406 } 409 }
407 410
408 TEST_F(AudioRendererImplTest, Initialize_DecoderInitFailure) { 411 TEST_F(AudioRendererImplTest, Initialize_DecoderInitFailure) {
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 // Start rendering with zero playback rate. Sink should be paused until 746 // Start rendering with zero playback rate. Sink should be paused until
744 // non-zero rate is set. 747 // non-zero rate is set.
745 renderer_->SetPlaybackRate(0.0); 748 renderer_->SetPlaybackRate(0.0);
746 renderer_->StartTicking(); 749 renderer_->StartTicking();
747 EXPECT_EQ(FakeAudioRendererSink::kPaused, sink_->state()); 750 EXPECT_EQ(FakeAudioRendererSink::kPaused, sink_->state());
748 renderer_->SetPlaybackRate(1.0); 751 renderer_->SetPlaybackRate(1.0);
749 EXPECT_EQ(FakeAudioRendererSink::kPlaying, sink_->state()); 752 EXPECT_EQ(FakeAudioRendererSink::kPlaying, sink_->state());
750 } 753 }
751 754
752 } // namespace media 755 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/vpx_video_decoder.cc ('k') | media/renderers/video_renderer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698