12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // Copyright 2020 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_FORMATS_WEBCODECS_WEBCODECS_ENCODED_CHUNK_STREAM_PARSER_H_
- #define MEDIA_FORMATS_WEBCODECS_WEBCODECS_ENCODED_CHUNK_STREAM_PARSER_H_
- #include <stdint.h>
- #include <memory>
- #include "base/memory/raw_ptr.h"
- #include "base/memory/ref_counted.h"
- #include "media/base/audio_decoder_config.h"
- #include "media/base/media_export.h"
- #include "media/base/stream_parser.h"
- #include "media/base/video_decoder_config.h"
- namespace media {
- class MEDIA_EXPORT WebCodecsEncodedChunkStreamParser : public StreamParser {
- public:
- explicit WebCodecsEncodedChunkStreamParser(
- std::unique_ptr<AudioDecoderConfig> audio_config);
- explicit WebCodecsEncodedChunkStreamParser(
- std::unique_ptr<VideoDecoderConfig> video_config);
- WebCodecsEncodedChunkStreamParser(const WebCodecsEncodedChunkStreamParser&) =
- delete;
- WebCodecsEncodedChunkStreamParser& operator=(
- const WebCodecsEncodedChunkStreamParser&) = delete;
- ~WebCodecsEncodedChunkStreamParser() override;
- // StreamParser implementation.
- void Init(InitCB init_cb,
- const NewConfigCB& config_cb,
- const NewBuffersCB& new_buffers_cb,
- bool ignore_text_tracks /* must be true */,
- const EncryptedMediaInitDataCB& encrypted_media_init_data_cb,
- const NewMediaSegmentCB& new_segment_cb,
- const EndMediaSegmentCB& end_of_segment_cb,
- MediaLog* media_log) override;
- void Flush() override;
- bool GetGenerateTimestampsFlag() const override;
- bool Parse(const uint8_t* buf, int size) override;
- // Processes and emits buffers from |buffer_queue|. If state is
- // kWaitingForConfigEmission, first emit the config.
- bool ProcessChunks(std::unique_ptr<BufferQueue> buffer_queue) override;
- private:
- enum State {
- kWaitingForInit,
- kWaitingForConfigEmission,
- kWaitingForEncodedChunks,
- kError
- };
- void ChangeState(State new_state);
- State state_;
- // These configs are populated during ctor. A copy of the appropriate config
- // is emitted on demand when "parsing" newly appended encoded chunks if that
- // append occurs when state is kWaitingForConfigEmission. Note, only one type
- // of config can be emitted (not both), for an instance of this parser.
- std::unique_ptr<AudioDecoderConfig> audio_config_;
- std::unique_ptr<VideoDecoderConfig> video_config_;
- InitCB init_cb_;
- NewConfigCB config_cb_;
- NewBuffersCB new_buffers_cb_;
- NewMediaSegmentCB new_segment_cb_;
- EndMediaSegmentCB end_of_segment_cb_;
- raw_ptr<MediaLog> media_log_;
- };
- } // namespace media
- #endif // MEDIA_FORMATS_WEBCODECS_WEBCODECS_ENCODED_CHUNK_STREAM_PARSER_H_
|