| 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
|
|
|