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 115600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org#include "webrtc/video_engine/test/auto_test/primitives/base_primitives.h" 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 135e8ee6f8a182dd36d0c9f273f180d015a056cef4andrew@webrtc.org#include "webrtc/modules/video_capture/include/video_capture_factory.h" 145600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org#include "webrtc/video_engine/test/auto_test/interface/vie_autotest.h" 155600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org#include "webrtc/video_engine/test/auto_test/interface/vie_autotest_defines.h" 165600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org#include "webrtc/video_engine/test/libvietest/include/tb_external_transport.h" 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 185600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.orgstatic void ConfigureCodecsToI420(int video_channel, 195600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org webrtc::VideoCodec video_codec, 205600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org webrtc::ViECodec* codec_interface) { 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Set up the codec interface with all known receive codecs and with 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // I420 as the send codec. 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (int i = 0; i < codec_interface->NumberOfCodecs(); i++) { 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, codec_interface->GetCodec(i, video_codec)); 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 265600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org // Try to keep the test frame size small and bit rate generous when I420. 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (video_codec.codecType == webrtc::kVideoCodecI420) { 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org video_codec.width = 176; 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org video_codec.height = 144; 305600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org video_codec.maxBitrate = 32000; 315600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org video_codec.startBitrate = 32000; 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, codec_interface->SetSendCodec(video_channel, video_codec)); 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, codec_interface->SetReceiveCodec(video_channel, video_codec)); 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Verify that we really found the I420 codec. 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, codec_interface->GetSendCodec(video_channel, video_codec)); 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(webrtc::kVideoCodecI420, video_codec.codecType); 405600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org} 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 425600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.orgvoid TestI420CallSetup(webrtc::ViECodec* codec_interface, 435600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org webrtc::VideoEngine* video_engine, 445600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org webrtc::ViEBase* base_interface, 455600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org webrtc::ViENetwork* network_interface, 4619f89a1ab2ebe75e38d192c42453e9c50aae0c64stefan@webrtc.org webrtc::ViERTP_RTCP* rtp_rtcp_interface, 475600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org int video_channel, 485600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org const char* device_name) { 495600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org webrtc::VideoCodec video_codec; 505600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org memset(&video_codec, 0, sizeof(webrtc::VideoCodec)); 5119f89a1ab2ebe75e38d192c42453e9c50aae0c64stefan@webrtc.org EXPECT_EQ(0, rtp_rtcp_interface->SetTransmissionSmoothingStatus(video_channel, 5219f89a1ab2ebe75e38d192c42453e9c50aae0c64stefan@webrtc.org false)); 535600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org 545600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org ConfigureCodecsToI420(video_channel, video_codec, codec_interface); 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 565600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org TbExternalTransport external_transport( 575600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org *network_interface, video_channel, NULL); 585600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org EXPECT_EQ(0, network_interface->RegisterSendTransport( 595600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org video_channel, external_transport)); 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, base_interface->StartReceive(video_channel)); 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, base_interface->StartSend(video_channel)); 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 635600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org // Let the call run for a while. 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ViETest::Log("Call started"); 655dee0551c0a2d86cf524e80c033936d3827a20c6stefan@webrtc.org AutoTestSleep(kAutoTestSleepTimeMs); 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 675600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org // Stop the call. 685600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org ViETest::Log("Stopping call."); 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EXPECT_EQ(0, base_interface->StopSend(video_channel)); 705600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org 715600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org // Make sure we receive all packets. 725600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org AutoTestSleep(1000); 735600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org 745600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org EXPECT_EQ(0, base_interface->StopReceive(video_channel)); 755600f6e86d3994726249fd1c77377c1d8534f107phoglund@webrtc.org EXPECT_EQ(0, network_interface->DeregisterSendTransport(video_channel)); 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 77