Index: media/filters/media_source_state.h |
diff --git a/media/filters/media_source_state.h b/media/filters/media_source_state.h |
deleted file mode 100644 |
index 0e1012f18835cdd039342f24cd0f02ab112fd1de..0000000000000000000000000000000000000000 |
--- a/media/filters/media_source_state.h |
+++ /dev/null |
@@ -1,229 +0,0 @@ |
-// Copyright (c) 2016 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_FILTERS_MEDIA_SOURCE_STATE_H_ |
-#define MEDIA_FILTERS_MEDIA_SOURCE_STATE_H_ |
- |
-#include <list> |
- |
-#include "base/bind.h" |
-#include "base/macros.h" |
-#include "media/base/audio_codecs.h" |
-#include "media/base/demuxer.h" |
-#include "media/base/demuxer_stream.h" |
-#include "media/base/media_export.h" |
-#include "media/base/media_log.h" |
-#include "media/base/stream_parser.h" |
-#include "media/base/stream_parser_buffer.h" |
-#include "media/base/video_codecs.h" |
- |
-namespace media { |
- |
-using base::TimeDelta; |
- |
-class ChunkDemuxerStream; |
-class FrameProcessor; |
- |
-// Contains state belonging to a source id. |
-class MEDIA_EXPORT MediaSourceState { |
- public: |
- // Callback signature used to create ChunkDemuxerStreams. |
- typedef base::Callback<ChunkDemuxerStream*(DemuxerStream::Type)> |
- CreateDemuxerStreamCB; |
- |
- typedef base::Callback<void(ChunkDemuxerStream*, const TextTrackConfig&)> |
- NewTextTrackCB; |
- |
- MediaSourceState(std::unique_ptr<StreamParser> stream_parser, |
- std::unique_ptr<FrameProcessor> frame_processor, |
- const CreateDemuxerStreamCB& create_demuxer_stream_cb, |
- const scoped_refptr<MediaLog>& media_log); |
- |
- ~MediaSourceState(); |
- |
- void Init(const StreamParser::InitCB& init_cb, |
- const std::string& expected_codecs, |
- const StreamParser::EncryptedMediaInitDataCB& |
- encrypted_media_init_data_cb, |
- const NewTextTrackCB& new_text_track_cb); |
- |
- // Appends new data to the StreamParser. |
- // Returns true if the data was successfully appended. Returns false if an |
- // error occurred. |*timestamp_offset| is used and possibly updated by the |
- // append. |append_window_start| and |append_window_end| correspond to the MSE |
- // spec's similarly named source buffer attributes that are used in coded |
- // frame processing. |
- bool Append(const uint8_t* data, |
- size_t length, |
- TimeDelta append_window_start, |
- TimeDelta append_window_end, |
- TimeDelta* timestamp_offset); |
- |
- // Aborts the current append sequence and resets the parser. |
- void ResetParserState(TimeDelta append_window_start, |
- TimeDelta append_window_end, |
- TimeDelta* timestamp_offset); |
- |
- // Calls Remove(|start|, |end|, |duration|) on all |
- // ChunkDemuxerStreams managed by this object. |
- void Remove(TimeDelta start, TimeDelta end, TimeDelta duration); |
- |
- // If the buffer is full, attempts to try to free up space, as specified in |
- // the "Coded Frame Eviction Algorithm" in the Media Source Extensions Spec. |
- // Returns false iff buffer is still full after running eviction. |
- // https://w3c.github.io/media-source/#sourcebuffer-coded-frame-eviction |
- bool EvictCodedFrames(DecodeTimestamp media_time, size_t newDataSize); |
- |
- // Returns true if currently parsing a media segment, or false otherwise. |
- bool parsing_media_segment() const { return parsing_media_segment_; } |
- |
- // Sets |frame_processor_|'s sequence mode to |sequence_mode|. |
- void SetSequenceMode(bool sequence_mode); |
- |
- // Signals the coded frame processor to update its group start timestamp to be |
- // |timestamp_offset| if it is in sequence append mode. |
- void SetGroupStartTimestampIfInSequenceMode(base::TimeDelta timestamp_offset); |
- |
- // Returns the range of buffered data in this source, capped at |duration|. |
- // |ended| - Set to true if end of stream has been signaled and the special |
- // end of stream range logic needs to be executed. |
- Ranges<TimeDelta> GetBufferedRanges(TimeDelta duration, bool ended) const; |
- |
- // Returns the highest PTS of currently buffered frames in this source, or |
- // base::TimeDelta() if none of the streams contain buffered data. |
- TimeDelta GetHighestPresentationTimestamp() const; |
- |
- // Returns the highest buffered duration across all streams managed |
- // by this object. |
- // Returns TimeDelta() if none of the streams contain buffered data. |
- TimeDelta GetMaxBufferedDuration() const; |
- |
- // Helper methods that call methods with similar names on all the |
- // ChunkDemuxerStreams managed by this object. |
- void StartReturningData(); |
- void AbortReads(); |
- void Seek(TimeDelta seek_time); |
- void CompletePendingReadIfPossible(); |
- void OnSetDuration(TimeDelta duration); |
- void MarkEndOfStream(); |
- void UnmarkEndOfStream(); |
- void Shutdown(); |
- // Sets the memory limit on each stream of a specific type. |
- // |memory_limit| is the maximum number of bytes each stream of type |type| |
- // is allowed to hold in its buffer. |
- void SetMemoryLimits(DemuxerStream::Type type, size_t memory_limit); |
- bool IsSeekWaitingForData() const; |
- |
- using RangesList = std::vector<Ranges<TimeDelta>>; |
- static Ranges<TimeDelta> ComputeRangesIntersection( |
- const RangesList& active_ranges, |
- bool ended); |
- |
- void SetTracksWatcher(const Demuxer::MediaTracksUpdatedCB& tracks_updated_cb); |
- |
- private: |
- // State advances through this list. The intent is to ensure at least one |
- // config is received prior to parser calling initialization callback, and |
- // that such initialization callback occurs at most once per parser. |
- enum State { |
- UNINITIALIZED = 0, |
- PENDING_PARSER_CONFIG, |
- PENDING_PARSER_INIT, |
- PARSER_INITIALIZED |
- }; |
- |
- // Called by the |stream_parser_| when a new initialization segment is |
- // encountered. |
- // Returns true on a successful call. Returns false if an error occurred while |
- // processing decoder configurations. |
- bool OnNewConfigs(std::string expected_codecs, |
- std::unique_ptr<MediaTracks> tracks, |
- const StreamParser::TextTrackConfigMap& text_configs); |
- |
- // Called by the |stream_parser_| at the beginning of a new media segment. |
- void OnNewMediaSegment(); |
- |
- // Called by the |stream_parser_| at the end of a media segment. |
- void OnEndOfMediaSegment(); |
- |
- // Called by the |stream_parser_| when new buffers have been parsed. |
- // It processes the new buffers using |frame_processor_|, which includes |
- // appending the processed frames to associated demuxer streams for each |
- // frame's track. |
- // Returns true on a successful call. Returns false if an error occurred while |
- // processing the buffers. |
- bool OnNewBuffers(const StreamParser::BufferQueueMap& buffer_queue_map); |
- |
- void OnSourceInitDone(const StreamParser::InitParameters& params); |
- |
- // Sets memory limits for all demuxer streams. |
- void SetStreamMemoryLimits(); |
- |
- // Tracks the number of MEDIA_LOGs emitted for segments missing expected audio |
- // or video blocks. Useful to prevent log spam. |
- int num_missing_track_logs_ = 0; |
- |
- CreateDemuxerStreamCB create_demuxer_stream_cb_; |
- NewTextTrackCB new_text_track_cb_; |
- |
- // During Append(), if OnNewBuffers() coded frame processing updates the |
- // timestamp offset then |*timestamp_offset_during_append_| is also updated |
- // so Append()'s caller can know the new offset. This pointer is only non-NULL |
- // during the lifetime of an Append() call. |
- TimeDelta* timestamp_offset_during_append_; |
- |
- // During Append(), coded frame processing triggered by OnNewBuffers() |
- // requires these two attributes. These are only valid during the lifetime of |
- // an Append() call. |
- TimeDelta append_window_start_during_append_; |
- TimeDelta append_window_end_during_append_; |
- |
- // Keeps track of whether a media segment is being parsed. |
- bool parsing_media_segment_; |
- |
- // Valid only while |parsing_media_segment_| is true. These flags enable |
- // warning when the parsed media segment doesn't have frames for some track. |
- std::map<StreamParser::TrackId, bool> media_segment_has_data_for_track_; |
- |
- // The object used to parse appended data. |
- std::unique_ptr<StreamParser> stream_parser_; |
- |
- // Note that ChunkDemuxerStreams are created and owned by the parent |
- // ChunkDemuxer. They are not owned by |this|. |
- using DemuxerStreamMap = std::map<StreamParser::TrackId, ChunkDemuxerStream*>; |
- DemuxerStreamMap audio_streams_; |
- DemuxerStreamMap video_streams_; |
- DemuxerStreamMap text_streams_; |
- |
- std::unique_ptr<FrameProcessor> frame_processor_; |
- scoped_refptr<MediaLog> media_log_; |
- StreamParser::InitCB init_cb_; |
- |
- State state_; |
- |
- // During Append(), OnNewConfigs() will trigger the initialization segment |
- // received algorithm. Note, the MSE spec explicitly disallows this algorithm |
- // during an Abort(), since Abort() is allowed only to emit coded frames, and |
- // only if the parser is PARSING_MEDIA_SEGMENT (not an INIT segment). So we |
- // also have a flag here that indicates if Append is in progress and we can |
- // invoke this callback. |
- Demuxer::MediaTracksUpdatedCB init_segment_received_cb_; |
- bool append_in_progress_ = false; |
- bool first_init_segment_received_ = false; |
- |
- std::vector<AudioCodec> expected_audio_codecs_; |
- std::vector<VideoCodec> expected_video_codecs_; |
- |
- // Indicates that timestampOffset should be updated automatically during |
- // OnNewBuffers() based on the earliest end timestamp of the buffers provided. |
- // TODO(wolenetz): Refactor this function while integrating April 29, 2014 |
- // changes to MSE spec. See http://crbug.com/371499. |
- bool auto_update_timestamp_offset_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MediaSourceState); |
-}; |
- |
-} // namespace media |
- |
-#endif // MEDIA_FILTERS_MEDIA_SOURCE_STATE_H_ |