~ubuntu-branches/debian/experimental/kopete/experimental

« back to all changes in this revision

Viewing changes to protocols/jabber/libjingle/talk/session/phone/webrtcpassthroughrender_unittest.cc

  • Committer: Package Import Robot
  • Author(s): Maximiliano Curia
  • Date: 2015-02-24 11:32:57 UTC
  • mfrom: (1.1.41 vivid)
  • Revision ID: package-import@ubuntu.com-20150224113257-gnupg4v7lzz18ij0
Tags: 4:14.12.2-1
* New upstream release (14.12.2).
* Bump Standards-Version to 3.9.6, no changes needed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2008 Google Inc. All Rights Reserved,
 
2
//
 
3
// Author: Ronghua Wu (ronghuawu@google.com)
 
4
 
 
5
#include <string>
 
6
 
 
7
#include "talk/base/gunit.h"
 
8
#include "talk/session/phone/webrtcpassthroughrender.h"
 
9
#include "talk/session/phone/testutils.h"
 
10
 
 
11
class WebRtcPassthroughRenderTest : public testing::Test {
 
12
 public:
 
13
  class ExternalRenderer : public webrtc::VideoRenderCallback {
 
14
   public:
 
15
    ExternalRenderer() : frame_num_(0) {
 
16
    }
 
17
 
 
18
    virtual ~ExternalRenderer() {
 
19
    }
 
20
 
 
21
    virtual WebRtc_Word32 RenderFrame(
 
22
        const WebRtc_UWord32 stream_id,
 
23
        webrtc::VideoFrame& videoFrame) {
 
24
      ++frame_num_;
 
25
      LOG(INFO) << "RenderFrame stream_id: " << stream_id
 
26
                << " frame_num: " << frame_num_;
 
27
      return 0;
 
28
    }
 
29
 
 
30
    int frame_num() const {
 
31
      return frame_num_;
 
32
    }
 
33
 
 
34
   private:
 
35
    int frame_num_;
 
36
  };
 
37
 
 
38
  WebRtcPassthroughRenderTest()
 
39
      : renderer_(new cricket::WebRtcPassthroughRender()) {
 
40
  }
 
41
 
 
42
  ~WebRtcPassthroughRenderTest() {
 
43
  }
 
44
 
 
45
  webrtc::VideoRenderCallback* AddIncomingRenderStream(int stream_id) {
 
46
    return renderer_->AddIncomingRenderStream(stream_id, 0, 0, 0, 0, 0);
 
47
  }
 
48
 
 
49
  bool HasIncomingRenderStream(int stream_id) {
 
50
    return renderer_->HasIncomingRenderStream(stream_id);
 
51
  }
 
52
 
 
53
  bool DeleteIncomingRenderStream(int stream_id) {
 
54
    return (renderer_->DeleteIncomingRenderStream(stream_id) == 0);
 
55
  }
 
56
 
 
57
  bool AddExternalRenderCallback(int stream_id,
 
58
                                 webrtc::VideoRenderCallback* renderer) {
 
59
    return (renderer_->AddExternalRenderCallback(stream_id, renderer) == 0);
 
60
  }
 
61
 
 
62
  bool StartRender(int stream_id) {
 
63
    return (renderer_->StartRender(stream_id) == 0);
 
64
  }
 
65
 
 
66
  bool StopRender(int stream_id) {
 
67
    return (renderer_->StopRender(stream_id) == 0);
 
68
  }
 
69
 
 
70
 private:
 
71
  talk_base::scoped_ptr<cricket::WebRtcPassthroughRender> renderer_;
 
72
};
 
73
 
 
74
TEST_F(WebRtcPassthroughRenderTest, Streams) {
 
75
  const int stream_id1 = 1234;
 
76
  const int stream_id2 = 5678;
 
77
  webrtc::VideoRenderCallback* stream = NULL;
 
78
  // Add a new stream
 
79
  stream = AddIncomingRenderStream(stream_id1);
 
80
  EXPECT_TRUE(stream != NULL);
 
81
  EXPECT_TRUE(HasIncomingRenderStream(stream_id1));
 
82
  // Tried to add a already existed stream should return null
 
83
  stream =AddIncomingRenderStream(stream_id1);
 
84
  EXPECT_TRUE(stream == NULL);
 
85
  stream = AddIncomingRenderStream(stream_id2);
 
86
  EXPECT_TRUE(stream != NULL);
 
87
  EXPECT_TRUE(HasIncomingRenderStream(stream_id2));
 
88
  // Remove the stream
 
89
  EXPECT_TRUE(DeleteIncomingRenderStream(stream_id2));
 
90
  EXPECT_TRUE(!HasIncomingRenderStream(stream_id2));
 
91
  // Add back the removed stream
 
92
  stream = AddIncomingRenderStream(stream_id2);
 
93
  EXPECT_TRUE(stream != NULL);
 
94
  EXPECT_TRUE(HasIncomingRenderStream(stream_id2));
 
95
}
 
96
 
 
97
TEST_F(WebRtcPassthroughRenderTest, Renderer) {
 
98
  webrtc::VideoFrame frame;
 
99
  const int stream_id1 = 1234;
 
100
  const int stream_id2 = 5678;
 
101
  webrtc::VideoRenderCallback* stream1 = NULL;
 
102
  webrtc::VideoRenderCallback* stream2 = NULL;
 
103
  // Add two new stream
 
104
  stream1 = AddIncomingRenderStream(stream_id1);
 
105
  EXPECT_TRUE(stream1 != NULL);
 
106
  EXPECT_TRUE(HasIncomingRenderStream(stream_id1));
 
107
  stream2 = AddIncomingRenderStream(stream_id2);
 
108
  EXPECT_TRUE(stream2 != NULL);
 
109
  EXPECT_TRUE(HasIncomingRenderStream(stream_id2));
 
110
  // Register the external renderer
 
111
  WebRtcPassthroughRenderTest::ExternalRenderer renderer1;
 
112
  WebRtcPassthroughRenderTest::ExternalRenderer renderer2;
 
113
  AddExternalRenderCallback(stream_id1, &renderer1);
 
114
  AddExternalRenderCallback(stream_id2, &renderer2);
 
115
  int test_frame_num = 10;
 
116
  // RenderFrame without starting the render
 
117
  for (int i = 0; i < test_frame_num; ++i) {
 
118
    stream1->RenderFrame(stream_id1, frame);
 
119
  }
 
120
  EXPECT_EQ(0, renderer1.frame_num());
 
121
  // Start the render and test again.
 
122
  EXPECT_TRUE(StartRender(stream_id1));
 
123
  for (int i = 0; i < test_frame_num; ++i) {
 
124
    stream1->RenderFrame(stream_id1, frame);
 
125
  }
 
126
  EXPECT_EQ(test_frame_num, renderer1.frame_num());
 
127
  // Stop the render and test again.
 
128
  EXPECT_TRUE(StopRender(stream_id1));
 
129
  for (int i = 0; i < test_frame_num; ++i) {
 
130
    stream1->RenderFrame(stream_id1, frame);
 
131
  }
 
132
  // The frame number should not have changed.
 
133
  EXPECT_EQ(test_frame_num, renderer1.frame_num());
 
134
 
 
135
  // Test on stream2 with a differnt number.
 
136
  EXPECT_TRUE(StartRender(stream_id2));
 
137
  test_frame_num = 30;
 
138
  for (int i = 0; i < test_frame_num; ++i) {
 
139
    stream2->RenderFrame(stream_id2, frame);
 
140
  }
 
141
  EXPECT_EQ(test_frame_num, renderer2.frame_num());
 
142
}