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

Unified Diff: media/filters/chunk_demuxer.cc

Issue 1812543003: Allow muting/unmuting audio through media track API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@blink-sb-tracks6
Patch Set: rebase Created 4 years, 9 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 e13dcc1799b5b118a27720c7a4a89685babd789b..58a0d8796add6cd356f5f6320f934f7e3982e8a3 100644
--- a/media/filters/chunk_demuxer.cc
+++ b/media/filters/chunk_demuxer.cc
@@ -16,6 +16,7 @@
#include "base/stl_util.h"
#include "media/base/audio_decoder_config.h"
#include "media/base/bind_to_current_loop.h"
+#include "media/base/media_track.h"
#include "media/base/stream_parser_buffer.h"
#include "media/base/timestamp_constants.h"
#include "media/base/video_decoder_config.h"
@@ -978,32 +979,37 @@ void ChunkDemuxer::OnSourceInitDone(
base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK);
}
-ChunkDemuxerStream*
-ChunkDemuxer::CreateDemuxerStream(DemuxerStream::Type type) {
- switch (type) {
- case DemuxerStream::AUDIO:
+ChunkDemuxerStream* ChunkDemuxer::CreateDemuxerStream(
+ const MediaTrack& media_track) {
+ // Demuxer streams can only be created when ChunkDemuxer::AppendData is in
+ // progress.
+ lock_.AssertAcquired();
+ switch (media_track.type()) {
+ case MediaTrack::Audio:
if (audio_)
return NULL;
audio_.reset(
new ChunkDemuxerStream(DemuxerStream::AUDIO, splice_frames_enabled_));
+ DVLOG(5) << "Associating media_track=" << &media_track
wolenetz 2016/03/30 00:31:32 nit: level 5 is really really verbose. consider le
servolk 2016/03/30 01:13:13 Done.
+ << " with demuxer_stream=" << audio_.get();
+ track_to_stream_map_[&media_track] = audio_.get();
return audio_.get();
break;
- case DemuxerStream::VIDEO:
+ case MediaTrack::Video:
if (video_)
return NULL;
video_.reset(
new ChunkDemuxerStream(DemuxerStream::VIDEO, splice_frames_enabled_));
+ DVLOG(5) << "Associating media_track=" << &media_track
+ << " with demuxer_stream=" << video_.get();
+ track_to_stream_map_[&media_track] = video_.get();
return video_.get();
break;
- case DemuxerStream::TEXT: {
+ case MediaTrack::Text: {
return new ChunkDemuxerStream(DemuxerStream::TEXT,
splice_frames_enabled_);
break;
}
- case DemuxerStream::UNKNOWN:
- case DemuxerStream::NUM_TYPES:
- NOTREACHED();
- return NULL;
}
NOTREACHED();
return NULL;
@@ -1016,6 +1022,33 @@ void ChunkDemuxer::OnNewTextTrack(ChunkDemuxerStream* text_stream,
host_->AddTextStream(text_stream, config);
}
+void ChunkDemuxer::OnTrackIdAssigned(unsigned track_id,
+ const MediaTrack* track) {
+ // New tracks and therefore track id assignements can happen only during
+ // ChunkDemuxer::AppendData processing, which should be holding the lock.
+ lock_.AssertAcquired();
+ DVLOG(5) << "OnTrackIdAssigned track_id=" << track_id << " track=" << track;
+ if (track) {
+ DCHECK(track_id_to_track_map_.find(track_id) ==
+ track_id_to_track_map_.end());
+ track_id_to_track_map_[track_id] = track;
+ } else {
+ DCHECK(track_id_to_track_map_.find(track_id) !=
+ track_id_to_track_map_.end());
+ track_id_to_track_map_.erase(track_id);
+ }
+}
+
+const DemuxerStream* ChunkDemuxer::GetDemuxerStreamByTrackId(
+ unsigned track_id) const {
+ base::AutoLock auto_lock(lock_);
+ const auto& it1 = track_id_to_track_map_.find(track_id);
+ CHECK(it1 != track_id_to_track_map_.end());
+ const auto& it2 = track_to_stream_map_.find(it1->second);
+ CHECK(it2 != track_to_stream_map_.end());
+ return it2->second;
+}
+
bool ChunkDemuxer::IsValidId(const std::string& source_id) const {
lock_.AssertAcquired();
return source_state_map_.count(source_id) > 0u;

Powered by Google App Engine
This is Rietveld 408576698