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

Unified Diff: media/filters/chunk_demuxer.cc

Issue 2050043002: Generate and assign media track ids in demuxers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@use-streamparser-trackid
Patch Set: Created 4 years, 6 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
Index: media/filters/chunk_demuxer.cc
diff --git a/media/filters/chunk_demuxer.cc b/media/filters/chunk_demuxer.cc
index 9b1bbd7fdaec9dae76d16d10455f03a10be56719..74ab8c1a9c5ece30c3686070c164b5653339734a 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::TrackId 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()";
@@ -372,7 +375,8 @@ ChunkDemuxer::ChunkDemuxer(
splice_frames_enabled_(splice_frames_enabled),
detected_audio_track_count_(0),
detected_video_track_count_(0),
- detected_text_track_count_(0) {
+ detected_text_track_count_(0),
+ next_track_id_(1) {
DCHECK(!open_cb_.is_null());
DCHECK(!encrypted_media_init_data_cb_.is_null());
}
@@ -565,6 +569,14 @@ void ChunkDemuxer::SetTracksWatcher(
source_state_map_[id]->SetTracksWatcher(tracks_updated_cb);
}
+const DemuxerStream* ChunkDemuxer::GetDemuxerStreamByTrackId(
+ MediaTrack::TrackId track_id) const {
+ base::AutoLock auto_lock(lock_);
+ auto it = track_id_to_demux_stream_map_.find(track_id);
+ DCHECK(it != track_id_to_demux_stream_map_.end());
+ return it->second;
+}
+
void ChunkDemuxer::RemoveId(const std::string& id) {
base::AutoLock auto_lock(lock_);
CHECK(IsValidId(id));
@@ -1005,24 +1017,33 @@ void ChunkDemuxer::OnSourceInitDone(
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::TrackId media_track_id = base::UintToString(next_track_id_++);
+
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));
+ track_id_to_demux_stream_map_[media_track_id] = audio_.get();
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));
+ track_id_to_demux_stream_map_[media_track_id] = video_.get();
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:

Powered by Google App Engine
This is Rietveld 408576698