| 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
|
|
|