Do not use recursive calling in NetEq test tools

This CL removes recursive calling in:
- NETEQTEST_DummyRTPpacket::readFromFile,
- NETEQTEST_RTPpacket::readFromFile.

The files currently exist for both NetEq3 and NetEq4, and all are
changed with this CL.

R=turaj@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/4699004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@5200 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
henrik.lundin@webrtc.org
2013-12-03 08:26:49 +00:00
parent e0034557a7
commit 5ecdef11cc
4 changed files with 256 additions and 238 deletions

View File

@@ -31,116 +31,121 @@ int NETEQTEST_DummyRTPpacket::readFromFile(FILE *fp)
uint16_t length, plen; uint16_t length, plen;
uint32_t offset; uint32_t offset;
int packetLen;
if (fread(&length, 2, 1, fp) == 0) bool readNextPacket = true;
{ while (readNextPacket) {
readNextPacket = false;
if (fread(&length, 2, 1, fp) == 0)
{
reset(); reset();
return -2; return -2;
} }
length = ntohs(length); length = ntohs(length);
if (fread(&plen, 2, 1, fp) == 0) if (fread(&plen, 2, 1, fp) == 0)
{ {
reset(); reset();
return -1; return -1;
} }
int packetLen = ntohs(plen); packetLen = ntohs(plen);
if (fread(&offset, 4, 1, fp) == 0) if (fread(&offset, 4, 1, fp) == 0)
{ {
reset(); reset();
return -1; return -1;
} }
// Store in local variable until we have passed the reset below. // Store in local variable until we have passed the reset below.
uint32_t receiveTime = ntohl(offset); uint32_t receiveTime = ntohl(offset);
// Use length here because a plen of 0 specifies rtcp. // Use length here because a plen of 0 specifies rtcp.
length = (uint16_t) (length - _kRDHeaderLen); length = (uint16_t) (length - _kRDHeaderLen);
// check buffer size // check buffer size
if (_datagram && _memSize < length + 1) if (_datagram && _memSize < length + 1)
{ {
reset(); reset();
} }
if (!_datagram) if (!_datagram)
{ {
// Add one extra byte, to be able to fake a dummy payload of one byte. // Add one extra byte, to be able to fake a dummy payload of one byte.
_datagram = new uint8_t[length + 1]; _datagram = new uint8_t[length + 1];
_memSize = length + 1; _memSize = length + 1;
} }
memset(_datagram, 0, length + 1); memset(_datagram, 0, length + 1);
if (length == 0) if (length == 0)
{ {
_datagramLen = 0; _datagramLen = 0;
return packetLen; return packetLen;
} }
// Read basic header // Read basic header
if (fread(_datagram, 1, _kBasicHeaderLen, fp) if (fread(_datagram, 1, _kBasicHeaderLen, fp)
!= (size_t)_kBasicHeaderLen) != (size_t)_kBasicHeaderLen)
{ {
reset(); reset();
return -1; return -1;
} }
_receiveTime = receiveTime; _receiveTime = receiveTime;
_datagramLen = _kBasicHeaderLen; _datagramLen = _kBasicHeaderLen;
int header_length = _kBasicHeaderLen; int header_length = _kBasicHeaderLen;
// Parse the basic header // Parse the basic header
WebRtcNetEQ_RTPInfo tempRTPinfo; WebRtcNetEQ_RTPInfo tempRTPinfo;
int P, X, CC; int P, X, CC;
parseBasicHeader(&tempRTPinfo, &P, &X, &CC); parseBasicHeader(&tempRTPinfo, &P, &X, &CC);
// Check if we have to extend the header // Check if we have to extend the header
if (X != 0 || CC != 0) if (X != 0 || CC != 0)
{ {
int newLen = _kBasicHeaderLen + CC * 4 + X * 4; int newLen = _kBasicHeaderLen + CC * 4 + X * 4;
assert(_memSize >= newLen + 1); assert(_memSize >= newLen + 1);
// Read extension from file // Read extension from file
size_t readLen = newLen - _kBasicHeaderLen; size_t readLen = newLen - _kBasicHeaderLen;
if (fread(_datagram + _kBasicHeaderLen, 1, readLen, if (fread(_datagram + _kBasicHeaderLen, 1, readLen,
fp) != readLen) fp) != readLen)
{ {
reset(); reset();
return -1; return -1;
} }
_datagramLen = newLen; _datagramLen = newLen;
header_length = newLen; header_length = newLen;
if (X != 0) if (X != 0)
{ {
int totHdrLen = calcHeaderLength(X, CC); int totHdrLen = calcHeaderLength(X, CC);
assert(_memSize >= totHdrLen); assert(_memSize >= totHdrLen);
// Read extension from file // Read extension from file
size_t readLen = totHdrLen - newLen; size_t readLen = totHdrLen - newLen;
if (fread(_datagram + newLen, 1, readLen, fp) if (fread(_datagram + newLen, 1, readLen, fp)
!= readLen) != readLen)
{ {
reset(); reset();
return -1; return -1;
} }
_datagramLen = totHdrLen; _datagramLen = totHdrLen;
header_length = totHdrLen; header_length = totHdrLen;
} }
} }
// Make sure that we have at least one byte of dummy payload. // Make sure that we have at least one byte of dummy payload.
_datagramLen = std::max(static_cast<int>(length), header_length + 1); _datagramLen = std::max(static_cast<int>(length), header_length + 1);
assert(_datagramLen <= _memSize); assert(_datagramLen <= _memSize);
if (!_blockList.empty() && _blockList.count(payloadType()) > 0) if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
{ {
// discard this payload // discard this payload
return readFromFile(fp); readNextPacket = true;
} }
if (_filterSSRC && _selectSSRC != SSRC()) if (_filterSSRC && _selectSSRC != SSRC())
{ {
// Discard this payload. // Discard this payload.
return(readFromFile(fp)); readNextPacket = true;
}
} }
return packetLen; return packetLen;

View File

@@ -107,62 +107,66 @@ int NETEQTEST_RTPpacket::readFromFile(FILE *fp)
uint16_t length, plen; uint16_t length, plen;
uint32_t offset; uint32_t offset;
int packetLen;
if (fread(&length,2,1,fp)==0) bool readNextPacket = true;
{ while (readNextPacket) {
reset(); readNextPacket = false;
return(-2); if (fread(&length,2,1,fp)==0)
} {
length = ntohs(length); reset();
return(-2);
}
length = ntohs(length);
if (fread(&plen,2,1,fp)==0) if (fread(&plen,2,1,fp)==0)
{ {
reset(); reset();
return(-1); return(-1);
} }
int packetLen = ntohs(plen); packetLen = ntohs(plen);
if (fread(&offset,4,1,fp)==0) if (fread(&offset,4,1,fp)==0)
{ {
reset(); reset();
return(-1); return(-1);
} }
uint32_t receiveTime = ntohl(offset); // store in local variable until we have passed the reset below // store in local variable until we have passed the reset below
uint32_t receiveTime = ntohl(offset);
// Use length here because a plen of 0 specifies rtcp // Use length here because a plen of 0 specifies rtcp
length = (uint16_t) (length - _kRDHeaderLen); length = (uint16_t) (length - _kRDHeaderLen);
// check buffer size // check buffer size
if (_datagram && _memSize < length) if (_datagram && _memSize < length)
{ {
reset(); reset();
} }
if (!_datagram) if (!_datagram)
{ {
_datagram = new uint8_t[length]; _datagram = new uint8_t[length];
_memSize = length; _memSize = length;
} }
if (fread((unsigned short *) _datagram,1,length,fp) != length) if (fread((unsigned short *) _datagram,1,length,fp) != length)
{ {
reset(); reset();
return(-1); return(-1);
} }
_datagramLen = length; _datagramLen = length;
_receiveTime = receiveTime; _receiveTime = receiveTime;
if (!_blockList.empty() && _blockList.count(payloadType()) > 0) if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
{ {
// discard this payload readNextPacket = true;
return(readFromFile(fp)); }
}
if (_filterSSRC && _selectSSRC != SSRC()) if (_filterSSRC && _selectSSRC != SSRC())
{ {
// Discard this payload. readNextPacket = true;
return(readFromFile(fp)); }
} }
return(packetLen); return(packetLen);

View File

@@ -29,105 +29,109 @@ int NETEQTEST_DummyRTPpacket::readFromFile(FILE *fp)
uint16_t length, plen; uint16_t length, plen;
uint32_t offset; uint32_t offset;
int packetLen;
if (fread(&length, 2, 1, fp) == 0) bool readNextPacket = true;
{ while (readNextPacket) {
reset(); readNextPacket = false;
return -2; if (fread(&length, 2, 1, fp) == 0)
} {
length = ntohs(length); reset();
return -2;
}
length = ntohs(length);
if (fread(&plen, 2, 1, fp) == 0) if (fread(&plen, 2, 1, fp) == 0)
{
reset();
return -1;
}
int packetLen = ntohs(plen);
if (fread(&offset, 4, 1, fp) == 0)
{
reset();
return -1;
}
// Store in local variable until we have passed the reset below.
uint32_t receiveTime = ntohl(offset);
// Use length here because a plen of 0 specifies rtcp.
length = (uint16_t) (length - _kRDHeaderLen);
// check buffer size
if (_datagram && _memSize < length)
{
reset();
}
if (!_datagram)
{
_datagram = new uint8_t[length];
_memSize = length;
}
memset(_datagram, 0, length);
if (length == 0)
{
_datagramLen = 0;
_rtpParsed = false;
return packetLen;
}
// Read basic header
if (fread((unsigned short *) _datagram, 1, _kBasicHeaderLen, fp)
!= (size_t)_kBasicHeaderLen)
{
reset();
return -1;
}
_receiveTime = receiveTime;
_datagramLen = _kBasicHeaderLen;
// Parse the basic header
webrtc::WebRtcRTPHeader tempRTPinfo;
int P, X, CC;
parseBasicHeader(&tempRTPinfo, &P, &X, &CC);
// Check if we have to extend the header
if (X != 0 || CC != 0)
{
int newLen = _kBasicHeaderLen + CC * 4 + X * 4;
assert(_memSize >= newLen);
// Read extension from file
size_t readLen = newLen - _kBasicHeaderLen;
if (fread((unsigned short *) _datagram + _kBasicHeaderLen, 1, readLen,
fp) != readLen)
{ {
reset(); reset();
return -1; return -1;
} }
_datagramLen = newLen; packetLen = ntohs(plen);
if (X != 0) if (fread(&offset, 4, 1, fp) == 0)
{ {
int totHdrLen = calcHeaderLength(X, CC); reset();
assert(_memSize >= totHdrLen); return -1;
}
// Store in local variable until we have passed the reset below.
uint32_t receiveTime = ntohl(offset);
// Use length here because a plen of 0 specifies rtcp.
length = (uint16_t) (length - _kRDHeaderLen);
// check buffer size
if (_datagram && _memSize < length)
{
reset();
}
if (!_datagram)
{
_datagram = new uint8_t[length];
_memSize = length;
}
memset(_datagram, 0, length);
if (length == 0)
{
_datagramLen = 0;
_rtpParsed = false;
return packetLen;
}
// Read basic header
if (fread((unsigned short *) _datagram, 1, _kBasicHeaderLen, fp)
!= (size_t)_kBasicHeaderLen)
{
reset();
return -1;
}
_receiveTime = receiveTime;
_datagramLen = _kBasicHeaderLen;
// Parse the basic header
webrtc::WebRtcRTPHeader tempRTPinfo;
int P, X, CC;
parseBasicHeader(&tempRTPinfo, &P, &X, &CC);
// Check if we have to extend the header
if (X != 0 || CC != 0)
{
int newLen = _kBasicHeaderLen + CC * 4 + X * 4;
assert(_memSize >= newLen);
// Read extension from file // Read extension from file
size_t readLen = totHdrLen - newLen; size_t readLen = newLen - _kBasicHeaderLen;
if (fread((unsigned short *) _datagram + newLen, 1, readLen, fp) if (fread((unsigned short *) _datagram + _kBasicHeaderLen, 1,
!= readLen) readLen, fp) != readLen)
{ {
reset(); reset();
return -1; return -1;
} }
_datagramLen = totHdrLen; _datagramLen = newLen;
}
}
_datagramLen = length;
if (!_blockList.empty() && _blockList.count(payloadType()) > 0) if (X != 0)
{ {
// discard this payload int totHdrLen = calcHeaderLength(X, CC);
return readFromFile(fp); assert(_memSize >= totHdrLen);
// Read extension from file
size_t readLen = totHdrLen - newLen;
if (fread((unsigned short *) _datagram + newLen, 1, readLen, fp)
!= readLen)
{
reset();
return -1;
}
_datagramLen = totHdrLen;
}
}
_datagramLen = length;
if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
{
readNextPacket = true;
}
} }
_rtpParsed = false; _rtpParsed = false;

View File

@@ -105,56 +105,61 @@ int NETEQTEST_RTPpacket::readFromFile(FILE *fp)
uint16_t length, plen; uint16_t length, plen;
uint32_t offset; uint32_t offset;
int packetLen;
if (fread(&length,2,1,fp)==0) bool readNextPacket = true;
{ while (readNextPacket) {
reset(); readNextPacket = false;
return(-2); if (fread(&length,2,1,fp)==0)
} {
length = ntohs(length); reset();
return(-2);
}
length = ntohs(length);
if (fread(&plen,2,1,fp)==0) if (fread(&plen,2,1,fp)==0)
{ {
reset(); reset();
return(-1); return(-1);
} }
int packetLen = ntohs(plen); packetLen = ntohs(plen);
if (fread(&offset,4,1,fp)==0) if (fread(&offset,4,1,fp)==0)
{ {
reset(); reset();
return(-1); return(-1);
} }
uint32_t receiveTime = ntohl(offset); // store in local variable until we have passed the reset below // store in local variable until we have passed the reset below
uint32_t receiveTime = ntohl(offset);
// Use length here because a plen of 0 specifies rtcp // Use length here because a plen of 0 specifies rtcp
length = (uint16_t) (length - _kRDHeaderLen); length = (uint16_t) (length - _kRDHeaderLen);
// check buffer size // check buffer size
if (_datagram && _memSize < length) if (_datagram && _memSize < length)
{ {
reset(); reset();
} }
if (!_datagram) if (!_datagram)
{ {
_datagram = new uint8_t[length]; _datagram = new uint8_t[length];
_memSize = length; _memSize = length;
} }
if (fread((unsigned short *) _datagram,1,length,fp) != length) if (fread((unsigned short *) _datagram,1,length,fp) != length)
{ {
reset(); reset();
return(-1); return(-1);
} }
_datagramLen = length; _datagramLen = length;
_receiveTime = receiveTime; _receiveTime = receiveTime;
if (!_blockList.empty() && _blockList.count(payloadType()) > 0) if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
{ {
// discard this payload readNextPacket = true;
return(readFromFile(fp)); }
} }
_rtpParsed = false; _rtpParsed = false;