| Index: media/filters/chunk_demuxer.h
|
| diff --git a/media/filters/chunk_demuxer.h b/media/filters/chunk_demuxer.h
|
| index 3d0409e90f74051a1852a25ca07df48d404f7dd4..1147d6898c67e35aba0842653d87ffffad6efbe6 100644
|
| --- a/media/filters/chunk_demuxer.h
|
| +++ b/media/filters/chunk_demuxer.h
|
| @@ -10,6 +10,7 @@
|
|
|
| #include <deque>
|
| #include <map>
|
| +#include <set>
|
| #include <string>
|
| #include <utility>
|
| #include <vector>
|
| @@ -217,8 +218,9 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer {
|
| // kNotSupported is returned if |type| is not a supported format.
|
| // kReachedIdLimit is returned if the demuxer cannot handle another ID right
|
| // now.
|
| - Status AddId(const std::string& id, const std::string& type,
|
| - std::vector<std::string>& codecs);
|
| + Status AddId(const std::string& id,
|
| + const std::string& type,
|
| + const std::string& codecs);
|
|
|
| // Notifies a caller via |tracks_updated_cb| that the set of media tracks
|
| // for a given |id| has changed.
|
| @@ -344,12 +346,15 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer {
|
| bool CanEndOfStream_Locked() const;
|
|
|
| // MediaSourceState callbacks.
|
| - void OnSourceInitDone(const StreamParser::InitParameters& params);
|
| + void OnSourceInitDone(const std::string& source_id,
|
| + const StreamParser::InitParameters& params);
|
|
|
| - // Creates a DemuxerStream for the specified |type|.
|
| - // Returns a new ChunkDemuxerStream instance if a stream of this type
|
| - // has not been created before. Returns NULL otherwise.
|
| - ChunkDemuxerStream* CreateDemuxerStream(DemuxerStream::Type type);
|
| + // Creates a DemuxerStream of the specified |type| for the MediaSourceState
|
| + // with the given |source_id|.
|
| + // Returns a pointer to a new ChunkDemuxerStream instance, which is owned by
|
| + // ChunkDemuxer.
|
| + ChunkDemuxerStream* CreateDemuxerStream(const std::string& source_id,
|
| + DemuxerStream::Type type);
|
|
|
| void OnNewTextTrack(ChunkDemuxerStream* text_stream,
|
| const TextTrackConfig& config);
|
| @@ -408,12 +413,12 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer {
|
| // http://crbug.com/308226
|
| PipelineStatusCB seek_cb_;
|
|
|
| - std::unique_ptr<ChunkDemuxerStream> audio_;
|
| - std::unique_ptr<ChunkDemuxerStream> video_;
|
| + std::vector<std::unique_ptr<ChunkDemuxerStream>> audio_streams_;
|
| + std::vector<std::unique_ptr<ChunkDemuxerStream>> video_streams_;
|
|
|
| - // Counter to ensure that we do not transition too early to INITIALIZED.
|
| - // Incremented in AddId(), decremented in OnSourceInitDone().
|
| - int pending_source_init_done_count_;
|
| + // Keep track of which ids still remain uninitialized so that we transition
|
| + // into the INITIALIZED only after all ids/SourceBuffers got init segment.
|
| + std::set<std::string> pending_source_init_ids_;
|
|
|
| base::TimeDelta duration_;
|
|
|
| @@ -430,11 +435,12 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer {
|
| typedef std::map<std::string, MediaSourceState*> MediaSourceStateMap;
|
| MediaSourceStateMap source_state_map_;
|
|
|
| - // Used to ensure that (1) config data matches the type and codec provided in
|
| - // AddId(), (2) only 1 audio and 1 video sources are added, and (3) ids may be
|
| - // removed with RemoveID() but can not be re-added (yet).
|
| - std::string source_id_audio_;
|
| - std::string source_id_video_;
|
| + std::map<std::string, std::vector<ChunkDemuxerStream*>> id_to_streams_map_;
|
| + // Used to hold alive the demuxer streams that were created for removed /
|
| + // released MediaSourceState objects. Demuxer clients might still have
|
| + // references to these streams, so we need to keep them alive. But they'll be
|
| + // in a shut down state, so reading from them will return EOS.
|
| + std::vector<std::unique_ptr<ChunkDemuxerStream>> removed_streams_;
|
|
|
| // Indicates that splice frame generation is enabled.
|
| const bool splice_frames_enabled_;
|
| @@ -444,7 +450,7 @@ class MEDIA_EXPORT ChunkDemuxer : public Demuxer {
|
| int detected_video_track_count_;
|
| int detected_text_track_count_;
|
|
|
| - std::map<MediaTrack::Id, const DemuxerStream*> track_id_to_demux_stream_map_;
|
| + std::map<MediaTrack::Id, DemuxerStream*> track_id_to_demux_stream_map_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ChunkDemuxer);
|
| };
|
|
|