Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / modules / audio_coding / neteq4 / test / NETEQTEST_DummyRTPpacket.cc
index 5c47f2c..e175091 100644 (file)
@@ -29,108 +29,113 @@ int NETEQTEST_DummyRTPpacket::readFromFile(FILE *fp)
 
     uint16_t length, plen;
     uint32_t offset;
+    int packetLen;
 
-    if (fread(&length, 2, 1, fp) == 0)
-    {
-        reset();
-        return -2;
-    }
-    length = ntohs(length);
-
-    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);
+    bool readNextPacket = true;
+    while (readNextPacket) {
+        readNextPacket = false;
+        if (fread(&length, 2, 1, fp) == 0)
+        {
+            reset();
+            return -2;
+        }
+        length = ntohs(length);
 
-    // check buffer size
-    if (_datagram && _memSize < length)
-    {
-        reset();
-    }
+        if (fread(&plen, 2, 1, fp) == 0)
+        {
+            reset();
+            return -1;
+        }
+        packetLen = ntohs(plen);
 
-    if (!_datagram)
-    {
-        _datagram = new uint8_t[length];
-        _memSize = length;
-    }
-    memset(_datagram, 0, length);
+        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);
 
-    if (length == 0)
-    {
-        _datagramLen = 0;
-        _rtpParsed = false;
-        return packetLen;
-    }
+        // Use length here because a plen of 0 specifies rtcp.
+        length = (uint16_t) (length - _kRDHeaderLen);
 
-    // Read basic header
-    if (fread((unsigned short *) _datagram, 1, _kBasicHeaderLen, fp)
-        != (size_t)_kBasicHeaderLen)
-    {
-        reset();
-        return -1;
-    }
-    _receiveTime = receiveTime;
-    _datagramLen = _kBasicHeaderLen;
+        // check buffer size
+        if (_datagram && _memSize < length + 1)
+        {
+            reset();
+        }
 
-    // Parse the basic header
-    webrtc::WebRtcRTPHeader tempRTPinfo;
-    int P, X, CC;
-    parseBasicHeader(&tempRTPinfo, &P, &X, &CC);
+        if (!_datagram)
+        {
+            // Add one extra byte, to be able to fake a dummy payload of 1 byte.
+            _datagram = new uint8_t[length + 1];
+            _memSize = length + 1;
+        }
+        memset(_datagram, 0, length + 1);
 
-    // Check if we have to extend the header
-    if (X != 0 || CC != 0)
-    {
-        int newLen = _kBasicHeaderLen + CC * 4 + X * 4;
-        assert(_memSize >= newLen);
+        if (length == 0)
+        {
+            _datagramLen = 0;
+            _rtpParsed = false;
+            return packetLen;
+        }
 
-        // Read extension from file
-        size_t readLen = newLen - _kBasicHeaderLen;
-        if (fread((unsigned short *) _datagram + _kBasicHeaderLen, 1, readLen,
-            fp) != readLen)
+        // Read basic header
+        if (fread((unsigned short *) _datagram, 1, _kBasicHeaderLen, fp)
+            != (size_t)_kBasicHeaderLen)
         {
             reset();
             return -1;
         }
-        _datagramLen = newLen;
+        _receiveTime = receiveTime;
+        _datagramLen = _kBasicHeaderLen;
 
-        if (X != 0)
+        // 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 totHdrLen = calcHeaderLength(X, CC);
-            assert(_memSize >= totHdrLen);
+            int newLen = _kBasicHeaderLen + CC * 4 + X * 4;
+            assert(_memSize >= newLen);
 
             // Read extension from file
-            size_t readLen = totHdrLen - newLen;
-            if (fread((unsigned short *) _datagram + newLen, 1, readLen, fp)
-                != readLen)
+            size_t readLen = newLen - _kBasicHeaderLen;
+            if (fread(&_datagram[_kBasicHeaderLen], 1, readLen, fp) != readLen)
             {
                 reset();
                 return -1;
             }
-            _datagramLen = totHdrLen;
+            _datagramLen = newLen;
+
+            if (X != 0)
+            {
+                int totHdrLen = calcHeaderLength(X, CC);
+                assert(_memSize >= totHdrLen);
+
+                // Read extension from file
+                size_t readLen = totHdrLen - newLen;
+                if (fread(&_datagram[newLen], 1, readLen, fp) != readLen)
+                {
+                    reset();
+                    return -1;
+                }
+                _datagramLen = totHdrLen;
+            }
         }
-    }
-    _datagramLen = length;
+        _datagramLen = length;
 
-    if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
-    {
-        // discard this payload
-        return readFromFile(fp);
+        if (!_blockList.empty() && _blockList.count(payloadType()) > 0)
+        {
+            readNextPacket = true;
+        }
     }
 
     _rtpParsed = false;
+    assert(_memSize > _datagramLen);
+    _payloadLen = 1;  // Set the length to 1 byte.
     return packetLen;
 
 }
@@ -191,3 +196,9 @@ int NETEQTEST_DummyRTPpacket::writeToFile(FILE *fp)
 
 }
 
+void NETEQTEST_DummyRTPpacket::parseHeader() {
+  NETEQTEST_RTPpacket::parseHeader();
+  // Change _payloadLen to 1 byte. The memory should always be big enough.
+  assert(_memSize > _datagramLen);
+  _payloadLen = 1;
+}