Chromium Code Reviews| Index: media/filters/chunk_demuxer.cc |
| diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc |
| index 9b1bbd7fdaec9dae76d16d10455f03a10be56719..4c287433d647d2348131031f5c39de3500c7c1a5 100644 |
| --- a/media/filters/chunk_demuxer.cc |
| +++ b/media/filters/chunk_demuxer.cc |
| @@ -15,8 +15,10 @@ |
| #include "base/macros.h" |
| #include "base/metrics/histogram_macros.h" |
| #include "base/stl_util.h" |
| +#include "base/strings/string_number_conversions.h" |
| #include "media/base/audio_decoder_config.h" |
| #include "media/base/bind_to_current_loop.h" |
| +#include "media/base/media_tracks.h" |
| #include "media/base/stream_parser_buffer.h" |
| #include "media/base/timestamp_constants.h" |
| #include "media/base/video_decoder_config.h" |
| @@ -28,13 +30,14 @@ using base::TimeDelta; |
| namespace media { |
| ChunkDemuxerStream::ChunkDemuxerStream(Type type, |
| - bool splice_frames_enabled) |
| + bool splice_frames_enabled, |
| + MediaTrack::Id media_track_id) |
| : type_(type), |
| liveness_(DemuxerStream::LIVENESS_UNKNOWN), |
| + media_track_id_(media_track_id), |
| state_(UNINITIALIZED), |
| splice_frames_enabled_(splice_frames_enabled), |
| - partial_append_window_trimming_enabled_(false) { |
| -} |
| + partial_append_window_trimming_enabled_(false) {} |
| void ChunkDemuxerStream::StartReturningData() { |
| DVLOG(1) << "ChunkDemuxerStream::StartReturningData()"; |
| @@ -1003,26 +1006,39 @@ void ChunkDemuxer::OnSourceInitDone( |
| base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK); |
| } |
| +// static |
| +MediaTrack::Id ChunkDemuxer::GenerateMediaTrackId() { |
| + static unsigned g_trackCount = 0; |
|
xhwang
2016/06/10 17:06:54
g_track_count
servolk
2016/06/10 22:05:25
Done.
|
| + return base::UintToString(++g_trackCount); |
| +} |
| + |
| ChunkDemuxerStream* ChunkDemuxer::CreateDemuxerStream( |
| DemuxerStream::Type type) { |
| + // New ChunkDemuxerStreams can be created only during initialization segment |
| + // processing, which happens when a new chunk of data is appended and the |
| + // lock_ must be held by ChunkDemuxer::AppendData. |
| + lock_.AssertAcquired(); |
| + |
| + MediaTrack::Id media_track_id = GenerateMediaTrackId(); |
| + |
| switch (type) { |
| case DemuxerStream::AUDIO: |
| if (audio_) |
| return NULL; |
| - audio_.reset( |
| - new ChunkDemuxerStream(DemuxerStream::AUDIO, splice_frames_enabled_)); |
| + audio_.reset(new ChunkDemuxerStream( |
| + DemuxerStream::AUDIO, splice_frames_enabled_, media_track_id)); |
| return audio_.get(); |
| break; |
| case DemuxerStream::VIDEO: |
| if (video_) |
| return NULL; |
| - video_.reset( |
| - new ChunkDemuxerStream(DemuxerStream::VIDEO, splice_frames_enabled_)); |
| + video_.reset(new ChunkDemuxerStream( |
| + DemuxerStream::VIDEO, splice_frames_enabled_, media_track_id)); |
| return video_.get(); |
| break; |
| case DemuxerStream::TEXT: { |
| - return new ChunkDemuxerStream(DemuxerStream::TEXT, |
| - splice_frames_enabled_); |
| + return new ChunkDemuxerStream(DemuxerStream::TEXT, splice_frames_enabled_, |
| + media_track_id); |
| break; |
| } |
| case DemuxerStream::UNKNOWN: |