123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- // Copyright 2017 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef MEDIA_TEST_TEST_MEDIA_SOURCE_H_
- #define MEDIA_TEST_TEST_MEDIA_SOURCE_H_
- #include <limits>
- #include "base/memory/raw_ptr.h"
- #include "base/time/time.h"
- #include "media/base/demuxer.h"
- #include "media/base/media_util.h"
- #include "media/base/pipeline_status.h"
- #include "media/filters/chunk_demuxer.h"
- #include "testing/gmock/include/gmock/gmock.h"
- namespace media {
- // Indicates that the whole file should be appended.
- constexpr size_t kAppendWholeFile = std::numeric_limits<size_t>::max();
- // Helper class that emulates calls made on the ChunkDemuxer by the
- // Media Source API.
- class TestMediaSource {
- public:
- enum class ExpectedAppendResult {
- kSuccess,
- kFailure,
- kSuccessOrFailure, // e.g., for fuzzing when parse may pass or fail
- };
- TestMediaSource(const std::string& filename,
- const std::string& mimetype,
- size_t initial_append_size,
- bool initial_sequence_mode = false);
- // Same as the constructor above, but use GetMimeTypeForFile() to get the mime
- // type.
- TestMediaSource(const std::string& filename,
- size_t initial_append_size,
- bool initial_sequence_mode = false);
- TestMediaSource(scoped_refptr<DecoderBuffer> data,
- const std::string& mimetype,
- size_t initial_append_size,
- bool initial_sequence_mode = false);
- TestMediaSource(const TestMediaSource&) = delete;
- TestMediaSource& operator=(const TestMediaSource&) = delete;
- ~TestMediaSource();
- std::unique_ptr<Demuxer> GetDemuxer();
- void set_encrypted_media_init_data_cb(
- const Demuxer::EncryptedMediaInitDataCB& encrypted_media_init_data_cb) {
- encrypted_media_init_data_cb_ = encrypted_media_init_data_cb;
- }
- void set_demuxer_failure_cb(const PipelineStatusCB& demuxer_failure_cb) {
- demuxer_failure_cb_ = demuxer_failure_cb;
- }
- void set_do_eos_after_next_append(bool flag) {
- do_eos_after_next_append_ = flag;
- }
- void SetAppendWindow(base::TimeDelta timestamp_offset,
- base::TimeDelta append_window_start,
- base::TimeDelta append_window_end);
- void Seek(base::TimeDelta seek_time,
- size_t new_position,
- size_t seek_append_size);
- void Seek(base::TimeDelta seek_time);
- void SetSequenceMode(bool sequence_mode);
- void AppendData(size_t size);
- bool AppendAtTime(base::TimeDelta timestamp_offset,
- const uint8_t* pData,
- int size);
- void AppendAtTimeWithWindow(base::TimeDelta timestamp_offset,
- base::TimeDelta append_window_start,
- base::TimeDelta append_window_end,
- const uint8_t* pData,
- int size);
- void SetMemoryLimits(size_t limit_bytes);
- bool EvictCodedFrames(base::TimeDelta currentMediaTime, size_t newDataSize);
- void RemoveRange(base::TimeDelta start, base::TimeDelta end);
- void EndOfStream();
- void UnmarkEndOfStream();
- void Shutdown();
- void DemuxerOpened();
- void DemuxerOpenedTask();
- ChunkDemuxer::Status AddId();
- void ChangeType(const std::string& type);
- void OnEncryptedMediaInitData(EmeInitDataType init_data_type,
- const std::vector<uint8_t>& init_data);
- base::TimeDelta last_timestamp_offset() const {
- return last_timestamp_offset_;
- }
- void set_expected_append_result(ExpectedAppendResult expectation) {
- expected_append_result_ = expectation;
- }
- void InitSegmentReceived(std::unique_ptr<MediaTracks> tracks);
- MOCK_METHOD1(InitSegmentReceivedMock, void(std::unique_ptr<MediaTracks>&));
- MOCK_METHOD1(OnParseWarningMock, void(const SourceBufferParseWarning));
- private:
- void VerifyExpectedAppendResult(bool append_result);
- NullMediaLog media_log_;
- scoped_refptr<DecoderBuffer> file_data_;
- size_t current_position_;
- size_t initial_append_size_;
- bool initial_sequence_mode_;
- std::string mimetype_;
- raw_ptr<ChunkDemuxer> chunk_demuxer_;
- std::unique_ptr<Demuxer> owned_chunk_demuxer_;
- PipelineStatusCB demuxer_failure_cb_;
- Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb_;
- base::TimeDelta last_timestamp_offset_;
- base::TimeDelta append_window_start_;
- base::TimeDelta append_window_end_ = kInfiniteDuration;
- bool do_eos_after_next_append_ = false;
- ExpectedAppendResult expected_append_result_ = ExpectedAppendResult::kSuccess;
- };
- } // namespace media
- #endif // MEDIA_TEST_TEST_MEDIA_SOURCE_H_
|