Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / video_engine / test / auto_test / source / vie_autotest_image_process.cc
1 /*
2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10
11 //
12 // vie_autotest_image_process.cc
13 //
14
15 // Settings
16 #include "webrtc/engine_configurations.h"
17 #include "webrtc/video_engine/test/auto_test/interface/vie_autotest.h"
18 #include "webrtc/video_engine/test/auto_test/interface/vie_autotest_defines.h"
19
20 #include "webrtc/video_engine/test/libvietest/include/tb_capture_device.h"
21 #include "webrtc/video_engine/test/libvietest/include/tb_interfaces.h"
22 #include "webrtc/video_engine/test/libvietest/include/tb_video_channel.h"
23
24 class MyEffectFilter: public webrtc::ViEEffectFilter
25 {
26 public:
27     MyEffectFilter() {}
28
29     ~MyEffectFilter() {}
30
31     virtual int Transform(int size,
32                           unsigned char* frame_buffer,
33                           int64_t ntp_time_ms,
34                           unsigned int timestamp,
35                           unsigned int width,
36                           unsigned int height)
37     {
38         // Black and white
39         memset(frame_buffer + (2 * size) / 3, 0x7f, size / 3);
40         return 0;
41     }
42 };
43
44 void ViEAutoTest::ViEImageProcessStandardTest()
45 {
46     //***************************************************************
47     //  Begin create/initialize WebRTC Video Engine for testing
48     //***************************************************************
49     int rtpPort = 6000;
50     // Create VIE
51     TbInterfaces ViE("ViEImageProcessAPITest");
52     // Create a video channel
53     TbVideoChannel tbChannel(ViE, webrtc::kVideoCodecVP8);
54     // Create a capture device
55     TbCaptureDevice tbCapture(ViE);
56
57     tbCapture.ConnectTo(tbChannel.videoChannel);
58     tbChannel.StartReceive(rtpPort);
59     tbChannel.StartSend(rtpPort);
60
61     MyEffectFilter effectFilter;
62
63     RenderCaptureDeviceAndOutputStream(&ViE, &tbChannel, &tbCapture);
64
65     ViETest::Log("Capture device is renderered in Window 1");
66     ViETest::Log("Remote stream is renderered in Window 2");
67     AutoTestSleep(kAutoTestSleepTimeMs);
68
69     //***************************************************************
70     //  Engine ready. Begin testing class
71     //***************************************************************
72
73
74     EXPECT_EQ(0, ViE.image_process->RegisterCaptureEffectFilter(
75         tbCapture.captureId, effectFilter));
76
77     ViETest::Log("Black and white filter registered for capture device, "
78                  "affects both windows");
79     AutoTestSleep(kAutoTestSleepTimeMs);
80
81     EXPECT_EQ(0, ViE.image_process->DeregisterCaptureEffectFilter(
82         tbCapture.captureId));
83
84     EXPECT_EQ(0, ViE.image_process->RegisterRenderEffectFilter(
85         tbChannel.videoChannel, effectFilter));
86
87     ViETest::Log("Remove capture effect filter, adding filter for incoming "
88                  "stream");
89     ViETest::Log("Only Window 2 should be black and white");
90     AutoTestSleep(kAutoTestSleepTimeMs);
91
92     EXPECT_EQ(0, ViE.render->StopRender(tbCapture.captureId));
93     EXPECT_EQ(0, ViE.render->RemoveRenderer(tbCapture.captureId));
94
95     int rtpPort2 = rtpPort + 100;
96     // Create a video channel
97     TbVideoChannel tbChannel2(ViE, webrtc::kVideoCodecVP8);
98
99     tbCapture.ConnectTo(tbChannel2.videoChannel);
100     tbChannel2.StartReceive(rtpPort2);
101     tbChannel2.StartSend(rtpPort2);
102
103     EXPECT_EQ(0, ViE.render->AddRenderer(
104         tbChannel2.videoChannel, _window1, 1, 0.0, 0.0, 1.0, 1.0));
105     EXPECT_EQ(0, ViE.render->StartRender(tbChannel2.videoChannel));
106     EXPECT_EQ(0, ViE.image_process->DeregisterRenderEffectFilter(
107         tbChannel.videoChannel));
108
109     ViETest::Log("Local renderer removed, added new channel and rendering in "
110                  "Window1.");
111
112     EXPECT_EQ(0, ViE.image_process->RegisterCaptureEffectFilter(
113         tbCapture.captureId, effectFilter));
114
115     ViETest::Log("Black and white filter registered for capture device, "
116                  "affects both windows");
117     AutoTestSleep(kAutoTestSleepTimeMs);
118
119     EXPECT_EQ(0, ViE.image_process->DeregisterCaptureEffectFilter(
120         tbCapture.captureId));
121
122     EXPECT_EQ(0, ViE.image_process->RegisterSendEffectFilter(
123         tbChannel.videoChannel, effectFilter));
124
125     ViETest::Log("Capture filter removed.");
126     ViETest::Log("Black and white filter registered for one channel, Window2 "
127                  "should be black and white");
128     AutoTestSleep(kAutoTestSleepTimeMs);
129
130     EXPECT_EQ(0, ViE.image_process->DeregisterSendEffectFilter(
131         tbChannel.videoChannel));
132
133     //***************************************************************
134     //  Testing finished. Tear down Video Engine
135     //***************************************************************
136 }
137
138 void ViEAutoTest::ViEImageProcessExtendedTest()
139 {
140 }
141
142 void ViEAutoTest::ViEImageProcessAPITest()
143 {
144     TbInterfaces ViE("ViEImageProcessAPITest");
145     TbVideoChannel tbChannel(ViE, webrtc::kVideoCodecVP8);
146     TbCaptureDevice tbCapture(ViE);
147
148     tbCapture.ConnectTo(tbChannel.videoChannel);
149
150     MyEffectFilter effectFilter;
151
152     //
153     // Capture effect filter
154     //
155     // Add effect filter
156     EXPECT_EQ(0, ViE.image_process->RegisterCaptureEffectFilter(
157         tbCapture.captureId, effectFilter));
158     // Add again -> error
159     EXPECT_NE(0, ViE.image_process->RegisterCaptureEffectFilter(
160         tbCapture.captureId, effectFilter));
161     EXPECT_EQ(0, ViE.image_process->DeregisterCaptureEffectFilter(
162         tbCapture.captureId));
163     EXPECT_EQ(0, ViE.image_process->DeregisterCaptureEffectFilter(
164         tbCapture.captureId));
165
166     // Non-existing capture device
167     EXPECT_NE(0, ViE.image_process->RegisterCaptureEffectFilter(
168         tbChannel.videoChannel, effectFilter));
169
170     //
171     // Render effect filter
172     //
173     EXPECT_EQ(0, ViE.image_process->RegisterRenderEffectFilter(
174         tbChannel.videoChannel, effectFilter));
175     EXPECT_NE(0, ViE.image_process->RegisterRenderEffectFilter(
176         tbChannel.videoChannel, effectFilter));
177     EXPECT_EQ(0, ViE.image_process->DeregisterRenderEffectFilter(
178         tbChannel.videoChannel));
179     EXPECT_EQ(0, ViE.image_process->DeregisterRenderEffectFilter(
180         tbChannel.videoChannel));
181
182     // Non-existing channel id
183     EXPECT_NE(0, ViE.image_process->RegisterRenderEffectFilter(
184         tbCapture.captureId, effectFilter));
185
186     //
187     // Send effect filter
188     //
189     EXPECT_EQ(0, ViE.image_process->RegisterSendEffectFilter(
190         tbChannel.videoChannel, effectFilter));
191     EXPECT_NE(0, ViE.image_process->RegisterSendEffectFilter(
192         tbChannel.videoChannel, effectFilter));
193     EXPECT_EQ(0, ViE.image_process->DeregisterSendEffectFilter(
194         tbChannel.videoChannel));
195     EXPECT_EQ(0, ViE.image_process->DeregisterSendEffectFilter(
196         tbChannel.videoChannel));
197     EXPECT_NE(0, ViE.image_process->RegisterSendEffectFilter(
198         tbCapture.captureId, effectFilter));
199
200     //
201     // Denoising
202     //
203     EXPECT_EQ(0, ViE.image_process->EnableDenoising(tbCapture.captureId, true));
204     // If the denoising is already enabled, it will just reuturn 0.
205     EXPECT_EQ(0, ViE.image_process->EnableDenoising(tbCapture.captureId, true));
206     EXPECT_EQ(0, ViE.image_process->EnableDenoising(
207         tbCapture.captureId, false));
208     // If the denoising is already disabled, it will just reuturn 0.
209     EXPECT_EQ(0, ViE.image_process->EnableDenoising(
210         tbCapture.captureId, false));
211     EXPECT_NE(0, ViE.image_process->EnableDenoising(
212         tbChannel.videoChannel, true));
213
214     //
215     // Deflickering
216     //
217     EXPECT_EQ(0, ViE.image_process->EnableDeflickering(
218         tbCapture.captureId, true));
219     EXPECT_NE(0, ViE.image_process->EnableDeflickering(
220         tbCapture.captureId, true));
221     EXPECT_EQ(0, ViE.image_process->EnableDeflickering(
222         tbCapture.captureId, false));
223     EXPECT_NE(0, ViE.image_process->EnableDeflickering(
224         tbCapture.captureId, false));
225     EXPECT_NE(0, ViE.image_process->EnableDeflickering(
226         tbChannel.videoChannel, true));
227
228     //
229     // Color enhancement
230     //
231     EXPECT_EQ(0, ViE.image_process->EnableColorEnhancement(
232         tbChannel.videoChannel, false));
233     EXPECT_EQ(0, ViE.image_process->EnableColorEnhancement(
234         tbChannel.videoChannel, true));
235     EXPECT_EQ(0, ViE.image_process->EnableColorEnhancement(
236         tbChannel.videoChannel, false));
237     EXPECT_NE(0, ViE.image_process->EnableColorEnhancement(
238         tbCapture.captureId, true));
239 }