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_); |