// Copyright (c) 2016 The WebM project authors. All Rights Reserved. // // Use of this source code is governed by a BSD-style license // that can be found in the LICENSE file in the root of the source // tree. An additional intellectual property rights grant can be found // in the file PATENTS. All contributing project authors may // be found in the AUTHORS file in the root of the source tree. #ifndef LIBWEBM_TESTING_TEST_UTIL_H_ #define LIBWEBM_TESTING_TEST_UTIL_H_ #include #include #include namespace mkvparser { class IMkvReader; class MkvReader; class Segment; } // namespace mkvparser namespace test { // constants for muxer and parser tests const char kAppString[] = "mkvmuxer_unit_tests"; const char kOpusCodecId[] = "A_OPUS"; const char kVorbisCodecId[] = "A_VORBIS"; const int kAudioTrackNumber = 2; const int kBitDepth = 2; const int kChannels = 2; const double kDuration = 2.345; const int kFrameLength = 10; const int kHeight = 180; const int kInvalidTrackNumber = 100; const std::uint64_t kOpusCodecDelay = 6500000; const std::size_t kOpusPrivateDataSizeMinimum = 19; const std::uint64_t kOpusSeekPreroll = 80000000; const char kMetadataCodecId[] = "D_WEBVTT/METADATA"; const int kMetadataTrackNumber = 3; const int kMetadataTrackType = 0x21; const int kSampleRate = 30; const int kTimeCodeScale = 1000; const char kTrackName[] = "unit_test"; const char kVP8CodecId[] = "V_VP8"; const char kVP9CodecId[] = "V_VP9"; const double kVideoFrameRate = 0.5; const int kVideoTrackNumber = 1; const int kWidth = 320; // Returns the path to the test data directory by reading and returning the // contents the LIBWEBM_TESTDATA_DIR environment variable. std::string GetTestDataDir(); // Returns the absolute path to the file of |name| in LIBWEBM_TESTDATA_DIR. std::string GetTestFilePath(const std::string& name); // Byte-wise comparison of two files |file1| and |file2|. Returns true if the // files match exactly, false otherwise. bool CompareFiles(const std::string& file1, const std::string& file2); // Returns true and sets |cues_offset| to the cues location within the MKV file // parsed by |segment| when the MKV file has cue points. bool HasCuePoints(const mkvparser::Segment* segment, std::int64_t* cues_offset); // Validates cue points. Assumes caller has already called Load() on |segment|. // Returns true when: // All cue points point at clusters, OR // Data parsed by |segment| has no cue points. bool ValidateCues(mkvparser::Segment* segment, mkvparser::IMkvReader* reader); // Parses |webm_file| using mkvparser and returns true when file parses // successfully (all clusters and blocks can be successfully walked). Second // variant allows further interaction with the parsed file via transferring // ownership of the mkvparser Segment and MkvReader to the caller via // |parser_out|. struct MkvParser { MkvParser() = default; ~MkvParser(); mkvparser::Segment* segment = nullptr; mkvparser::MkvReader* reader = nullptr; }; bool ParseMkvFile(const std::string& webm_file); bool ParseMkvFileReleaseParser(const std::string& webm_file, MkvParser* parser_out); } // namespace test #endif // LIBWEBM_TESTING_TEST_UTIL_H_