| 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 |