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 11281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/test/libvietest/include/tb_video_channel.h" 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "testing/gtest/include/gtest/gtest.h" 14c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org#include "webrtc/test/channel_transport/include/channel_transport.h" 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgTbVideoChannel::TbVideoChannel(TbInterfaces& Engine, 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org webrtc::VideoCodecType sendCodec, int width, 18c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org int height, int frameRate, int startBitrate) 19c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org : videoChannel(-1), 20c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org ViE(Engine) { 21c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.base->CreateChannel(videoChannel)); 22c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org channel_transport_.reset(new webrtc::test::VideoChannelTransport( 23c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org ViE.network, videoChannel)); 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 25c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org webrtc::VideoCodec videoCodec; 26c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org memset(&videoCodec, 0, sizeof(webrtc::VideoCodec)); 27c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org bool sendCodecSet = false; 28c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org for (int idx = 0; idx < ViE.codec->NumberOfCodecs(); idx++) { 29c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.codec->GetCodec(idx, videoCodec)); 30c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org videoCodec.width = width; 31c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org videoCodec.height = height; 32c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org videoCodec.maxFramerate = frameRate; 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 34c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org if (videoCodec.codecType == sendCodec && sendCodecSet == false) { 35c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org if (videoCodec.codecType != webrtc::kVideoCodecI420) { 36c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org videoCodec.startBitrate = startBitrate; 37c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org videoCodec.maxBitrate = startBitrate * 3; 38c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org } 39c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.codec->SetSendCodec(videoChannel, videoCodec)); 40c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org sendCodecSet = true; 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 42c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org if (videoCodec.codecType == webrtc::kVideoCodecVP8) { 43c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org videoCodec.width = 352; 44c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org videoCodec.height = 288; 45c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org } 46c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.codec->SetReceiveCodec(videoChannel, videoCodec)); 47c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org } 48c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_TRUE(sendCodecSet); 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 51c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.orgTbVideoChannel::~TbVideoChannel() { 52c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.base->DeleteChannel(videoChannel)); 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 55c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.orgvoid TbVideoChannel::StartSend(const unsigned short rtp_port, 56c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org const char* ip_address) { 57c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, channel_transport_->SetSendDestination(ip_address, rtp_port)); 58c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.base->StartSend(videoChannel)); 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 61c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.orgvoid TbVideoChannel::SetFrameSettings(int width, int height, int frameRate) { 62c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org webrtc::VideoCodec videoCodec; 63c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.codec->GetSendCodec(videoChannel, videoCodec)); 64c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org videoCodec.width = width; 65c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org videoCodec.height = height; 66c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org videoCodec.maxFramerate = frameRate; 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 68c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.codec->SetSendCodec(videoChannel, videoCodec)); 69c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.codec->SetReceiveCodec(videoChannel, videoCodec)); 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 72c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.orgvoid TbVideoChannel::StopSend() { 73c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.base->StopSend(videoChannel)); 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 76c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.orgvoid TbVideoChannel::StartReceive(unsigned short rtp_port) { 77c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, channel_transport_->SetLocalReceiver(rtp_port)); 78c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.base->StartReceive(videoChannel)); 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 81c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.orgvoid TbVideoChannel::StopReceive() { 82c075e2547e9da14bb80fb16c07fd64052d10dd9bpwestin@webrtc.org EXPECT_EQ(0, ViE.base->StopReceive(videoChannel)); 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 84