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