diff --git a/resources/video_coding/pltype103_header_only.rtp.sha1 b/resources/video_coding/pltype103_header_only.rtp.sha1 new file mode 100644 index 0000000000..eee5aa9f7b --- /dev/null +++ b/resources/video_coding/pltype103_header_only.rtp.sha1 @@ -0,0 +1 @@ +2a77f0d030aa96f51f0a96e971b42c3b11fe006b \ No newline at end of file diff --git a/webrtc/test/rtp_file_reader.cc b/webrtc/test/rtp_file_reader.cc index be8dc2bc8f..fd3116ebb3 100644 --- a/webrtc/test/rtp_file_reader.cc +++ b/webrtc/test/rtp_file_reader.cc @@ -16,6 +16,7 @@ #include #include +#include "webrtc/base/checks.h" #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" #include "webrtc/system_wrappers/interface/scoped_ptr.h" @@ -113,13 +114,17 @@ class RtpDumpReader : public RtpFileReaderImpl { // Use 'len' here because a 'plen' of 0 specifies rtcp. len -= kPacketHeaderSize; if (packet->length < len) { - return false; + FATAL() << "Packet is too large to fit: " << len << " bytes vs " + << packet->length + << " bytes allocated. Consider increasing the buffer " + "size"; } if (fread(rtp_data, 1, len, file_) != len) { return false; } packet->length = len; + packet->original_length = plen; packet->time_ms = offset; return true; } @@ -290,6 +295,7 @@ class PcapReader : public RtpFileReaderImpl { if (NextPcap(packet->data, &length, &packet->time_ms) != kResultSuccess) return false; packet->length = static_cast(length); + packet->original_length = packet->length; return true; } diff --git a/webrtc/test/rtp_file_reader.h b/webrtc/test/rtp_file_reader.h index 379bf2d7a5..095ce76726 100644 --- a/webrtc/test/rtp_file_reader.h +++ b/webrtc/test/rtp_file_reader.h @@ -24,9 +24,14 @@ class RtpFileReader { }; struct Packet { - static const size_t kMaxPacketBufferSize = 1500; + // Accommodate for 50 ms packets of 32 kHz PCM16 samples (3200 bytes) plus + // some overhead. + static const size_t kMaxPacketBufferSize = 3500; uint8_t data[kMaxPacketBufferSize]; size_t length; + // The length the packet had on wire. Will be different from |length| when + // reading a header-only RTP dump. + size_t original_length; uint32_t time_ms; }; diff --git a/webrtc/test/rtp_file_reader_unittest.cc b/webrtc/test/rtp_file_reader_unittest.cc index b5fa260c7d..54fb874b63 100644 --- a/webrtc/test/rtp_file_reader_unittest.cc +++ b/webrtc/test/rtp_file_reader_unittest.cc @@ -20,28 +20,40 @@ namespace webrtc { class TestRtpFileReader : public ::testing::Test { public: - void Init(const std::string& filename) { + void Init(const std::string& filename, bool headers_only_file) { std::string filepath = test::ResourcePath("video_coding/" + filename, "rtp"); rtp_packet_source_.reset( test::RtpFileReader::Create(test::RtpFileReader::kRtpDump, filepath)); ASSERT_TRUE(rtp_packet_source_.get() != NULL); + headers_only_file_ = headers_only_file; } int CountRtpPackets() { test::RtpFileReader::Packet packet; int c = 0; - while (rtp_packet_source_->NextPacket(&packet)) + while (rtp_packet_source_->NextPacket(&packet)) { + if (headers_only_file_) + EXPECT_LT(packet.length, packet.original_length); + else + EXPECT_EQ(packet.length, packet.original_length); c++; + } return c; } private: scoped_ptr rtp_packet_source_; + bool headers_only_file_; }; TEST_F(TestRtpFileReader, Test60Packets) { - Init("pltype103"); + Init("pltype103", false); + EXPECT_EQ(60, CountRtpPackets()); +} + +TEST_F(TestRtpFileReader, Test60PacketsHeaderOnly) { + Init("pltype103_header_only", true); EXPECT_EQ(60, CountRtpPackets()); } @@ -60,8 +72,10 @@ class TestPcapFileReader : public ::testing::Test { int CountRtpPackets() { int c = 0; test::RtpFileReader::Packet packet; - while (rtp_packet_source_->NextPacket(&packet)) + while (rtp_packet_source_->NextPacket(&packet)) { + EXPECT_EQ(packet.length, packet.original_length); c++; + } return c; } diff --git a/webrtc/test/webrtc_test_common.gyp b/webrtc/test/webrtc_test_common.gyp index d422a4b0d3..477ec0fc1a 100644 --- a/webrtc/test/webrtc_test_common.gyp +++ b/webrtc/test/webrtc_test_common.gyp @@ -58,6 +58,7 @@ 'dependencies': [ '<(DEPTH)/testing/gtest.gyp:gtest', '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', + '<(webrtc_root)/base/base.gyp:rtc_base', '<(webrtc_root)/modules/modules.gyp:media_file', '<(webrtc_root)/modules/modules.gyp:video_capture_module_impl', '<(webrtc_root)/modules/modules.gyp:video_render_module_impl',