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

Side by Side Diff: content/renderer/media/media_stream_video_source_unittest.cc

Issue 509873002: Refactor MediaStreamTrack video onmute event. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed nits. Created 6 years, 3 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
OLDNEW
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
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 SetSourceSupportedFormats(const media::VideoCaptureFormats& formats) {
202 mock_source_->SetSupportedFormats(formats);
203 }
204
201 void ReleaseTrackAndSourceOnAddTrackCallback( 205 void ReleaseTrackAndSourceOnAddTrackCallback(
202 const blink::WebMediaStreamTrack& track_to_release) { 206 const blink::WebMediaStreamTrack& track_to_release) {
203 track_to_release_ = track_to_release; 207 track_to_release_ = track_to_release;
204 } 208 }
205 209
206 private: 210 private:
207 void OnConstraintsApplied(MediaStreamSource* source, 211 void OnConstraintsApplied(MediaStreamSource* source,
208 MediaStreamRequestResult result, 212 MediaStreamRequestResult result,
209 const blink::WebString& result_name) { 213 const blink::WebString& result_name) {
210 ASSERT_EQ(source, webkit_source_.extraData()); 214 ASSERT_EQ(source, webkit_source_.extraData());
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 EXPECT_EQ(0, sink.number_of_frames()); 735 EXPECT_EQ(0, sink.number_of_frames());
732 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink); 736 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink);
733 EXPECT_EQ(1, sink.number_of_frames()); 737 EXPECT_EQ(1, sink.number_of_frames());
734 // Expect the delivered frame to be passed unchanged since its smaller than 738 // Expect the delivered frame to be passed unchanged since its smaller than
735 // max requested. 739 // max requested.
736 EXPECT_EQ(320, sink.frame_size().width()); 740 EXPECT_EQ(320, sink.frame_size().width());
737 EXPECT_EQ(240, sink.frame_size().height()); 741 EXPECT_EQ(240, sink.frame_size().height());
738 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); 742 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
739 } 743 }
740 744
741 // Test that a source producing no frames calls back the MSVCS to tell so, and 745 // 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. 746 // that in a reasonable time frame the muted state turns to false.
744 TEST_F(MediaStreamVideoSourceTest, MutedSource) { 747 TEST_F(MediaStreamVideoSourceTest, MutedSource) {
748 // Setup the source for support a frame rate of 2000fps in order to test
749 // the muted event faster. This is since the frame monitoring uses
750 // PostDelayedTask that is dependent on the source frame rate.
751 media::VideoCaptureFormats formats;
752 formats.push_back(media::VideoCaptureFormat(
753 gfx::Size(640, 480), 2000, media::PIXEL_FORMAT_I420));
754 SetSourceSupportedFormats(formats);
755
745 MockMediaConstraintFactory factory; 756 MockMediaConstraintFactory factory;
746 blink::WebMediaStreamTrack track = 757 blink::WebMediaStreamTrack track =
747 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 758 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(),
748 640, 480, 30); 759 640, 480, 2000);
749
750 MockMediaStreamVideoSink sink; 760 MockMediaStreamVideoSink sink;
751 MediaStreamVideoSink::AddToVideoTrack(&sink, sink.GetDeliverFrameCB(), track); 761 MediaStreamVideoSink::AddToVideoTrack(&sink, sink.GetDeliverFrameCB(), track);
752 EXPECT_EQ(MediaStreamTrack::GetTrack(track)->GetMutedState(), false); 762 EXPECT_EQ(track.source().readyState(),
763 blink::WebMediaStreamSource::ReadyStateLive);
753 764
754 base::RunLoop run_loop; 765 base::RunLoop run_loop;
755 base::Closure quit_closure = run_loop.QuitClosure(); 766 base::Closure quit_closure = run_loop.QuitClosure();
756 bool muted_state = false; 767 bool muted_state = false;
757 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) 768 EXPECT_CALL(*mock_source(), DoSetMutedState(_))
758 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure))); 769 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
759 run_loop.Run(); 770 run_loop.Run();
760 EXPECT_EQ(muted_state, true); 771 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 772
773 EXPECT_EQ(track.source().readyState(),
774 blink::WebMediaStreamSource::ReadyStateMuted);
775
776 base::RunLoop run_loop2;
777 base::Closure quit_closure2 = run_loop2.QuitClosure();
765 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) 778 EXPECT_CALL(*mock_source(), DoSetMutedState(_))
766 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure))); 779 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure2)));
767 // Mock frame delivery happens asynchronously, not according to the configured 780 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
768 // frame rate, potentially many frames can pass before the muted state is 781 run_loop2.Run();
769 // flipped. |kMaxFrameCount| is used as a reasonable high bound of this value. 782
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); 783 EXPECT_EQ(muted_state, false);
775 EXPECT_LT(i, kMaxFrameCount); 784 EXPECT_EQ(track.source().readyState(),
776 EXPECT_EQ(MediaStreamTrack::GetTrack(track)->GetMutedState(), false); 785 blink::WebMediaStreamSource::ReadyStateLive);
777 786
778 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); 787 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
779 } 788 }
780 789
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 790 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_video_source.cc ('k') | content/renderer/media/media_stream_video_track.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698