OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/renderer/media/media_stream_video_capturer_source.h" | 5 #include "content/renderer/media/media_stream_video_capturer_source.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_helpers.h" | 10 #include "base/callback_helpers.h" |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 | 328 |
329 class FakeMediaStreamVideoSink : public MediaStreamVideoSink { | 329 class FakeMediaStreamVideoSink : public MediaStreamVideoSink { |
330 public: | 330 public: |
331 FakeMediaStreamVideoSink(base::TimeTicks* capture_time, | 331 FakeMediaStreamVideoSink(base::TimeTicks* capture_time, |
332 media::VideoFrameMetadata* metadata, | 332 media::VideoFrameMetadata* metadata, |
333 base::Closure got_frame_cb) | 333 base::Closure got_frame_cb) |
334 : capture_time_(capture_time), | 334 : capture_time_(capture_time), |
335 metadata_(metadata), | 335 metadata_(metadata), |
336 got_frame_cb_(got_frame_cb) {} | 336 got_frame_cb_(got_frame_cb) {} |
337 | 337 |
| 338 void ConnectToTrack(const blink::WebMediaStreamTrack& track) { |
| 339 MediaStreamVideoSink::ConnectToTrack( |
| 340 track, |
| 341 base::Bind(&FakeMediaStreamVideoSink::OnVideoFrame, |
| 342 base::Unretained(this))); |
| 343 } |
| 344 |
| 345 void DisconnectFromTrack() { |
| 346 MediaStreamVideoSink::DisconnectFromTrack(); |
| 347 } |
| 348 |
338 void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame, | 349 void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame, |
339 base::TimeTicks capture_time) { | 350 base::TimeTicks capture_time) { |
340 *capture_time_ = capture_time; | 351 *capture_time_ = capture_time; |
341 metadata_->Clear(); | 352 metadata_->Clear(); |
342 base::DictionaryValue tmp; | 353 base::DictionaryValue tmp; |
343 frame->metadata()->MergeInternalValuesInto(&tmp); | 354 frame->metadata()->MergeInternalValuesInto(&tmp); |
344 metadata_->MergeInternalValuesFrom(tmp); | 355 metadata_->MergeInternalValuesFrom(tmp); |
345 base::ResetAndReturn(&got_frame_cb_).Run(); | 356 base::ResetAndReturn(&got_frame_cb_).Run(); |
346 } | 357 } |
347 | 358 |
(...skipping 22 matching lines...) Expand all Loading... |
370 running_cb.Run(true); | 381 running_cb.Run(true); |
371 | 382 |
372 base::RunLoop run_loop; | 383 base::RunLoop run_loop; |
373 base::TimeTicks reference_capture_time = | 384 base::TimeTicks reference_capture_time = |
374 base::TimeTicks::FromInternalValue(60013); | 385 base::TimeTicks::FromInternalValue(60013); |
375 base::TimeTicks capture_time; | 386 base::TimeTicks capture_time; |
376 media::VideoFrameMetadata metadata; | 387 media::VideoFrameMetadata metadata; |
377 FakeMediaStreamVideoSink fake_sink( | 388 FakeMediaStreamVideoSink fake_sink( |
378 &capture_time, &metadata, | 389 &capture_time, &metadata, |
379 media::BindToCurrentLoop(run_loop.QuitClosure())); | 390 media::BindToCurrentLoop(run_loop.QuitClosure())); |
380 FakeMediaStreamVideoSink::AddToVideoTrack( | 391 fake_sink.ConnectToTrack(track); |
381 &fake_sink, base::Bind(&FakeMediaStreamVideoSink::OnVideoFrame, | |
382 base::Unretained(&fake_sink)), | |
383 track); | |
384 const scoped_refptr<media::VideoFrame> frame = | 392 const scoped_refptr<media::VideoFrame> frame = |
385 media::VideoFrame::CreateBlackFrame(gfx::Size(2, 2)); | 393 media::VideoFrame::CreateBlackFrame(gfx::Size(2, 2)); |
386 frame->metadata()->SetDouble(media::VideoFrameMetadata::FRAME_RATE, 30.0); | 394 frame->metadata()->SetDouble(media::VideoFrameMetadata::FRAME_RATE, 30.0); |
387 child_process_->io_task_runner()->PostTask( | 395 child_process_->io_task_runner()->PostTask( |
388 FROM_HERE, base::Bind(deliver_frame_cb, frame, reference_capture_time)); | 396 FROM_HERE, base::Bind(deliver_frame_cb, frame, reference_capture_time)); |
389 run_loop.Run(); | 397 run_loop.Run(); |
390 FakeMediaStreamVideoSink::RemoveFromVideoTrack(&fake_sink, track); | 398 fake_sink.DisconnectFromTrack(); |
391 EXPECT_EQ(reference_capture_time, capture_time); | 399 EXPECT_EQ(reference_capture_time, capture_time); |
392 double metadata_value; | 400 double metadata_value; |
393 EXPECT_TRUE(metadata.GetDouble(media::VideoFrameMetadata::FRAME_RATE, | 401 EXPECT_TRUE(metadata.GetDouble(media::VideoFrameMetadata::FRAME_RATE, |
394 &metadata_value)); | 402 &metadata_value)); |
395 EXPECT_EQ(30.0, metadata_value); | 403 EXPECT_EQ(30.0, metadata_value); |
396 } | 404 } |
397 | 405 |
398 } // namespace content | 406 } // namespace content |
OLD | NEW |