file_webm_muxer_delegate.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef MEDIA_MUXERS_FILE_WEBM_MUXER_DELEGATE_H_
  5. #define MEDIA_MUXERS_FILE_WEBM_MUXER_DELEGATE_H_
  6. #include "base/files/file.h"
  7. #include "base/thread_annotations.h"
  8. #include "media/base/media_export.h"
  9. #include "media/muxers/webm_muxer.h"
  10. namespace media {
  11. // Defines a delegate for WebmMuxer that provides a seekable file-based
  12. // implementation of the |mkvmuxer::IMkvWriter| interface. This allows a
  13. // SeekHead element to be written to the given |webm_file| once the muxer is
  14. // flushed and finalized. This allows video players to be able to seek through
  15. // the video and jump to any arbitrary position.
  16. class MEDIA_EXPORT FileWebmMuxerDelegate : public WebmMuxer::Delegate {
  17. public:
  18. // |webm_file| must be an already valid opened file ready for writing.
  19. explicit FileWebmMuxerDelegate(base::File webm_file);
  20. FileWebmMuxerDelegate(const FileWebmMuxerDelegate&) = delete;
  21. FileWebmMuxerDelegate& operator=(const FileWebmMuxerDelegate&) = delete;
  22. ~FileWebmMuxerDelegate() override;
  23. // WebmMuxer::Delegate:
  24. void InitSegment(mkvmuxer::Segment* segment) override;
  25. // mkvmuxer::IMkvWriter:
  26. mkvmuxer::int64 Position() const override;
  27. mkvmuxer::int32 Position(mkvmuxer::int64 position) override;
  28. bool Seekable() const override;
  29. void ElementStartNotify(mkvmuxer::uint64 element_id,
  30. mkvmuxer::int64 position) override;
  31. protected:
  32. // WebmMuxerDelegate:
  33. mkvmuxer::int32 DoWrite(const void* buf, mkvmuxer::uint32 len) override;
  34. private:
  35. base::File webm_file_ GUARDED_BY_CONTEXT(sequence_checker_);
  36. };
  37. } // namespace media
  38. #endif // MEDIA_MUXERS_FILE_WEBM_MUXER_DELEGATE_H_