Chromium Code Reviews| 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 |