Home | History | Annotate | Download | only in media
      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
      3 // found in the LICENSE file.
      4 
      5 #include <string>
      6 
      7 #include "base/strings/utf_string_conversions.h"
      8 #include "content/renderer/media/media_stream_extra_data.h"
      9 #include "content/renderer/media/media_stream_registry_interface.h"
     10 #include "content/renderer/media/mock_media_stream_dependency_factory.h"
     11 #include "content/renderer/media/mock_media_stream_registry.h"
     12 #include "content/renderer/media/video_source_handler.h"
     13 #include "testing/gmock/include/gmock/gmock.h"
     14 #include "testing/gtest/include/gtest/gtest.h"
     15 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
     16 #include "third_party/WebKit/public/platform/WebString.h"
     17 #include "third_party/libjingle/source/talk/media/base/videorenderer.h"
     18 #include "third_party/libjingle/source/talk/media/webrtc/webrtcvideoframe.h"
     19 
     20 using cricket::VideoFrame;
     21 
     22 namespace content {
     23 
     24 static const std::string kTestStreamUrl = "stream_url";
     25 static const std::string kTestVideoTrackId = "video_track_id";
     26 static const std::string kUnknownStreamUrl = "unknown_stream_url";
     27 
     28 class FakeFrameReader : public FrameReaderInterface {
     29  public:
     30   virtual bool GotFrame(VideoFrame* frame) OVERRIDE {
     31     last_frame_.reset(frame);
     32     return true;
     33   }
     34 
     35   const VideoFrame* last_frame() {
     36     return last_frame_.get();
     37   }
     38 
     39  private:
     40   scoped_ptr<VideoFrame> last_frame_;
     41 };
     42 
     43 class VideoSourceHandlerTest : public ::testing::Test {
     44  public:
     45   VideoSourceHandlerTest() : registry_(&dependency_factory_) {
     46     handler_.reset(new VideoSourceHandler(&registry_));
     47     dependency_factory_.EnsurePeerConnectionFactory();
     48     registry_.Init(kTestStreamUrl);
     49     registry_.AddVideoTrack(kTestVideoTrackId);
     50   }
     51 
     52  protected:
     53   scoped_ptr<VideoSourceHandler> handler_;
     54   MockMediaStreamDependencyFactory dependency_factory_;
     55   MockMediaStreamRegistry registry_;
     56 };
     57 
     58 TEST_F(VideoSourceHandlerTest, OpenClose) {
     59   FakeFrameReader reader;
     60   // Unknow url will return false.
     61   EXPECT_FALSE(handler_->Open(kUnknownStreamUrl, &reader));
     62   EXPECT_TRUE(handler_->Open(kTestStreamUrl, &reader));
     63   cricket::WebRtcVideoFrame test_frame;
     64   int width = 640;
     65   int height = 360;
     66   int64 et = 123456;
     67   int64 ts = 789012;
     68   test_frame.InitToBlack(width, height, 1, 1, et, ts);
     69   cricket::VideoRenderer* receiver = handler_->GetReceiver(&reader);
     70   ASSERT(receiver != NULL);
     71   receiver->RenderFrame(&test_frame);
     72 
     73   const VideoFrame* frame = reader.last_frame();
     74   ASSERT_TRUE(frame != NULL);
     75 
     76   // Compare |frame| to |test_frame|.
     77   EXPECT_EQ(test_frame.GetWidth(), frame->GetWidth());
     78   EXPECT_EQ(test_frame.GetHeight(), frame->GetHeight());
     79   EXPECT_EQ(test_frame.GetElapsedTime(), frame->GetElapsedTime());
     80   EXPECT_EQ(test_frame.GetTimeStamp(), frame->GetTimeStamp());
     81   EXPECT_EQ(test_frame.GetYPlane(), frame->GetYPlane());
     82   EXPECT_EQ(test_frame.GetUPlane(), frame->GetUPlane());
     83   EXPECT_EQ(test_frame.GetVPlane(), frame->GetVPlane());
     84 
     85   EXPECT_TRUE(handler_->Close(kTestStreamUrl, &reader));
     86   EXPECT_TRUE(handler_->GetReceiver(&reader) == NULL);
     87 }
     88 
     89 }  // namespace content
     90