Index: media/filters/ffmpeg_demuxer.cc |
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc |
index e9b602fa4226cfee539de7f533ae36a35f364476..a4cfde4306c75b2e3d20c1b0b430a197b1be904b 100644 |
--- a/media/filters/ffmpeg_demuxer.cc |
+++ b/media/filters/ffmpeg_demuxer.cc |
@@ -1205,23 +1205,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. |
+ 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); |
} 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); |
} |
+ DVLOG(5) << "Associating media_track=" << media_track |
+ << " with demuxer_stream=" << streams_[i]; |
+ track_to_stream_map_[media_track] = streams_[i]; |
max_duration = std::max(max_duration, streams_[i]->duration()); |
@@ -1579,4 +1583,27 @@ void FFmpegDemuxer::SetLiveness(DemuxerStream::Liveness liveness) { |
} |
} |
+void FFmpegDemuxer::OnTrackIdAssigned(unsigned track_id, |
+ const MediaTrack* track) { |
+ 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* FFmpegDemuxer::GetDemuxerStreamByTrackId( |
+ unsigned track_id) const { |
+ 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; |
+} |
+ |
} // namespace media |