Index: webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc |
diff --git a/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc b/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc |
index 7f52a8717f3e1fd858a968a03c00f08af7698625..b164b7e04c0c2a105463ccbdd76ac841716e763c 100644 |
--- a/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc |
+++ b/webrtc/modules/rtp_rtcp/test/testFec/test_fec.cc |
@@ -22,10 +22,10 @@ |
#include <list> |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "webrtc/base/random.h" |
+#include "webrtc/modules/rtp_rtcp/source/byte_io.h" |
#include "webrtc/modules/rtp_rtcp/source/forward_error_correction.h" |
#include "webrtc/modules/rtp_rtcp/source/forward_error_correction_internal.h" |
- |
-#include "webrtc/modules/rtp_rtcp/source/byte_io.h" |
#include "webrtc/test/testsupport/fileutils.h" |
// #define VERBOSE_OUTPUT |
@@ -40,30 +40,31 @@ using fec_private_tables::kPacketMaskBurstyTbl; |
void ReceivePackets( |
ForwardErrorCorrection::ReceivedPacketList* toDecodeList, |
ForwardErrorCorrection::ReceivedPacketList* receivedPacketList, |
- uint32_t numPacketsToDecode, |
+ size_t numPacketsToDecode, |
float reorderRate, |
- float duplicateRate) { |
+ float duplicateRate, |
+ Random* random) { |
assert(toDecodeList->empty()); |
assert(numPacketsToDecode <= receivedPacketList->size()); |
ForwardErrorCorrection::ReceivedPacketList::iterator it; |
- for (uint32_t i = 0; i < numPacketsToDecode; i++) { |
+ for (size_t i = 0; i < numPacketsToDecode; i++) { |
it = receivedPacketList->begin(); |
// Reorder packets. |
- float randomVariable = static_cast<float>(rand()) / RAND_MAX; |
+ float randomVariable = random->Rand<float>(); |
while (randomVariable < reorderRate) { |
++it; |
if (it == receivedPacketList->end()) { |
--it; |
break; |
} |
- randomVariable = static_cast<float>(rand()) / RAND_MAX; |
+ randomVariable = random->Rand<float>(); |
} |
ForwardErrorCorrection::ReceivedPacket* receivedPacket = *it; |
toDecodeList->push_back(receivedPacket); |
// Duplicate packets. |
- randomVariable = static_cast<float>(rand()) / RAND_MAX; |
+ randomVariable = random->Rand<float>(); |
while (randomVariable < duplicateRate) { |
ForwardErrorCorrection::ReceivedPacket* duplicatePacket = |
new ForwardErrorCorrection::ReceivedPacket; |
@@ -74,7 +75,7 @@ void ReceivePackets( |
duplicatePacket->pkt->length = receivedPacket->pkt->length; |
toDecodeList->push_back(duplicatePacket); |
- randomVariable = static_cast<float>(rand()) / RAND_MAX; |
+ randomVariable = random->Rand<float>(); |
} |
receivedPacketList->erase(it); |
} |
@@ -125,7 +126,7 @@ TEST(FecTest, FecTest) { |
// Seed the random number generator, storing the seed to file in order to |
// reproduce past results. |
const unsigned int randomSeed = static_cast<unsigned int>(time(NULL)); |
- srand(randomSeed); |
+ Random random(randomSeed); |
std::string filename = webrtc::test::OutputPath() + "randomSeedLog.txt"; |
FILE* randomSeedFile = fopen(filename.c_str(), "a"); |
fprintf(randomSeedFile, "%u\n", randomSeed); |
@@ -133,8 +134,8 @@ TEST(FecTest, FecTest) { |
randomSeedFile = NULL; |
uint16_t seqNum = 0; |
- uint32_t timeStamp = static_cast<uint32_t>(rand()); |
- const uint32_t ssrc = static_cast<uint32_t>(rand()); |
+ uint32_t timeStamp = random.Rand<uint32_t>(); |
+ const uint32_t ssrc = random.Rand(1u, 0xfffffffe); |
// Loop over the mask types: random and bursty. |
for (int mask_type_idx = 0; mask_type_idx < kNumFecMaskTypes; |
@@ -227,16 +228,15 @@ TEST(FecTest, FecTest) { |
for (uint32_t i = 0; i < numMediaPackets; ++i) { |
mediaPacket = new ForwardErrorCorrection::Packet; |
mediaPacketList.push_back(mediaPacket); |
- mediaPacket->length = static_cast<size_t>( |
- (static_cast<float>(rand()) / RAND_MAX) * |
- (IP_PACKET_SIZE - 12 - 28 - |
- ForwardErrorCorrection::PacketOverhead())); |
- if (mediaPacket->length < 12) { |
- mediaPacket->length = 12; |
- } |
+ const uint32_t kMinPacketSize = 12; |
+ const uint32_t kMaxPacketSize = static_cast<uint32_t>( |
+ IP_PACKET_SIZE - 12 - 28 - |
+ ForwardErrorCorrection::PacketOverhead()); |
+ mediaPacket->length = random.Rand(kMinPacketSize, kMaxPacketSize); |
+ |
// Generate random values for the first 2 bytes. |
- mediaPacket->data[0] = static_cast<uint8_t>(rand() % 256); |
- mediaPacket->data[1] = static_cast<uint8_t>(rand() % 256); |
+ mediaPacket->data[0] = random.Rand<uint8_t>(); |
+ mediaPacket->data[1] = random.Rand<uint8_t>(); |
// The first two bits are assumed to be 10 by the |
// FEC encoder. In fact the FEC decoder will set the |
@@ -261,7 +261,7 @@ TEST(FecTest, FecTest) { |
ByteWriter<uint32_t>::WriteBigEndian(&mediaPacket->data[8], ssrc); |
// Generate random values for payload |
for (size_t j = 12; j < mediaPacket->length; ++j) { |
- mediaPacket->data[j] = static_cast<uint8_t>(rand() % 256); |
+ mediaPacket->data[j] = random.Rand<uint8_t>(); |
} |
seqNum++; |
} |
@@ -284,8 +284,7 @@ TEST(FecTest, FecTest) { |
while (mediaPacketListItem != mediaPacketList.end()) { |
mediaPacket = *mediaPacketListItem; |
// We want a value between 0 and 1. |
- const float lossRandomVariable = |
- (static_cast<float>(rand()) / (RAND_MAX)); |
+ const float lossRandomVariable = random.Rand<float>(); |
if (lossRandomVariable >= lossRate[lossRateIdx]) { |
mediaLossMask[mediaPacketIdx] = 1; |
@@ -310,8 +309,7 @@ TEST(FecTest, FecTest) { |
uint32_t fecPacketIdx = 0; |
while (fecPacketListItem != fecPacketList.end()) { |
fecPacket = *fecPacketListItem; |
- const float lossRandomVariable = |
- (static_cast<float>(rand()) / (RAND_MAX)); |
+ const float lossRandomVariable = random.Rand<float>(); |
if (lossRandomVariable >= lossRate[lossRateIdx]) { |
fecLossMask[fecPacketIdx] = 1; |
receivedPacket = new ForwardErrorCorrection::ReceivedPacket; |
@@ -382,15 +380,11 @@ TEST(FecTest, FecTest) { |
// For error-checking frame completion. |
bool fecPacketReceived = false; |
while (!receivedPacketList.empty()) { |
- uint32_t numPacketsToDecode = static_cast<uint32_t>( |
- (static_cast<float>(rand()) / RAND_MAX) * |
- receivedPacketList.size() + |
- 0.5); |
- if (numPacketsToDecode < 1) { |
- numPacketsToDecode = 1; |
- } |
+ size_t numPacketsToDecode = random.Rand( |
+ 1u, static_cast<uint32_t>(receivedPacketList.size())); |
ReceivePackets(&toDecodeList, &receivedPacketList, |
- numPacketsToDecode, reorderRate, duplicateRate); |
+ numPacketsToDecode, reorderRate, duplicateRate, |
+ &random); |
if (fecPacketReceived == false) { |
ForwardErrorCorrection::ReceivedPacketList::iterator |