1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// vie_autotest.cc
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
15281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/test/auto_test/interface/vie_autotest.h"
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h>
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
19281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/engine_configurations.h"
2007e96da4b4ae3ba9e722128fc650f6b10ff663f5andrew@webrtc.org#include "webrtc/modules/video_render/include/video_render.h"
21281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/test/testsupport/fileutils.h"
22281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/test/auto_test/interface/vie_autotest_defines.h"
23281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/test/auto_test/primitives/general_primitives.h"
24281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/test/libvietest/include/tb_capture_device.h"
25281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/test/libvietest/include/tb_interfaces.h"
26281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/test/libvietest/include/tb_video_channel.h"
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgDEFINE_bool(include_timing_dependent_tests, true,
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            "If true, we will include tests / parts of tests that are known "
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            "to break in slow execution environments (such as valgrind).");
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ViETest implementation
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgFILE* ViETest::log_file_ = NULL;
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgchar* ViETest::log_str_ = NULL;
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstd::string ViETest::GetResultOutputPath() {
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  return webrtc::test::OutputPath();
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ViEAutoTest implementation
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgViEAutoTest::ViEAutoTest(void* window1, void* window2) :
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    _window1(window1),
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    _window2(window2),
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    _renderType(webrtc::kRenderDefault),
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    _vrm1(webrtc::VideoRender::CreateVideoRender(
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        4561, window1, false, _renderType)),
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    _vrm2(webrtc::VideoRender::CreateVideoRender(
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        4562, window2, false, _renderType))
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    assert(_vrm1);
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    assert(_vrm2);
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgViEAutoTest::~ViEAutoTest()
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    webrtc::VideoRender::DestroyVideoRender(_vrm1);
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    _vrm1 = NULL;
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    webrtc::VideoRender::DestroyVideoRender(_vrm2);
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    _vrm2 = NULL;
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid ViEAutoTest::ViEStandardTest()
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViEBaseStandardTest();
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViECaptureStandardTest();
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViECodecStandardTest();
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViEImageProcessStandardTest();
68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViERenderStandardTest();
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViERtpRtcpStandardTest();
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid ViEAutoTest::ViEExtendedTest()
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViEBaseExtendedTest();
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViECaptureExtendedTest();
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViECodecExtendedTest();
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViEImageProcessExtendedTest();
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViERenderExtendedTest();
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViERtpRtcpExtendedTest();
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid ViEAutoTest::ViEAPITest()
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViEBaseAPITest();
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViECaptureAPITest();
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViECodecAPITest();
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViEImageProcessAPITest();
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViERenderAPITest();
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViERtpRtcpAPITest();
90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid ViEAutoTest::PrintVideoCodec(const webrtc::VideoCodec videoCodec)
93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("Video Codec Information:");
95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    switch (videoCodec.codecType)
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    {
98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        case webrtc::kVideoCodecVP8:
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            ViETest::Log("\tcodecType: VP8");
100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            break;
101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        case webrtc::kVideoCodecI420:
102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            ViETest::Log("\tcodecType: I420");
103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            break;
1042d4a80c05adffe07b48dc235475852450cd90568stefan@webrtc.org        case webrtc::kVideoCodecH264:
1052d4a80c05adffe07b48dc235475852450cd90568stefan@webrtc.org            ViETest::Log("\tcodecType: H264");
1062d4a80c05adffe07b48dc235475852450cd90568stefan@webrtc.org            break;
107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        case webrtc::kVideoCodecRED:
108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            ViETest::Log("\tcodecType: RED");
109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            break;
110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        case webrtc::kVideoCodecULPFEC:
111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            ViETest::Log("\tcodecType: ULPFEC");
112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            break;
113e3339fcb0795bf0e6fbf148133c8b79bcecc5edepbos@webrtc.org        case webrtc::kVideoCodecGeneric:
114e3339fcb0795bf0e6fbf148133c8b79bcecc5edepbos@webrtc.org            ViETest::Log("\tcodecType: GENERIC");
115e3339fcb0795bf0e6fbf148133c8b79bcecc5edepbos@webrtc.org            break;
116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        case webrtc::kVideoCodecUnknown:
117e3339fcb0795bf0e6fbf148133c8b79bcecc5edepbos@webrtc.org            ViETest::Log("\tcodecType: UNKNOWN");
118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org            break;
119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    }
120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\theight: %u", videoCodec.height);
122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\tmaxBitrate: %u", videoCodec.maxBitrate);
123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\tmaxFramerate: %u", videoCodec.maxFramerate);
124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\tminBitrate: %u", videoCodec.minBitrate);
125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\tplName: %s", videoCodec.plName);
126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\tplType: %u", videoCodec.plType);
127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\tstartBitrate: %u", videoCodec.startBitrate);
128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\twidth: %u", videoCodec.width);
129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("");
130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid ViEAutoTest::PrintAudioCodec(const webrtc::CodecInst audioCodec)
133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("Audio Codec Information:");
135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\tchannels: %u", audioCodec.channels);
136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\t: %u", audioCodec.pacsize);
137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\t: %u", audioCodec.plfreq);
138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\t: %s", audioCodec.plname);
139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\t: %u", audioCodec.pltype);
140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("\t: %u", audioCodec.rate);
141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    ViETest::Log("");
142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid ViEAutoTest::RenderCaptureDeviceAndOutputStream(
145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TbInterfaces* video_engine,
146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TbVideoChannel* video_channel,
147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    TbCaptureDevice* capture_device) {
148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  RenderInWindow(
149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      video_engine->render, capture_device->captureId, _window1, 0);
150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  RenderInWindow(
151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      video_engine->render, video_channel->videoChannel, _window2, 1);
152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
153