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

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

Issue 366243003: VideoTrackAdapter: Add passing frames monitor, notify MSVCS -> MSVTrack(s) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Correct handling of 0.0fps frame rate sources Created 6 years, 5 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 | Annotate | Revision Log
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"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #include "content/child/child_process.h" 13 #include "content/child/child_process.h"
14 #include "content/renderer/media/media_stream_video_source.h" 14 #include "content/renderer/media/media_stream_video_source.h"
15 #include "content/renderer/media/media_stream_video_track.h" 15 #include "content/renderer/media/media_stream_video_track.h"
16 #include "content/renderer/media/mock_media_constraint_factory.h" 16 #include "content/renderer/media/mock_media_constraint_factory.h"
17 #include "content/renderer/media/mock_media_stream_video_sink.h" 17 #include "content/renderer/media/mock_media_stream_video_sink.h"
18 #include "content/renderer/media/mock_media_stream_video_source.h" 18 #include "content/renderer/media/mock_media_stream_video_source.h"
19 #include "media/base/video_frame.h" 19 #include "media/base/video_frame.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 21
22 using ::testing::_;
23 using ::testing::DoAll;
24 using ::testing::SaveArg;
25
22 namespace content { 26 namespace content {
23 27
24 ACTION_P(RunClosure, closure) { 28 ACTION_P(RunClosure, closure) {
25 closure.Run(); 29 closure.Run();
26 } 30 }
27 31
28 class MediaStreamVideoSourceTest 32 class MediaStreamVideoSourceTest
29 : public ::testing::Test { 33 : public ::testing::Test {
30 public: 34 public:
31 MediaStreamVideoSourceTest() 35 MediaStreamVideoSourceTest()
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 EXPECT_EQ(0, sink.number_of_frames()); 717 EXPECT_EQ(0, sink.number_of_frames());
714 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink); 718 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink);
715 EXPECT_EQ(1, sink.number_of_frames()); 719 EXPECT_EQ(1, sink.number_of_frames());
716 // Expect the delivered frame to be passed unchanged since its smaller than 720 // Expect the delivered frame to be passed unchanged since its smaller than
717 // max requested. 721 // max requested.
718 EXPECT_EQ(320, sink.frame_size().width()); 722 EXPECT_EQ(320, sink.frame_size().width());
719 EXPECT_EQ(240, sink.frame_size().height()); 723 EXPECT_EQ(240, sink.frame_size().height());
720 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); 724 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
721 } 725 }
722 726
727 // Test that a source producing no frames calls back the MSVCS to tell so, and
728 // this in turn tells the Track attached. Then start passing frames, and check
729 // that in a reasonable time frame the muted state turns to false.
730 TEST_F(MediaStreamVideoSourceTest, MutedSource) {
731 MockMediaConstraintFactory factory;
732 blink::WebMediaStreamTrack track =
733 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(),
734 640, 480, 30);
735
736 MockMediaStreamVideoSink sink;
737 MediaStreamVideoSink::AddToVideoTrack(&sink, sink.GetDeliverFrameCB(), track);
738 EXPECT_EQ(MediaStreamTrack::GetTrack(track)->GetMutedState(), false);
739
740 base::RunLoop run_loop;
741 base::Closure quit_closure = run_loop.QuitClosure();
742 bool muted_state = false;
743 EXPECT_CALL(*mock_source(), DoSetMutedState(_))
744 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
745 run_loop.Run();
746 EXPECT_EQ(muted_state, true);
747 // TODO(mcasas): When added, check |track|'s (WebMediaStreamTrack) Muted
748 // attribute, should be true. In the meantime, check the MediaStreamTrack's.
749 EXPECT_EQ(MediaStreamTrack::GetTrack(track)->GetMutedState(), true);
750
751 EXPECT_CALL(*mock_source(), DoSetMutedState(_))
752 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
753 // Mock frame delivery happens asynchronously, not according to the configured
754 // frame rate, potentially many frames can pass before the muted state is
755 // flipped. |kMaxFrameCount| is used as a reasonable high bound of this value.
756 const int kMaxFrameCount = 10000;
757 int i = 0;
758 while (muted_state != false || ++i > kMaxFrameCount)
759 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
760 EXPECT_EQ(muted_state, false);
761 EXPECT_LT(i, kMaxFrameCount);
762 EXPECT_EQ(MediaStreamTrack::GetTrack(track)->GetMutedState(), false);
763
764 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
765 }
766
767 // Test that a source producing no frames calls back the MSVCS to tell so, and
768 // this in turn tells all the Tracks attached.
769 TEST_F(MediaStreamVideoSourceTest, MutedSourceWithTwoTracks) {
770 MockMediaConstraintFactory factory1;
771 blink::WebMediaStreamTrack track1 =
772 CreateTrackAndStartSource(factory1.CreateWebMediaConstraints(),
773 MediaStreamVideoSource::kDefaultWidth,
774 MediaStreamVideoSource::kDefaultHeight,
775 30);
776
777 MockMediaConstraintFactory factory2;
778 factory2.AddMandatory(MediaStreamVideoSource::kMaxFrameRate, 15);
779 blink::WebMediaStreamTrack track2 = CreateTrack(
780 "123", factory2.CreateWebMediaConstraints());
781 EXPECT_EQ(0, NumberOfFailedConstraintsCallbacks());
782
783 MockMediaStreamVideoSink sink1;
784 MediaStreamVideoSink::AddToVideoTrack(&sink1, sink1.GetDeliverFrameCB(),
785 track1);
786 EXPECT_EQ(MediaStreamTrack::GetTrack(track1)->GetMutedState(), false);
787
788 MockMediaStreamVideoSink sink2;
789 MediaStreamVideoSink::AddToVideoTrack(&sink2, sink2.GetDeliverFrameCB(),
790 track2);
791 EXPECT_EQ(MediaStreamTrack::GetTrack(track2)->GetMutedState(), false);
792
793 base::RunLoop run_loop;
794 base::Closure quit_closure = run_loop.QuitClosure();
795 bool muted_state = false;
796 EXPECT_CALL(*mock_source(), DoSetMutedState(_))
797 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
798 run_loop.Run();
799 EXPECT_EQ(muted_state, true);
800
801 // TODO(mcasas): When added, check |track|'s (WebMediaStreamTrack) Muted
802 // attribute, should be true. In the meantime, check the MediaStreamTrack's.
803 EXPECT_EQ(MediaStreamTrack::GetTrack(track1)->GetMutedState(), true);
804 EXPECT_EQ(MediaStreamTrack::GetTrack(track2)->GetMutedState(), true);
805
806 MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1);
807 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2);
808 }
809
723 } // namespace content 810 } // 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