OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stdint.h> | 5 #include <stdint.h> |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 // Examples: | 165 // Examples: |
166 // A clip that is four frames long: "0 10 20 30" | 166 // A clip that is four frames long: "0 10 20 30" |
167 // A clip that has a decode error: "60 70 error" | 167 // A clip that has a decode error: "60 70 error" |
168 void QueueFrames(const std::string& str) { | 168 void QueueFrames(const std::string& str) { |
169 for (const std::string& token : | 169 for (const std::string& token : |
170 base::SplitString(str, " ", base::TRIM_WHITESPACE, | 170 base::SplitString(str, " ", base::TRIM_WHITESPACE, |
171 base::SPLIT_WANT_ALL)) { | 171 base::SPLIT_WANT_ALL)) { |
172 if (token == "abort") { | 172 if (token == "abort") { |
173 scoped_refptr<VideoFrame> null_frame; | 173 scoped_refptr<VideoFrame> null_frame; |
174 decode_results_.push_back( | 174 decode_results_.push_back( |
175 std::make_pair(VideoDecoder::kAborted, null_frame)); | 175 std::make_pair(DecodeStatus::ABORTED, null_frame)); |
176 continue; | 176 continue; |
177 } | 177 } |
178 | 178 |
179 if (token == "error") { | 179 if (token == "error") { |
180 scoped_refptr<VideoFrame> null_frame; | 180 scoped_refptr<VideoFrame> null_frame; |
181 decode_results_.push_back( | 181 decode_results_.push_back( |
182 std::make_pair(VideoDecoder::kDecodeError, null_frame)); | 182 std::make_pair(DecodeStatus::DECODE_ERROR, null_frame)); |
183 continue; | 183 continue; |
184 } | 184 } |
185 | 185 |
186 int timestamp_in_ms = 0; | 186 int timestamp_in_ms = 0; |
187 if (base::StringToInt(token, ×tamp_in_ms)) { | 187 if (base::StringToInt(token, ×tamp_in_ms)) { |
188 gfx::Size natural_size = TestVideoConfig::NormalCodedSize(); | 188 gfx::Size natural_size = TestVideoConfig::NormalCodedSize(); |
189 scoped_refptr<VideoFrame> frame = VideoFrame::CreateFrame( | 189 scoped_refptr<VideoFrame> frame = VideoFrame::CreateFrame( |
190 PIXEL_FORMAT_YV12, natural_size, gfx::Rect(natural_size), | 190 PIXEL_FORMAT_YV12, natural_size, gfx::Rect(natural_size), |
191 natural_size, base::TimeDelta::FromMilliseconds(timestamp_in_ms)); | 191 natural_size, base::TimeDelta::FromMilliseconds(timestamp_in_ms)); |
192 decode_results_.push_back(std::make_pair(VideoDecoder::kOk, frame)); | 192 decode_results_.push_back(std::make_pair(DecodeStatus::OK, frame)); |
193 continue; | 193 continue; |
194 } | 194 } |
195 | 195 |
196 CHECK(false) << "Unrecognized decoder buffer token: " << token; | 196 CHECK(false) << "Unrecognized decoder buffer token: " << token; |
197 } | 197 } |
198 } | 198 } |
199 | 199 |
200 bool IsReadPending() { | 200 bool IsReadPending() { |
201 return !decode_cb_.is_null(); | 201 return !decode_cb_.is_null(); |
202 } | 202 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
244 DCHECK(!decode_cb_.is_null()); | 244 DCHECK(!decode_cb_.is_null()); |
245 | 245 |
246 // Return EOS buffer to trigger EOS frame. | 246 // Return EOS buffer to trigger EOS frame. |
247 EXPECT_CALL(demuxer_stream_, Read(_)) | 247 EXPECT_CALL(demuxer_stream_, Read(_)) |
248 .WillOnce(RunCallback<0>(DemuxerStream::kOk, | 248 .WillOnce(RunCallback<0>(DemuxerStream::kOk, |
249 DecoderBuffer::CreateEOSBuffer())); | 249 DecoderBuffer::CreateEOSBuffer())); |
250 | 250 |
251 // Satify pending |decode_cb_| to trigger a new DemuxerStream::Read(). | 251 // Satify pending |decode_cb_| to trigger a new DemuxerStream::Read(). |
252 message_loop_.PostTask( | 252 message_loop_.PostTask( |
253 FROM_HERE, | 253 FROM_HERE, |
254 base::Bind(base::ResetAndReturn(&decode_cb_), VideoDecoder::kOk)); | 254 base::Bind(base::ResetAndReturn(&decode_cb_), DecodeStatus::OK)); |
255 | 255 |
256 WaitForPendingRead(); | 256 WaitForPendingRead(); |
257 | 257 |
258 message_loop_.PostTask( | 258 message_loop_.PostTask( |
259 FROM_HERE, | 259 FROM_HERE, |
260 base::Bind(base::ResetAndReturn(&decode_cb_), VideoDecoder::kOk)); | 260 base::Bind(base::ResetAndReturn(&decode_cb_), DecodeStatus::OK)); |
261 } | 261 } |
262 | 262 |
263 void AdvanceWallclockTimeInMs(int time_ms) { | 263 void AdvanceWallclockTimeInMs(int time_ms) { |
264 DCHECK_EQ(&message_loop_, base::MessageLoop::current()); | 264 DCHECK_EQ(&message_loop_, base::MessageLoop::current()); |
265 base::AutoLock l(lock_); | 265 base::AutoLock l(lock_); |
266 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(time_ms)); | 266 tick_clock_->Advance(base::TimeDelta::FromMilliseconds(time_ms)); |
267 } | 267 } |
268 | 268 |
269 void AdvanceTimeInMs(int time_ms) { | 269 void AdvanceTimeInMs(int time_ms) { |
270 DCHECK_EQ(&message_loop_, base::MessageLoop::current()); | 270 DCHECK_EQ(&message_loop_, base::MessageLoop::current()); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 VideoDecoder::OutputCB output_cb_; | 345 VideoDecoder::OutputCB output_cb_; |
346 VideoDecoder::DecodeCB decode_cb_; | 346 VideoDecoder::DecodeCB decode_cb_; |
347 base::TimeDelta next_frame_timestamp_; | 347 base::TimeDelta next_frame_timestamp_; |
348 | 348 |
349 WaitableMessageLoopEvent error_event_; | 349 WaitableMessageLoopEvent error_event_; |
350 WaitableMessageLoopEvent ended_event_; | 350 WaitableMessageLoopEvent ended_event_; |
351 | 351 |
352 // Run during DecodeRequested() to unblock WaitForPendingRead(). | 352 // Run during DecodeRequested() to unblock WaitForPendingRead(). |
353 base::Closure wait_for_pending_decode_cb_; | 353 base::Closure wait_for_pending_decode_cb_; |
354 | 354 |
355 std::deque<std::pair< | 355 std::deque<std::pair<DecodeStatus, scoped_refptr<VideoFrame>>> |
356 VideoDecoder::Status, scoped_refptr<VideoFrame> > > decode_results_; | 356 decode_results_; |
357 | 357 |
358 DISALLOW_COPY_AND_ASSIGN(VideoRendererImplTest); | 358 DISALLOW_COPY_AND_ASSIGN(VideoRendererImplTest); |
359 }; | 359 }; |
360 | 360 |
361 TEST_F(VideoRendererImplTest, DoNothing) { | 361 TEST_F(VideoRendererImplTest, DoNothing) { |
362 // Test that creation and deletion doesn't depend on calls to Initialize() | 362 // Test that creation and deletion doesn't depend on calls to Initialize() |
363 // and/or Destroy(). | 363 // and/or Destroy(). |
364 } | 364 } |
365 | 365 |
366 TEST_F(VideoRendererImplTest, DestroyWithoutInitialize) { | 366 TEST_F(VideoRendererImplTest, DestroyWithoutInitialize) { |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
802 QueueFrames("0 10 20 30"); | 802 QueueFrames("0 10 20 30"); |
803 StartPlayingFrom(0); | 803 StartPlayingFrom(0); |
804 Flush(); | 804 Flush(); |
805 ASSERT_EQ(1u, frame_ready_cbs_.size()); | 805 ASSERT_EQ(1u, frame_ready_cbs_.size()); |
806 // This frame will be discarded. | 806 // This frame will be discarded. |
807 frame_ready_cbs_.front().Run(); | 807 frame_ready_cbs_.front().Run(); |
808 Destroy(); | 808 Destroy(); |
809 } | 809 } |
810 | 810 |
811 } // namespace media | 811 } // namespace media |
OLD | NEW |