| // 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_LIVE_WEBM_MUXER_DELEGATE_H_ |
| #define MEDIA_MUXERS_LIVE_WEBM_MUXER_DELEGATE_H_ |
| |
| #include "base/callback.h" |
| #include "base/strings/string_piece.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 live-mode non-seekable |
| // implementation of the |mkvmuxer::IMkvWriter| interface. The output of the |
| // muxer writer will be provided to the client by repeated invoking the given |
| // |write_data_callback|. |
| class MEDIA_EXPORT LiveWebmMuxerDelegate : public WebmMuxer::Delegate { |
| public: |
| // Defines the type of a callback to be called when WebmMuxer is ready to |
| // write a chunk of data. |
| using WriteDataCB = base::RepeatingCallback<void(base::StringPiece)>; |
| |
| explicit LiveWebmMuxerDelegate(WriteDataCB write_data_callback); |
| LiveWebmMuxerDelegate(const LiveWebmMuxerDelegate&) = delete; |
| LiveWebmMuxerDelegate& operator=(const LiveWebmMuxerDelegate&) = delete; |
| ~LiveWebmMuxerDelegate() 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: |
| // Callback to dump written data as being called by libwebm. |
| const WriteDataCB write_data_callback_ GUARDED_BY_CONTEXT(sequence_checker_); |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_MUXERS_LIVE_WEBM_MUXER_DELEGATE_H_ |