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

Unified Diff: media/filters/ffmpeg_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: Don't call DemuxStream::type from the wrong thread Created 4 years, 8 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/ffmpeg_demuxer.cc
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index c7e00ce5c5f235becbf20499e099c406f5ded6f6..2df91d76ad54c8fc3a3378f29576cd06e1194101 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -1112,6 +1112,7 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb,
}
scoped_ptr<MediaTracks> media_tracks(new MediaTracks());
+ MediaTracks::TrackToDemuxStreamMap track_to_demux_stream_map;
AVStream* audio_stream = NULL;
AudioDecoderConfig audio_config;
AVStream* video_stream = NULL;
@@ -1221,22 +1222,25 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb,
// Note when we find our audio/video stream (we only want one of each) and
// record src= playback UMA stats for the stream's decoder config.
+ const MediaTrack* media_track = nullptr;
if (codec_type == AVMEDIA_TYPE_AUDIO) {
CHECK(!audio_stream);
audio_stream = stream;
audio_config = streams_[i]->audio_decoder_config();
RecordAudioCodecStats(audio_config);
- media_tracks->AddAudioTrack(audio_config, track_id, "main", track_label,
- track_language);
+ media_track = media_tracks->AddAudioTrack(audio_config, track_id, "main",
+ track_label, track_language);
+ track_to_demux_stream_map[media_track] = streams_[i];
} else if (codec_type == AVMEDIA_TYPE_VIDEO) {
CHECK(!video_stream);
video_stream = stream;
video_config = streams_[i]->video_decoder_config();
RecordVideoCodecStats(video_config, stream->codec->color_range);
- media_tracks->AddVideoTrack(video_config, track_id, "main", track_label,
- track_language);
+ media_track = media_tracks->AddVideoTrack(video_config, track_id, "main",
+ track_label, track_language);
+ track_to_demux_stream_map[media_track] = streams_[i];
}
max_duration = std::max(max_duration, streams_[i]->duration());
@@ -1412,6 +1416,7 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb,
metadata_event->params.SetInteger("bitrate", bitrate_);
media_log_->AddEvent(std::move(metadata_event));
+ media_tracks->set_track_to_demux_stream_map(track_to_demux_stream_map);
media_tracks_updated_cb_.Run(std::move(media_tracks));
status_cb.Run(PIPELINE_OK);
@@ -1595,4 +1600,27 @@ void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) {
}
}
+void FFmpegDemuxer::OnTrackIdsAssigned(const MediaTracks& tracks,
+ const std::vector<unsigned>& track_ids) {
+ DCHECK_EQ(tracks.tracks().size(), track_ids.size());
wolenetz 2016/04/14 20:43:39 Similarly, these two DCHECK_EQs need to be CHECK_E
servolk 2016/04/15 02:23:25 Done.
+ const auto& track_to_demux_stream = tracks.track_to_demux_stream_map();
+ DCHECK_EQ(track_to_demux_stream.size(), tracks.tracks().size());
+ for (size_t i = 0; i < track_ids.size(); ++i) {
+ const MediaTrack* track = tracks.tracks()[i].get();
+ DCHECK(track);
+ const auto& it = track_to_demux_stream.find(track);
+ DCHECK(it != track_to_demux_stream.end());
+ DVLOG(3) << "OnTrackIdsAssigned track_id=" << track_ids[i]
+ << " DemuxerStream=" << it->second;
+ track_id_to_demux_stream_[track_ids[i]] = it->second;
+ }
+}
+
+const DemuxerStream* FFmpegDemuxer::GetDemuxerStreamByTrackId(
+ unsigned track_id) const {
+ const auto& it = track_id_to_demux_stream_.find(track_id);
+ CHECK(it != track_id_to_demux_stream_.end());
+ return it->second;
+}
+
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698