Chromium Code Reviews| 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 <string> | 5 #include <string> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 191 EXPECT_EQ(expected_height1, sink1.frame_size().height()); | 191 EXPECT_EQ(expected_height1, sink1.frame_size().height()); |
| 192 | 192 |
| 193 EXPECT_EQ(1, sink2.number_of_frames()); | 193 EXPECT_EQ(1, sink2.number_of_frames()); |
| 194 EXPECT_EQ(expected_width2, sink2.frame_size().width()); | 194 EXPECT_EQ(expected_width2, sink2.frame_size().width()); |
| 195 EXPECT_EQ(expected_height2, sink2.frame_size().height()); | 195 EXPECT_EQ(expected_height2, sink2.frame_size().height()); |
| 196 | 196 |
| 197 MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1); | 197 MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1); |
| 198 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2); | 198 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2); |
| 199 } | 199 } |
| 200 | 200 |
| 201 void SetSourceSupporedFormats(const media::VideoCaptureFormats& formats) { | |
|
mcasas
2014/08/27 12:52:39
s/Suppored/Supported/
| |
| 202 mock_source_->SetSupportedFormats(formats); | |
| 203 } | |
| 204 | |
|
mcasas
2014/08/27 12:52:39
Remove extra empty line.
| |
| 205 | |
| 201 void ReleaseTrackAndSourceOnAddTrackCallback( | 206 void ReleaseTrackAndSourceOnAddTrackCallback( |
| 202 const blink::WebMediaStreamTrack& track_to_release) { | 207 const blink::WebMediaStreamTrack& track_to_release) { |
| 203 track_to_release_ = track_to_release; | 208 track_to_release_ = track_to_release; |
| 204 } | 209 } |
| 205 | 210 |
| 206 private: | 211 private: |
| 207 void OnConstraintsApplied(MediaStreamSource* source, | 212 void OnConstraintsApplied(MediaStreamSource* source, |
| 208 MediaStreamRequestResult result, | 213 MediaStreamRequestResult result, |
| 209 const blink::WebString& result_name) { | 214 const blink::WebString& result_name) { |
| 210 ASSERT_EQ(source, webkit_source_.extraData()); | 215 ASSERT_EQ(source, webkit_source_.extraData()); |
| (...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 731 EXPECT_EQ(0, sink.number_of_frames()); | 736 EXPECT_EQ(0, sink.number_of_frames()); |
| 732 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink); | 737 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink); |
| 733 EXPECT_EQ(1, sink.number_of_frames()); | 738 EXPECT_EQ(1, sink.number_of_frames()); |
| 734 // Expect the delivered frame to be passed unchanged since its smaller than | 739 // Expect the delivered frame to be passed unchanged since its smaller than |
| 735 // max requested. | 740 // max requested. |
| 736 EXPECT_EQ(320, sink.frame_size().width()); | 741 EXPECT_EQ(320, sink.frame_size().width()); |
| 737 EXPECT_EQ(240, sink.frame_size().height()); | 742 EXPECT_EQ(240, sink.frame_size().height()); |
| 738 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); | 743 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); |
| 739 } | 744 } |
| 740 | 745 |
| 741 // Test that a source producing no frames calls back the MSVCS to tell so, and | 746 // Test that a source producing no frames change the source readyState to muted. |
| 742 // this in turn tells the Track attached. Then start passing frames, and check | |
| 743 // that in a reasonable time frame the muted state turns to false. | 747 // that in a reasonable time frame the muted state turns to false. |
| 744 TEST_F(MediaStreamVideoSourceTest, MutedSource) { | 748 TEST_F(MediaStreamVideoSourceTest, MutedSource) { |
| 749 // Setup the source for support a frame rate of 2000fps in order to test | |
| 750 // the muted event faster. This is since the frame monitoring uses | |
| 751 // PostDelayedTask that is dependent on the source frame rate. | |
| 752 media::VideoCaptureFormats formats; | |
| 753 formats.push_back(media::VideoCaptureFormat( | |
| 754 gfx::Size(640, 480), 2000, media::PIXEL_FORMAT_I420)); | |
| 755 SetSourceSupporedFormats(formats); | |
| 756 | |
| 745 MockMediaConstraintFactory factory; | 757 MockMediaConstraintFactory factory; |
| 746 blink::WebMediaStreamTrack track = | 758 blink::WebMediaStreamTrack track = |
| 747 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), | 759 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), |
| 748 640, 480, 30); | 760 640, 480, 2000); |
| 749 | |
| 750 MockMediaStreamVideoSink sink; | 761 MockMediaStreamVideoSink sink; |
| 751 MediaStreamVideoSink::AddToVideoTrack(&sink, sink.GetDeliverFrameCB(), track); | 762 MediaStreamVideoSink::AddToVideoTrack(&sink, sink.GetDeliverFrameCB(), track); |
| 752 EXPECT_EQ(MediaStreamTrack::GetTrack(track)->GetMutedState(), false); | 763 EXPECT_EQ(track.source().readyState(), |
| 764 blink::WebMediaStreamSource::ReadyStateLive); | |
| 753 | 765 |
| 754 base::RunLoop run_loop; | 766 base::RunLoop run_loop; |
| 755 base::Closure quit_closure = run_loop.QuitClosure(); | 767 base::Closure quit_closure = run_loop.QuitClosure(); |
| 756 bool muted_state = false; | 768 bool muted_state = false; |
| 757 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) | 769 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) |
| 758 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure))); | 770 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure))); |
| 759 run_loop.Run(); | 771 run_loop.Run(); |
| 760 EXPECT_EQ(muted_state, true); | 772 EXPECT_EQ(muted_state, true); |
| 761 // TODO(mcasas): When added, check |track|'s (WebMediaStreamTrack) Muted | |
| 762 // attribute, should be true. In the meantime, check the MediaStreamTrack's. | |
| 763 EXPECT_EQ(MediaStreamTrack::GetTrack(track)->GetMutedState(), true); | |
| 764 | 773 |
| 774 EXPECT_EQ(track.source().readyState(), | |
| 775 blink::WebMediaStreamSource::ReadyStateMuted); | |
| 776 | |
| 777 base::RunLoop run_loop2; | |
| 778 base::Closure quit_closure2 = run_loop2.QuitClosure(); | |
| 765 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) | 779 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) |
| 766 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure))); | 780 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure2))); |
| 767 // Mock frame delivery happens asynchronously, not according to the configured | 781 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink); |
| 768 // frame rate, potentially many frames can pass before the muted state is | 782 run_loop2.Run(); |
| 769 // flipped. |kMaxFrameCount| is used as a reasonable high bound of this value. | 783 |
| 770 const int kMaxFrameCount = 10000; | |
| 771 int i = 0; | |
| 772 while (muted_state != false || ++i > kMaxFrameCount) | |
| 773 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink); | |
| 774 EXPECT_EQ(muted_state, false); | 784 EXPECT_EQ(muted_state, false); |
| 775 EXPECT_LT(i, kMaxFrameCount); | 785 EXPECT_EQ(track.source().readyState(), |
| 776 EXPECT_EQ(MediaStreamTrack::GetTrack(track)->GetMutedState(), false); | 786 blink::WebMediaStreamSource::ReadyStateLive); |
| 777 | 787 |
| 778 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); | 788 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); |
| 779 } | 789 } |
| 780 | 790 |
| 781 // Test that a source producing no frames calls back the MSVCS to tell so, and | |
| 782 // this in turn tells all the Tracks attached. | |
| 783 TEST_F(MediaStreamVideoSourceTest, MutedSourceWithTwoTracks) { | |
| 784 MockMediaConstraintFactory factory1; | |
| 785 blink::WebMediaStreamTrack track1 = | |
| 786 CreateTrackAndStartSource(factory1.CreateWebMediaConstraints(), | |
| 787 MediaStreamVideoSource::kDefaultWidth, | |
| 788 MediaStreamVideoSource::kDefaultHeight, | |
| 789 30); | |
| 790 | |
| 791 MockMediaConstraintFactory factory2; | |
| 792 factory2.AddMandatory(MediaStreamVideoSource::kMaxFrameRate, 15); | |
| 793 blink::WebMediaStreamTrack track2 = CreateTrack( | |
| 794 "123", factory2.CreateWebMediaConstraints()); | |
| 795 EXPECT_EQ(0, NumberOfFailedConstraintsCallbacks()); | |
| 796 | |
| 797 MockMediaStreamVideoSink sink1; | |
| 798 MediaStreamVideoSink::AddToVideoTrack(&sink1, sink1.GetDeliverFrameCB(), | |
| 799 track1); | |
| 800 EXPECT_EQ(MediaStreamTrack::GetTrack(track1)->GetMutedState(), false); | |
| 801 | |
| 802 MockMediaStreamVideoSink sink2; | |
| 803 MediaStreamVideoSink::AddToVideoTrack(&sink2, sink2.GetDeliverFrameCB(), | |
| 804 track2); | |
| 805 EXPECT_EQ(MediaStreamTrack::GetTrack(track2)->GetMutedState(), false); | |
| 806 | |
| 807 base::RunLoop run_loop; | |
| 808 base::Closure quit_closure = run_loop.QuitClosure(); | |
| 809 bool muted_state = false; | |
| 810 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) | |
| 811 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure))); | |
| 812 run_loop.Run(); | |
| 813 EXPECT_EQ(muted_state, true); | |
| 814 | |
| 815 // TODO(mcasas): When added, check |track|'s (WebMediaStreamTrack) Muted | |
| 816 // attribute, should be true. In the meantime, check the MediaStreamTrack's. | |
| 817 EXPECT_EQ(MediaStreamTrack::GetTrack(track1)->GetMutedState(), true); | |
| 818 EXPECT_EQ(MediaStreamTrack::GetTrack(track2)->GetMutedState(), true); | |
| 819 | |
| 820 MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1); | |
| 821 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2); | |
| 822 } | |
| 823 | |
| 824 } // namespace content | 791 } // namespace content |
| OLD | NEW |