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

Unified Diff: media/filters/ffmpeg_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/ffmpeg_demuxer.cc
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
index b6272fe0f3793f8215c11aa5bda53832c6e9d7bf..5f476933fc8bf653835fce72004e6fc82c4c1da3 100644
--- a/media/filters/ffmpeg_demuxer.cc
+++ b/media/filters/ffmpeg_demuxer.cc
@@ -1118,6 +1118,8 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb,
AVStream* video_stream = NULL;
VideoDecoderConfig video_config;
+ DCHECK(track_id_to_demux_stream_map_.empty());
+
// If available, |start_time_| will be set to the lowest stream start time.
start_time_ = kInfiniteDuration();
@@ -1223,22 +1225,27 @@ 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.
+ 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);
+ media_track->setId(base::UintToString(track_id));
chcunningham 2016/06/09 17:57:19 So for src=, we re-use the bytstream track Id to s
servolk 2016/06/09 19:14:46 Done. Only I've added a DCHECK, don't think it des
+ track_id_to_demux_stream_map_[media_track->id()] = 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);
+ media_track->setId(base::UintToString(track_id));
+ track_id_to_demux_stream_map_[media_track->id()] = streams_[i];
}
max_duration = std::max(max_duration, streams_[i]->duration());
@@ -1419,6 +1426,13 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb,
status_cb.Run(PIPELINE_OK);
}
+const DemuxerStream* FFmpegDemuxer::GetDemuxerStreamByTrackId(
+ MediaTrack::TrackId track_id) const {
+ auto it = track_id_to_demux_stream_map_.find(track_id);
+ DCHECK(it != track_id_to_demux_stream_map_.end());
+ return it->second;
+}
+
void FFmpegDemuxer::OnSeekFrameDone(const PipelineStatusCB& cb, int result) {
DCHECK(task_runner_->BelongsToCurrentThread());
CHECK(pending_seek_);

Powered by Google App Engine
This is Rietveld 408576698