| Index: media/filters/ffmpeg_demuxer.cc
|
| diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
|
| index 081bcbf1a452be23ee45adb6a080e11bd5b55c77..fe4023722c11737696ccf7917e41781bba07a6bc 100644
|
| --- a/media/filters/ffmpeg_demuxer.cc
|
| +++ b/media/filters/ffmpeg_demuxer.cc
|
| @@ -58,9 +58,10 @@ void SetAVStreamDiscard(AVStream* stream, AVDiscard discard) {
|
|
|
| } // namespace
|
|
|
| -static base::Time ExtractTimelineOffset(AVFormatContext* format_context) {
|
| - if (strstr(format_context->iformat->name, "webm") ||
|
| - strstr(format_context->iformat->name, "matroska")) {
|
| +static base::Time ExtractTimelineOffset(
|
| + container_names::MediaContainerName container,
|
| + const AVFormatContext* format_context) {
|
| + if (container == container_names::CONTAINER_WEBM) {
|
| const AVDictionaryEntry* entry =
|
| av_dict_get(format_context->metadata, "creation_time", NULL, 0);
|
|
|
| @@ -160,14 +161,24 @@ static void RecordAudioCodecStats(const AudioDecoderConfig& audio_config) {
|
| }
|
|
|
| // Record video decoder config UMA stats corresponding to a src= playback.
|
| -static void RecordVideoCodecStats(const VideoDecoderConfig& video_config,
|
| +static void RecordVideoCodecStats(container_names::MediaContainerName container,
|
| + const VideoDecoderConfig& video_config,
|
| AVColorRange color_range,
|
| MediaLog* media_log) {
|
| media_log->RecordRapporWithSecurityOrigin("Media.OriginUrl.SRC.VideoCodec." +
|
| GetCodecName(video_config.codec()));
|
|
|
| + // TODO(xhwang): Fix these misleading metric names. They should be something
|
| + // like "Media.SRC.Xxxx". See http://crbug.com/716183.
|
| UMA_HISTOGRAM_ENUMERATION("Media.VideoCodec", video_config.codec(),
|
| kVideoCodecMax + 1);
|
| + if (container == container_names::CONTAINER_MOV) {
|
| + UMA_HISTOGRAM_ENUMERATION("Media.SRC.VideoCodec.MP4", video_config.codec(),
|
| + kVideoCodecMax + 1);
|
| + } else if (container == container_names::CONTAINER_WEBM) {
|
| + UMA_HISTOGRAM_ENUMERATION("Media.SRC.VideoCodec.WebM", video_config.codec(),
|
| + kVideoCodecMax + 1);
|
| + }
|
|
|
| // Drop UNKNOWN because U_H_E() uses one bucket for all values less than 1.
|
| if (video_config.profile() >= 0) {
|
| @@ -1342,8 +1353,7 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb,
|
| 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")) {
|
| + if (glue_->container() == container_names::CONTAINER_WEBM) {
|
| // 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 =
|
| @@ -1385,8 +1395,8 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb,
|
| } else if (codec_type == AVMEDIA_TYPE_VIDEO) {
|
| VideoDecoderConfig video_config = streams_[i]->video_decoder_config();
|
|
|
| - RecordVideoCodecStats(video_config, stream->codecpar->color_range,
|
| - media_log_);
|
| + RecordVideoCodecStats(glue_->container(), video_config,
|
| + stream->codecpar->color_range, media_log_);
|
|
|
| media_track = media_tracks->AddVideoTrack(video_config, track_id, "main",
|
| track_label, track_language);
|
| @@ -1454,7 +1464,7 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb,
|
| const AVStream* audio_stream = stream->av_stream();
|
| DCHECK(audio_stream);
|
| if (audio_stream->codecpar->codec_id == AV_CODEC_ID_OPUS ||
|
| - (strcmp(format_context->iformat->name, "ogg") == 0 &&
|
| + (glue_->container() == container_names::CONTAINER_OGG &&
|
| audio_stream->codecpar->codec_id == AV_CODEC_ID_VORBIS)) {
|
| for (size_t i = 0; i < streams_.size(); ++i) {
|
| if (!streams_[i])
|
| @@ -1478,12 +1488,14 @@ void FFmpegDemuxer::OnFindStreamInfoDone(const PipelineStatusCB& status_cb,
|
|
|
| // MPEG-4 B-frames cause grief for a simple container like AVI. Enable PTS
|
| // generation so we always get timestamps, see http://crbug.com/169570
|
| - if (strcmp(format_context->iformat->name, "avi") == 0)
|
| + if (glue_->container() == container_names::CONTAINER_AVI)
|
| format_context->flags |= AVFMT_FLAG_GENPTS;
|
|
|
| // For testing purposes, don't overwrite the timeline offset if set already.
|
| - if (timeline_offset_.is_null())
|
| - timeline_offset_ = ExtractTimelineOffset(format_context);
|
| + if (timeline_offset_.is_null()) {
|
| + timeline_offset_ =
|
| + ExtractTimelineOffset(glue_->container(), format_context);
|
| + }
|
|
|
| // Since we're shifting the externally visible start time to zero, we need to
|
| // adjust the timeline offset to compensate.
|
|
|