Index: media/filters/ffmpeg_demuxer.cc |
diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc |
index f768a1af571476486f2027ca1877e5e0fc04c97f..1d8361b4974eccb02e35e08b352345868d9ca14d 100644 |
--- a/media/filters/ffmpeg_demuxer.cc |
+++ b/media/filters/ffmpeg_demuxer.cc |
@@ -27,6 +27,7 @@ |
#include "media/base/decrypt_config.h" |
#include "media/base/limits.h" |
#include "media/base/media_log.h" |
+#include "media/base/media_tracks.h" |
#include "media/base/timestamp_constants.h" |
#include "media/ffmpeg/ffmpeg_common.h" |
#include "media/filters/ffmpeg_aac_bitstream_converter.h" |
@@ -1089,6 +1090,7 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb, |
} |
} |
+ scoped_ptr<MediaTracks> media_tracks(new MediaTracks()); |
AVStream* audio_stream = NULL; |
AudioDecoderConfig audio_config; |
AVStream* video_stream = NULL; |
@@ -1158,6 +1160,19 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb, |
continue; |
} |
+ std::string track_id = base::IntToString(stream->id); |
+ std::string track_label = streams_[i]->GetMetadata("handler_name"); |
+ std::string track_language = streams_[i]->GetMetadata("language"); |
+ |
+ // Some metadata is named differently in FFmpeg for webm files. |
+ if (strstr(format_context->iformat->name, "webm") || |
+ strstr(format_context->iformat->name, "matroska")) { |
+ // TODO(servolk): FFmpeg doesn't set stream->id correctly for webm files. |
+ // Need to fix that and use it as track id. crbug.com/323183 |
+ track_id = base::UintToString(media_tracks->tracks().size() + 1); |
+ track_label = streams_[i]->GetMetadata("title"); |
+ } |
+ |
// 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. |
if (codec_type == AVMEDIA_TYPE_AUDIO) { |
@@ -1165,11 +1180,17 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb, |
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); |
} 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); |
} |
max_duration = std::max(max_duration, streams_[i]->duration()); |
@@ -1340,6 +1361,8 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb, |
media_log_->SetTimeProperty("start_time", start_time_); |
media_log_->SetIntegerProperty("bitrate", bitrate_); |
+ media_tracks_updated_cb_.Run(std::move(media_tracks)); |
+ |
status_cb.Run(PIPELINE_OK); |
} |