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