| // Copyright 2021 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_MUXERS_FILE_WEBM_MUXER_DELEGATE_H_ |
| #define MEDIA_MUXERS_FILE_WEBM_MUXER_DELEGATE_H_ |
| |
| #include "base/files/file.h" |
| #include "base/thread_annotations.h" |
| #include "media/base/media_export.h" |
| #include "media/muxers/webm_muxer.h" |
| |
| namespace media { |
| |
| // Defines a delegate for WebmMuxer that provides a seekable file-based |
| // implementation of the |mkvmuxer::IMkvWriter| interface. This allows a |
| // SeekHead element to be written to the given |webm_file| once the muxer is |
| // flushed and finalized. This allows video players to be able to seek through |
| // the video and jump to any arbitrary position. |
| class MEDIA_EXPORT FileWebmMuxerDelegate : public WebmMuxer::Delegate { |
| public: |
| // |webm_file| must be an already valid opened file ready for writing. |
| explicit FileWebmMuxerDelegate(base::File webm_file); |
| FileWebmMuxerDelegate(const FileWebmMuxerDelegate&) = delete; |
| FileWebmMuxerDelegate& operator=(const FileWebmMuxerDelegate&) = delete; |
| ~FileWebmMuxerDelegate() override; |
| |
| // WebmMuxer::Delegate: |
| void InitSegment(mkvmuxer::Segment* segment) override; |
| |
| // mkvmuxer::IMkvWriter: |
| mkvmuxer::int64 Position() const override; |
| mkvmuxer::int32 Position(mkvmuxer::int64 position) override; |
| bool Seekable() const override; |
| void ElementStartNotify(mkvmuxer::uint64 element_id, |
| mkvmuxer::int64 position) override; |
| |
| protected: |
| // WebmMuxerDelegate: |
| mkvmuxer::int32 DoWrite(const void* buf, mkvmuxer::uint32 len) override; |
| |
| private: |
| base::File webm_file_ GUARDED_BY_CONTEXT(sequence_checker_); |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_MUXERS_FILE_WEBM_MUXER_DELEGATE_H_ |