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.h
13//
14
15#ifndef WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_VIE_AUTOTEST_H_
16#define WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_VIE_AUTOTEST_H_
17
18#include "gflags/gflags.h"
19#include "webrtc/common_types.h"
20#include "webrtc/modules/video_render/include/video_render_defines.h"
21#include "webrtc/video_engine/include/vie_base.h"
22#include "webrtc/video_engine/include/vie_capture.h"
23#include "webrtc/video_engine/include/vie_codec.h"
24#include "webrtc/video_engine/include/vie_errors.h"
25#include "webrtc/video_engine/include/vie_network.h"
26#include "webrtc/video_engine/include/vie_render.h"
27#include "webrtc/video_engine/include/vie_rtp_rtcp.h"
28#include "webrtc/video_engine/test/auto_test/interface/vie_autotest_defines.h"
29#include "webrtc/video_engine/vie_defines.h"
30#include "webrtc/voice_engine/include/voe_audio_processing.h"
31#include "webrtc/voice_engine/include/voe_base.h"
32#include "webrtc/voice_engine/include/voe_codec.h"
33#include "webrtc/voice_engine/include/voe_hardware.h"
34
35#ifndef WEBRTC_ANDROID
36#include <string>
37#endif
38
39class TbCaptureDevice;
40class TbInterfaces;
41class TbVideoChannel;
42class ViEToFileRenderer;
43
44DECLARE_bool(include_timing_dependent_tests);
45
46// This class provides a bunch of methods, implemented across several .cc
47// files, which runs tests on the video engine. All methods will report
48// errors using standard googletest macros, except when marked otherwise.
49class ViEAutoTest
50{
51public:
52    ViEAutoTest(void* window1, void* window2);
53    ~ViEAutoTest();
54
55    // These three are special and should not be run in a googletest harness.
56    // They keep track of their errors by themselves and return the number
57    // of errors.
58    int ViELoopbackCall();
59    int ViESimulcastCall();
60    int ViECustomCall();
61    int ViERecordCall();
62
63    // All functions except the three above are meant to run in a
64    // googletest harness.
65    void ViEStandardTest();
66    void ViEExtendedTest();
67    void ViEAPITest();
68
69    // vie_autotest_base.cc
70    void ViEBaseStandardTest();
71    void ViEBaseExtendedTest();
72    void ViEBaseAPITest();
73
74    // vie_autotest_capture.cc
75    void ViECaptureStandardTest();
76    void ViECaptureExtendedTest();
77    void ViECaptureAPITest();
78    void ViECaptureExternalCaptureTest();
79
80    // vie_autotest_codec.cc
81    void ViECodecStandardTest();
82    void ViECodecExtendedTest();
83    void ViECodecExternalCodecTest();
84    void ViECodecAPITest();
85
86    // vie_autotest_image_process.cc
87    void ViEImageProcessStandardTest();
88    void ViEImageProcessExtendedTest();
89    void ViEImageProcessAPITest();
90
91    // vie_autotest_network.cc
92    void ViENetworkStandardTest();
93    void ViENetworkExtendedTest();
94    void ViENetworkAPITest();
95
96    // vie_autotest_render.cc
97    void ViERenderStandardTest();
98    void ViERenderExtendedTest();
99    void ViERenderAPITest();
100
101    // vie_autotest_rtp_rtcp.cc
102    void ViERtpRtcpStandardTest();
103    void ViERtpRtcpExtendedTest();
104    void ViERtpRtcpAPITest();
105
106private:
107    void PrintAudioCodec(const webrtc::CodecInst audioCodec);
108    void PrintVideoCodec(const webrtc::VideoCodec videoCodec);
109
110    // Sets up rendering so the capture device output goes to window 1 and
111    // the video engine output goes to window 2.
112    void RenderCaptureDeviceAndOutputStream(TbInterfaces* video_engine,
113                                            TbVideoChannel* video_channel,
114                                            TbCaptureDevice* capture_device);
115
116    void* _window1;
117    void* _window2;
118
119    webrtc::VideoRenderType _renderType;
120    webrtc::VideoRender* _vrm1;
121    webrtc::VideoRender* _vrm2;
122};
123
124#endif  // WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_VIE_AUTOTEST_H_
125