Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(431)

Unified Diff: media/filters/media_source_state.h

Issue 2379653004: Rename MediaSourceState -> SourceBufferState (Closed)
Patch Set: nits Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/filters/frame_processor.cc ('k') | media/filters/media_source_state.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « media/filters/frame_processor.cc ('k') | media/filters/media_source_state.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698