vie_auto_test - moved custom call specific functions to be static, added video protect method to custom call
- moved all of the custom call specific functions out of vie_autotest.h and into vie_autotest_custom_call.cc
- added option to modify a running call's video protection method
Review URL: http://webrtc-codereview.appspot.com/234001
git-svn-id: http://webrtc.googlecode.com/svn/trunk@759 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/src/video_engine/main/test/AutoTest/interface/vie_autotest.h b/src/video_engine/main/test/AutoTest/interface/vie_autotest.h
index dd019a6..0c189fc 100644
--- a/src/video_engine/main/test/AutoTest/interface/vie_autotest.h
+++ b/src/video_engine/main/test/AutoTest/interface/vie_autotest.h
@@ -55,45 +55,6 @@
// custom call and helper functions
int ViECustomCall();
- // general settings functions
- bool GetVideoDevice(webrtc::ViEBase* ptrViEBase,
- webrtc::ViECapture* ptrViECapture,
- char* captureDeviceName, char* captureDeviceUniqueId);
- bool GetIPAddress(char* IP);
-#ifndef WEBRTC_ANDROID
- bool ValidateIP(std::string iStr);
-#endif
- void PrintCallInformation(char* IP, char* videoCaptureDeviceName,
- char* videoCaptureUniqueId,
- webrtc::VideoCodec videoCodec, int videoTxPort,
- int videoRxPort, char* audioCaptureDeviceName,
- char* audioPlaybackDeviceName,
- webrtc::CodecInst audioCodec, int audioTxPort,
- int audioRxPort);
-
- // video settings functions
- bool GetVideoPorts(int* txPort, int* rxPort);
- bool GetVideoCodecType(webrtc::ViECodec* ptrViECodec,
- webrtc::VideoCodec& videoCodec);
- bool GetVideoCodecResolution(webrtc::ViECodec* ptrViECodec,
- webrtc::VideoCodec& videoCodec);
- bool GetVideoCodecSize(webrtc::ViECodec* ptrViECodec,
- webrtc::VideoCodec& videoCodec);
- bool GetVideoCodecBitrate(webrtc::ViECodec* ptrViECodec,
- webrtc::VideoCodec& videoCodec);
-
- // audio settings functions
- bool GetAudioDevices(webrtc::VoEBase* ptrVEBase,
- webrtc::VoEHardware* ptrVEHardware,
- char* recordingDeviceName, int& recordingDeviceIndex,
- char* playbackDeviceName, int& playbackDeviceIndex);
- bool GetAudioDevices(webrtc::VoEBase* ptrVEBase,
- webrtc::VoEHardware* ptrVEHardware,
- int& recordingDeviceIndex, int& playbackDeviceIndex);
- bool GetAudioPorts(int* txPort, int* rxPort);
- bool GetAudioCodec(webrtc::VoECodec* ptrVeCodec,
- webrtc::CodecInst& audioCodec);
-
// vie_autotest_base.cc
int ViEBaseStandardTest();
int ViEBaseExtendedTest();
diff --git a/src/video_engine/main/test/AutoTest/interface/vie_autotest_defines.h b/src/video_engine/main/test/AutoTest/interface/vie_autotest_defines.h
index fa41285..77a49e6 100644
--- a/src/video_engine/main/test/AutoTest/interface/vie_autotest_defines.h
+++ b/src/video_engine/main/test/AutoTest/interface/vie_autotest_defines.h
@@ -47,18 +47,6 @@
#undef RGB
#define RGB(r,g,b) r|g<<8|b<<16
-// Default values for custom call
-#define DEFAULT_SEND_IP "127.0.0.1"
-#define DEFAULT_VIDEO_PORT 11111
-#define DEFAULT_VIDEO_CODEC "vp8"
-#define DEFAULT_VIDEO_CODEC_WIDTH 352
-#define DEFAULT_VIDEO_CODEC_HEIGHT 288
-#define DEFAULT_VIDEO_CODEC_BITRATE 100
-#define DEFAULT_AUDIO_PORT 11113
-#define DEFAULT_AUDIO_CODEC "isac"
-#define DEFAULT_INCOMING_FILE_NAME "IncomingFile.avi"
-#define DEFAULT_OUTGOING_FILE_NAME "OutgoingFile.avi"
-
enum {
KAutoTestSleepTimeMs = 5000
};
diff --git a/src/video_engine/main/test/AutoTest/source/vie_autotest_custom_call.cc b/src/video_engine/main/test/AutoTest/source/vie_autotest_custom_call.cc
index c7847a4..9739a35 100644
--- a/src/video_engine/main/test/AutoTest/source/vie_autotest_custom_call.cc
+++ b/src/video_engine/main/test/AutoTest/source/vie_autotest_custom_call.cc
@@ -20,6 +20,16 @@
#define VCM_RED_PAYLOAD_TYPE 96
#define VCM_ULPFEC_PAYLOAD_TYPE 97
+#define DEFAULT_SEND_IP "127.0.0.1"
+#define DEFAULT_VIDEO_PORT 11111
+#define DEFAULT_VIDEO_CODEC "vp8"
+#define DEFAULT_VIDEO_CODEC_WIDTH 352
+#define DEFAULT_VIDEO_CODEC_HEIGHT 288
+#define DEFAULT_VIDEO_CODEC_BITRATE 100
+#define DEFAULT_AUDIO_PORT 11113
+#define DEFAULT_AUDIO_CODEC "ISAC"
+#define DEFAULT_INCOMING_FILE_NAME "IncomingFile.avi"
+#define DEFAULT_OUTGOING_FILE_NAME "OutgoingFile.avi"
class ViEAutotestFileObserver: public webrtc::ViEFileObserver
{
@@ -33,6 +43,50 @@
}
};
+// general settings functions
+bool GetVideoDevice(webrtc::ViEBase* ptrViEBase,
+ webrtc::ViECapture* ptrViECapture,
+ char* captureDeviceName, char* captureDeviceUniqueId);
+bool GetIPAddress(char* IP);
+#ifndef WEBRTC_ANDROID
+bool ValidateIP(std::string iStr);
+#endif
+void PrintCallInformation(char* IP, char* videoCaptureDeviceName,
+ char* videoCaptureUniqueId,
+ webrtc::VideoCodec videoCodec, int videoTxPort,
+ int videoRxPort, char* audioCaptureDeviceName,
+ char* audioPlaybackDeviceName,
+ webrtc::CodecInst audioCodec, int audioTxPort,
+ int audioRxPort);
+
+// video settings functions
+bool GetVideoPorts(int* txPort, int* rxPort);
+bool GetVideoCodecType(webrtc::ViECodec* ptrViECodec,
+ webrtc::VideoCodec& videoCodec);
+bool GetVideoCodecResolution(webrtc::ViECodec* ptrViECodec,
+ webrtc::VideoCodec& videoCodec);
+bool GetVideoCodecSize(webrtc::ViECodec* ptrViECodec,
+ webrtc::VideoCodec& videoCodec);
+bool GetVideoCodecBitrate(webrtc::ViECodec* ptrViECodec,
+ webrtc::VideoCodec& videoCodec);
+bool GetVideoProtection(webrtc::ViECodec* ptrViECodec,
+ webrtc::VideoCodec& videoCodec,
+ webrtc::ViERTP_RTCP* ptrViERtpRtcp,
+ int videoChannel);
+
+// audio settings functions
+bool GetAudioDevices(webrtc::VoEBase* ptrVEBase,
+ webrtc::VoEHardware* ptrVEHardware,
+ char* recordingDeviceName, int& recordingDeviceIndex,
+ char* playbackDeviceName, int& playbackDeviceIndex);
+bool GetAudioDevices(webrtc::VoEBase* ptrVEBase,
+ webrtc::VoEHardware* ptrVEHardware,
+ int& recordingDeviceIndex, int& playbackDeviceIndex);
+bool GetAudioPorts(int* txPort, int* rxPort);
+bool GetAudioCodec(webrtc::VoECodec* ptrVeCodec,
+ webrtc::CodecInst& audioCodec);
+
+
int ViEAutoTest::ViECustomCall()
{
ViETest::Log(" ");
@@ -517,7 +571,8 @@
std::cout << " 7. Play File on Video Channel"
<< "(Assumes you recorded incoming & outgoing call)"
<< std::endl;
- std::cout << " 8. Print Call information" << std::endl;
+ std::cout << " 8. Change Video Protection Method" << std::endl;
+ std::cout << " 9. Print Call information" << std::endl;
std::cout << "What do you want to do? ";
std::cout << "Press enter for default "
<< "(Finished modifying custom call): ";
@@ -560,7 +615,7 @@
videoTxPort, videoRxPort,
audioCaptureDeviceName,
audioPlaybackDeviceName, audioCodec,
- audioTxPort, audioRxPort);
+ audioTxPort, audioRxPort);
error = ptrViECodec->SetSendCodec(videoChannel, videoCodec);
numberOfErrors += ViETest::TestError(error == 0,
"ERROR: %s at line %d",
@@ -580,7 +635,7 @@
videoTxPort, videoRxPort,
audioCaptureDeviceName,
audioPlaybackDeviceName, audioCodec,
- audioTxPort, audioRxPort);
+ audioTxPort, audioRxPort);
error = ptrViECodec->SetSendCodec(videoChannel, videoCodec);
numberOfErrors += ViETest::TestError(error == 0,
"ERROR: %s at line %d",
@@ -706,10 +761,6 @@
"ERROR:%d %s at line %d",
ptrViEBase->LastError(),
__FUNCTION__, __LINE__);
- numberOfErrors += ViETest::TestError(error == 0,
- "ERROR:%d %s at line %d",
- ptrViEBase->LastError(),
- __FUNCTION__, __LINE__);
std::cout << std::endl;
std::cout << "Start sending the file that is played in a loop "
<< std::endl;
@@ -740,6 +791,20 @@
modify_call = true;
break;
case 8:
+ // Change the Video Protection
+ GetVideoProtection(ptrViECodec, videoCodec, ptrViERtpRtcp,
+ videoChannel);
+ PrintCallInformation(ipAddress, deviceName,
+ uniqueId, videoCodec,
+ videoTxPort, videoRxPort,
+ audioCaptureDeviceName,
+ audioPlaybackDeviceName,
+ audioCodec, audioTxPort,
+ audioRxPort);
+
+ modify_call = true;
+ break;
+ case 9:
// Print Call information
PrintCallInformation(ipAddress, deviceName,
uniqueId, videoCodec,
@@ -883,10 +948,10 @@
return numberOfErrors;
}
-bool ViEAutoTest::GetVideoDevice(webrtc::ViEBase* ptrViEBase,
- webrtc::ViECapture* ptrViECapture,
- char* captureDeviceName,
- char* captureDeviceUniqueId)
+bool GetVideoDevice(webrtc::ViEBase* ptrViEBase,
+ webrtc::ViECapture* ptrViECapture,
+ char* captureDeviceName,
+ char* captureDeviceUniqueId)
{
int error = 0;
int numberOfErrors = 0;
@@ -975,12 +1040,12 @@
}
}
-bool ViEAutoTest::GetAudioDevices(webrtc::VoEBase* ptrVEBase,
- webrtc::VoEHardware* ptrVEHardware,
- char* recordingDeviceName,
- int& recordingDeviceIndex,
- char* playbackDeviceName,
- int& playbackDeviceIndex)
+bool GetAudioDevices(webrtc::VoEBase* ptrVEBase,
+ webrtc::VoEHardware* ptrVEHardware,
+ char* recordingDeviceName,
+ int& recordingDeviceIndex,
+ char* playbackDeviceName,
+ int& playbackDeviceIndex)
{
int error = 0;
int numberOfErrors = 0;
@@ -1118,7 +1183,7 @@
}
// general settings functions
-bool ViEAutoTest::GetIPAddress(char* iIP)
+bool GetIPAddress(char* iIP)
{
char oIP[16] = DEFAULT_SEND_IP;
std::string str;
@@ -1151,7 +1216,7 @@
return false;
}
-bool ViEAutoTest::ValidateIP(std::string iStr)
+bool ValidateIP(std::string iStr)
{
if(0 == iStr.compare(""))
{
@@ -1161,7 +1226,7 @@
}
// video settings functions
-bool ViEAutoTest::GetVideoPorts(int* txPort, int* rxPort)
+bool GetVideoPorts(int* txPort, int* rxPort)
{
std::string str;
int port = 0;
@@ -1230,7 +1295,7 @@
}
// audio settings functions
-bool ViEAutoTest::GetAudioPorts(int* txPort, int* rxPort)
+bool GetAudioPorts(int* txPort, int* rxPort)
{
int port = 0;
std::string str;
@@ -1298,7 +1363,7 @@
return false;
}
-bool ViEAutoTest::GetAudioCodec(webrtc::VoECodec* ptrVeCodec, webrtc::CodecInst& audioCodec)
+bool GetAudioCodec(webrtc::VoECodec* ptrVeCodec, webrtc::CodecInst& audioCodec)
{
int error = 0;
int numberOfErrors = 0;
@@ -1363,14 +1428,14 @@
return false;
}
-void ViEAutoTest::PrintCallInformation(char* IP, char* videoCaptureDeviceName,
- char* videoCaptureUniqueId,
- webrtc::VideoCodec videoCodec,
- int videoTxPort, int videoRxPort,
- char* audioCaptureDeviceName,
- char* audioPlaybackDeviceName,
- webrtc::CodecInst audioCodec,
- int audioTxPort, int audioRxPort)
+void PrintCallInformation(char* IP, char* videoCaptureDeviceName,
+ char* videoCaptureUniqueId,
+ webrtc::VideoCodec videoCodec,
+ int videoTxPort, int videoRxPort,
+ char* audioCaptureDeviceName,
+ char* audioPlaybackDeviceName,
+ webrtc::CodecInst audioCodec,
+ int audioTxPort, int audioRxPort)
{
std::string str;
@@ -1403,8 +1468,8 @@
<< std::endl;
}
-bool ViEAutoTest::GetVideoCodecType(webrtc::ViECodec* ptrViECodec,
- webrtc::VideoCodec& videoCodec)
+bool GetVideoCodecType(webrtc::ViECodec* ptrViECodec,
+ webrtc::VideoCodec& videoCodec)
{
int error = 0;
int numberOfErrors = 0;
@@ -1466,17 +1531,13 @@
return true;
}
-bool ViEAutoTest::GetVideoCodecResolution(webrtc::ViECodec* ptrViECodec,
- webrtc::VideoCodec& videoCodec)
+bool GetVideoCodecResolution(webrtc::ViECodec* ptrViECodec,
+ webrtc::VideoCodec& videoCodec)
{
std::string str;
int sizeOption = 2;
- if (videoCodec.codecType == webrtc::kVideoCodecI420) {
- std::cout << "Codec is I420, size is 176 x 144" << std::endl;
- sizeOption = 1;
- }
- else {
+ if (videoCodec.codecType == webrtc::kVideoCodecVP8) {
std::cout << std::endl;
std::cout << "Available Common Resolutions : " << std::endl;
std::cout << " 1. SQCIF (128X96) " << std::endl;
@@ -1493,58 +1554,60 @@
<< "(default keeps current size): ";
std::getline(std::cin, str);
sizeOption = atoi(str.c_str());
- }
- switch (sizeOption) {
- case 1:
- videoCodec.width = 128;
- videoCodec.height = 96;
- break;
- case 2:
- videoCodec.width = 160;
- videoCodec.height = 120;
- break;
- case 3:
- videoCodec.width = 176;
- videoCodec.height = 144;
- break;
- case 4:
- videoCodec.width = 352;
- videoCodec.height = 288;
- break;
- case 5:
- videoCodec.width = 640;
- videoCodec.height = 480;
- break;
- case 6:
- videoCodec.width = 800;
- videoCodec.height = 480;
- break;
- case 7:
- videoCodec.width = 704;
- videoCodec.height = 576;
- break;
- case 8:
- videoCodec.width = 800;
- videoCodec.height = 600;
- break;
- case 9:
- videoCodec.width = 1280;
- videoCodec.height = 720;
- break;
- case 10:
- videoCodec.width = 1024;
- videoCodec.height = 768;
- break;
+ switch (sizeOption) {
+ case 1:
+ videoCodec.width = 128;
+ videoCodec.height = 96;
+ break;
+ case 2:
+ videoCodec.width = 160;
+ videoCodec.height = 120;
+ break;
+ case 3:
+ videoCodec.width = 176;
+ videoCodec.height = 144;
+ break;
+ case 4:
+ videoCodec.width = 352;
+ videoCodec.height = 288;
+ break;
+ case 5:
+ videoCodec.width = 640;
+ videoCodec.height = 480;
+ break;
+ case 6:
+ videoCodec.width = 800;
+ videoCodec.height = 480;
+ break;
+ case 7:
+ videoCodec.width = 704;
+ videoCodec.height = 576;
+ break;
+ case 8:
+ videoCodec.width = 800;
+ videoCodec.height = 600;
+ break;
+ case 9:
+ videoCodec.width = 1280;
+ videoCodec.height = 720;
+ break;
+ case 10:
+ videoCodec.width = 1024;
+ videoCodec.height = 768;
+ break;
}
+ }
+ else {
+ std::cout << "Can Only change codec size if it's VP8" << std::endl;
+ }
return true;
}
-
-bool ViEAutoTest::GetVideoCodecSize(webrtc::ViECodec* ptrViECodec,
- webrtc::VideoCodec& videoCodec)
+bool GetVideoCodecSize(webrtc::ViECodec* ptrViECodec,
+ webrtc::VideoCodec& videoCodec)
{
- if (videoCodec.codecType != webrtc::kVideoCodecI420) {
+ if (videoCodec.codecType == webrtc::kVideoCodecVP8) {
std::string str;
videoCodec.width = DEFAULT_VIDEO_CODEC_WIDTH;
videoCodec.height = DEFAULT_VIDEO_CODEC_HEIGHT;
@@ -1563,13 +1626,13 @@
videoCodec.height=sizeSelection;
}
}
- else if (videoCodec.codecType == webrtc::kVideoCodecI420) {
- std::cout << "Codec is I420, size is 176 x 144" << std::endl;
+ else {
+ std::cout << "Can Only change codec size if it's VP8" << std::endl;
}
return true;
}
-bool ViEAutoTest::GetVideoCodecBitrate(webrtc::ViECodec* ptrViECodec,
+bool GetVideoCodecBitrate(webrtc::ViECodec* ptrViECodec,
webrtc::VideoCodec& videoCodec)
{
std::string str;
@@ -1584,3 +1647,89 @@
}
return true;
}
+
+bool GetVideoProtection(webrtc::ViECodec* ptrViECodec,
+ webrtc::VideoCodec& videoCodec,
+ webrtc::ViERTP_RTCP* ptrViERtpRtcp,
+ int videoChannel)
+{
+ int error = 0;
+ int numberOfErrors = 0;
+ int protectionMethod = 0;
+
+ std::cout << "Available Video Protection Method" << std::endl;
+ std::cout << " 0. None" << std::endl;
+ std::cout << " 1. FEC" << std::endl;
+ std::cout << " 2. NACK" << std::endl;
+ std::cout << " 3. NACK+FEC" << std::endl;
+ std::cout << "Enter Video Protection Method: ";
+
+ std::string method;
+ std::getline(std::cin, method);
+ protectionMethod = atoi(method.c_str());
+ // Set video protection for FEC and/or NACK
+ switch (protectionMethod) {
+ case 0: // None
+ error = ptrViERtpRtcp->SetFECStatus(videoChannel, false,
+ VCM_RED_PAYLOAD_TYPE,
+ VCM_ULPFEC_PAYLOAD_TYPE);
+ numberOfErrors += ViETest::TestError(error == 0,
+ "ERROR: %s at line %d",
+ __FUNCTION__, __LINE__);
+ error = ptrViERtpRtcp->SetNACKStatus(videoChannel, false);
+ numberOfErrors += ViETest::TestError(error == 0,
+ "ERROR: %s at line %d",
+ __FUNCTION__, __LINE__);
+ break;
+ case 1: // FEC only
+ error = ptrViERtpRtcp->SetFECStatus(videoChannel, true,
+ VCM_RED_PAYLOAD_TYPE,
+ VCM_ULPFEC_PAYLOAD_TYPE);
+ numberOfErrors += ViETest::TestError(error == 0,
+ "ERROR: %s at line %d",
+ __FUNCTION__, __LINE__);
+ error = ptrViERtpRtcp->SetNACKStatus(videoChannel, false);
+ numberOfErrors += ViETest::TestError(error == 0,
+ "ERROR: %s at line %d",
+ __FUNCTION__, __LINE__);
+ break;
+ case 2: // NACK only
+ error = ptrViERtpRtcp->SetNACKStatus(videoChannel, true);
+ numberOfErrors += ViETest::TestError(error == 0,
+ "ERROR: %s at line %d",
+ __FUNCTION__, __LINE__);
+ break;
+ case 3: // Hybrid NACK and FEC
+ error = ptrViERtpRtcp->SetHybridNACKFECStatus(videoChannel, true,
+ VCM_RED_PAYLOAD_TYPE,
+ VCM_ULPFEC_PAYLOAD_TYPE);
+ numberOfErrors += ViETest::TestError(error == 0,
+ "ERROR: %s at line %d",
+ __FUNCTION__, __LINE__);
+ break;
+ }
+ // Set receive codecs for FEC and hybrid NACK/FEC
+ if (protectionMethod == 1 || protectionMethod == 3) {
+ // RED
+ error = ptrViECodec->GetCodec(ptrViECodec->NumberOfCodecs() - 2,
+ videoCodec);
+ numberOfErrors += ViETest::TestError(error == 0,
+ "ERROR: %s at line %d",
+ __FUNCTION__, __LINE__);
+ error = ptrViECodec->SetReceiveCodec(videoChannel, videoCodec);
+ numberOfErrors += ViETest::TestError(error == 0,
+ "ERROR: %s at line %d",
+ __FUNCTION__, __LINE__);
+ // ULPFEC
+ error = ptrViECodec->GetCodec(ptrViECodec->NumberOfCodecs() - 1,
+ videoCodec);
+ numberOfErrors += ViETest::TestError(error == 0,
+ "ERROR: %s at line %d",
+ __FUNCTION__, __LINE__);
+ error = ptrViECodec->SetReceiveCodec(videoChannel, videoCodec);
+ numberOfErrors += ViETest::TestError(error == 0,
+ "ERROR: %s at line %d",
+ __FUNCTION__, __LINE__);
+ }
+ return true;
+}