diff options
author | Tom Finegan <tomfinegan@google.com> | 2016-08-05 10:59:39 -0700 |
---|---|---|
committer | Tom Finegan <tomfinegan@google.com> | 2016-08-08 11:15:29 -0700 |
commit | e1fe7627c81418cb9a58b809ad37fe60cb2b6db0 (patch) | |
tree | 49910a75b8d790737b94dd59fe599155599b4963 /m2ts | |
parent | 1b24a792e3f14c170735431fd9df5943ac6c42a0 (diff) | |
download | libwebm-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.cc | 33 |
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[]) { |