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 |