OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 | 6 |
7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "content/renderer/media/media_stream_extra_data.h" | 8 #include "content/renderer/media/media_stream_extra_data.h" |
9 #include "content/renderer/media/media_stream_registry_interface.h" | 9 #include "content/renderer/media/media_stream_registry_interface.h" |
10 #include "content/renderer/media/mock_media_stream_dependency_factory.h" | 10 #include "content/renderer/media/mock_media_stream_dependency_factory.h" |
11 #include "content/renderer/media/mock_media_stream_registry.h" | 11 #include "content/renderer/media/mock_media_stream_registry.h" |
12 #include "content/renderer/media/video_source_handler.h" | 12 #include "content/renderer/media/video_source_handler.h" |
13 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | 15 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
16 #include "third_party/WebKit/public/platform/WebString.h" | 16 #include "third_party/WebKit/public/platform/WebString.h" |
| 17 #include "third_party/libjingle/source/talk/media/base/videocapturer.h" |
17 #include "third_party/libjingle/source/talk/media/base/videorenderer.h" | 18 #include "third_party/libjingle/source/talk/media/base/videorenderer.h" |
18 #include "third_party/libjingle/source/talk/media/webrtc/webrtcvideoframe.h" | 19 #include "third_party/libjingle/source/talk/media/webrtc/webrtcvideoframe.h" |
19 | 20 |
20 using cricket::VideoFrame; | 21 using cricket::VideoFrame; |
21 | 22 |
22 namespace content { | 23 namespace content { |
23 | 24 |
24 static const std::string kTestStreamUrl = "stream_url"; | 25 static const std::string kTestStreamUrl = "stream_url"; |
25 static const std::string kTestVideoTrackId = "video_track_id"; | 26 static const std::string kTestVideoTrackId = "video_track_id"; |
26 static const std::string kUnknownStreamUrl = "unknown_stream_url"; | 27 static const std::string kUnknownStreamUrl = "unknown_stream_url"; |
(...skipping 25 matching lines...) Expand all Loading... |
52 scoped_ptr<VideoSourceHandler> handler_; | 53 scoped_ptr<VideoSourceHandler> handler_; |
53 MockMediaStreamDependencyFactory dependency_factory_; | 54 MockMediaStreamDependencyFactory dependency_factory_; |
54 MockMediaStreamRegistry registry_; | 55 MockMediaStreamRegistry registry_; |
55 }; | 56 }; |
56 | 57 |
57 TEST_F(VideoSourceHandlerTest, OpenClose) { | 58 TEST_F(VideoSourceHandlerTest, OpenClose) { |
58 FakeFrameReader reader; | 59 FakeFrameReader reader; |
59 // Unknow url will return false. | 60 // Unknow url will return false. |
60 EXPECT_FALSE(handler_->Open(kUnknownStreamUrl, &reader)); | 61 EXPECT_FALSE(handler_->Open(kUnknownStreamUrl, &reader)); |
61 EXPECT_TRUE(handler_->Open(kTestStreamUrl, &reader)); | 62 EXPECT_TRUE(handler_->Open(kTestStreamUrl, &reader)); |
62 cricket::WebRtcVideoFrame test_frame; | 63 |
63 int width = 640; | 64 size_t width = 640; |
64 int height = 360; | 65 size_t height = 360; |
65 int64 et = 123456; | 66 int64 et = 123456; |
66 int64 ts = 789012; | 67 int64 ts = 789012; |
67 test_frame.InitToBlack(width, height, 1, 1, et, ts); | 68 size_t size = VideoFrame::SizeOf(width, height); |
| 69 std::vector<uint8_t> test_buffer(size); |
| 70 for (size_t i = 0; i < size; ++i) { |
| 71 test_buffer[i] = (i & 0xFF); |
| 72 } |
| 73 |
| 74 // A new frame is captured. |
| 75 cricket::CapturedFrame captured_frame; |
| 76 captured_frame.width = width; |
| 77 captured_frame.height = height; |
| 78 captured_frame.fourcc = cricket::FOURCC_I420; |
| 79 // cricket::CapturedFrame time is in nanoseconds. |
| 80 captured_frame.elapsed_time = et; |
| 81 captured_frame.time_stamp = ts; |
| 82 captured_frame.data = &test_buffer[0]; |
| 83 captured_frame.data_size = size; |
| 84 captured_frame.pixel_height = 1; |
| 85 captured_frame.pixel_width = 1; |
| 86 |
| 87 // The frame is delivered to VideoSourceHandler as cricket::VideoFrame. |
| 88 cricket::WebRtcVideoFrame i420_frame; |
| 89 EXPECT_TRUE(i420_frame.Alias(&captured_frame, width, height)); |
68 cricket::VideoRenderer* receiver = handler_->GetReceiver(&reader); | 90 cricket::VideoRenderer* receiver = handler_->GetReceiver(&reader); |
69 ASSERT(receiver != NULL); | 91 ASSERT(receiver != NULL); |
70 receiver->RenderFrame(&test_frame); | 92 receiver->RenderFrame(&i420_frame); |
71 | 93 |
| 94 // Compare |frame| to |captured_frame|. |
72 const VideoFrame* frame = reader.last_frame(); | 95 const VideoFrame* frame = reader.last_frame(); |
73 ASSERT_TRUE(frame != NULL); | 96 ASSERT_TRUE(frame != NULL); |
| 97 EXPECT_EQ(width, frame->GetWidth()); |
| 98 EXPECT_EQ(height, frame->GetHeight()); |
| 99 EXPECT_EQ(et, frame->GetElapsedTime()); |
| 100 EXPECT_EQ(ts, frame->GetTimeStamp()); |
| 101 std::vector<uint8_t> tmp_buffer1(size); |
| 102 EXPECT_EQ(size, frame->CopyToBuffer(&tmp_buffer1[0], size)); |
| 103 EXPECT_TRUE(std::equal(test_buffer.begin(), test_buffer.end(), |
| 104 tmp_buffer1.begin())); |
74 | 105 |
75 // Compare |frame| to |test_frame|. | 106 // Invalid the original frame |
76 EXPECT_EQ(test_frame.GetWidth(), frame->GetWidth()); | 107 memset(&test_buffer[0], 0, size); |
77 EXPECT_EQ(test_frame.GetHeight(), frame->GetHeight()); | 108 test_buffer.clear(); |
78 EXPECT_EQ(test_frame.GetElapsedTime(), frame->GetElapsedTime()); | 109 |
79 EXPECT_EQ(test_frame.GetTimeStamp(), frame->GetTimeStamp()); | 110 // We should still have the same |frame|. |
80 EXPECT_EQ(test_frame.GetYPlane(), frame->GetYPlane()); | 111 std::vector<uint8_t> tmp_buffer2(size); |
81 EXPECT_EQ(test_frame.GetUPlane(), frame->GetUPlane()); | 112 EXPECT_EQ(size, frame->CopyToBuffer(&tmp_buffer2[0], size)); |
82 EXPECT_EQ(test_frame.GetVPlane(), frame->GetVPlane()); | 113 EXPECT_TRUE(std::equal(tmp_buffer1.begin(), tmp_buffer1.end(), |
| 114 tmp_buffer2.begin())); |
83 | 115 |
84 EXPECT_FALSE(handler_->Close(NULL)); | 116 EXPECT_FALSE(handler_->Close(NULL)); |
85 EXPECT_TRUE(handler_->Close(&reader)); | 117 EXPECT_TRUE(handler_->Close(&reader)); |
86 EXPECT_TRUE(handler_->GetReceiver(&reader) == NULL); | 118 EXPECT_TRUE(handler_->GetReceiver(&reader) == NULL); |
87 } | 119 } |
88 | 120 |
89 TEST_F(VideoSourceHandlerTest, OpenWithoutClose) { | 121 TEST_F(VideoSourceHandlerTest, OpenWithoutClose) { |
90 FakeFrameReader reader; | 122 FakeFrameReader reader; |
91 EXPECT_TRUE(handler_->Open(kTestStreamUrl, &reader)); | 123 EXPECT_TRUE(handler_->Open(kTestStreamUrl, &reader)); |
92 } | 124 } |
93 | 125 |
94 } // namespace content | 126 } // namespace content |
OLD | NEW |