summaryrefslogtreecommitdiff
path: root/m2ts
diff options
context:
space:
mode:
authorTom Finegan <tomfinegan@google.com>2016-08-05 10:59:39 -0700
committerTom Finegan <tomfinegan@google.com>2016-08-08 11:15:29 -0700
commite1fe7627c81418cb9a58b809ad37fe60cb2b6db0 (patch)
tree49910a75b8d790737b94dd59fe599155599b4963 /m2ts
parent1b24a792e3f14c170735431fd9df5943ac6c42a0 (diff)
downloadlibwebm-e1fe7627c81418cb9a58b809ad37fe60cb2b6db0.tar.gz
webm2pes: Add test for mux/demux of large input.
Change-Id: I253aa49aa3757682dbba83bd9ba6dd1e93d7ccce
Diffstat (limited to 'm2ts')
-rw-r--r--m2ts/tests/webm2pes_tests.cc33
1 files changed, 33 insertions, 0 deletions
diff --git a/m2ts/tests/webm2pes_tests.cc b/m2ts/tests/webm2pes_tests.cc
index f852510..aa15181 100644
--- a/m2ts/tests/webm2pes_tests.cc
+++ b/m2ts/tests/webm2pes_tests.cc
@@ -10,6 +10,7 @@
#include <cstddef>
#include <cstdint>
#include <cstdio>
+#include <cstring>
#include <limits>
#include <string>
#include <vector>
@@ -107,6 +108,38 @@ TEST_F(Webm2PesTests, CanParseFirstPacket) {
EXPECT_TRUE(parser()->ParseNextPacket(&header, &frame));
}
+TEST_F(Webm2PesTests, CanMuxLargeBuffers) {
+ const std::size_t kBufferSize = 100 * 1024;
+ const std::int64_t kFakeTimestamp = libwebm::kNanosecondsPerSecond;
+ libwebm::VideoFrame fake_frame(kFakeTimestamp, libwebm::VideoFrame::kVP9);
+ ASSERT_TRUE(fake_frame.Init(kBufferSize));
+ std::memset(fake_frame.buffer().data.get(), 0x80, kBufferSize);
+ ASSERT_TRUE(fake_frame.SetBufferLength(kBufferSize));
+ libwebm::PacketDataBuffer pes_packet_buffer;
+ ASSERT_TRUE(
+ libwebm::Webm2Pes::WritePesPacket(fake_frame, &pes_packet_buffer));
+
+ // TODO(tomfinegan): Change VpxPesParser so it can read from a buffer, and get
+ // rid of this extra step.
+ libwebm::FilePtr pes_file(std::fopen(pes_file_name().c_str(), "wb"),
+ libwebm::FILEDeleter());
+ ASSERT_EQ(pes_packet_buffer.size(),
+ fwrite(&pes_packet_buffer[0], 1, pes_packet_buffer.size(),
+ pes_file.get()));
+ fclose(pes_file.get());
+ pes_file.release();
+
+ libwebm::VpxPesParser parser;
+ ASSERT_TRUE(parser.Open(pes_file_name()));
+ libwebm::VpxPesParser::PesHeader header;
+ libwebm::VideoFrame parsed_frame;
+ ASSERT_TRUE(parser.ParseNextPacket(&header, &parsed_frame));
+ EXPECT_EQ(fake_frame.nanosecond_pts(), parsed_frame.nanosecond_pts());
+ EXPECT_EQ(fake_frame.buffer().length, parsed_frame.buffer().length);
+ EXPECT_EQ(0, std::memcmp(fake_frame.buffer().data.get(),
+ parsed_frame.buffer().data.get(), kBufferSize));
+}
+
} // namespace
int main(int argc, char* argv[]) {