diff -up chromium-62.0.3192.0/media/base/audio_codecs.cc.extra-media chromium-62.0.3192.0/media/base/audio_codecs.cc --- chromium-62.0.3192.0/media/base/audio_codecs.cc.extra-media 2017-08-22 21:04:45.000000000 +0200 +++ chromium-62.0.3192.0/media/base/audio_codecs.cc 2017-08-30 15:39:09.735186077 +0200 @@ -46,6 +46,10 @@ std::string GetCodecName(AudioCodec code return "ac3"; case kCodecMpegHAudio: return "mpeg-h-audio"; + case kCodecMP2: + return "mp2"; + case kCodecDTS: + return "dts"; } NOTREACHED(); return ""; @@ -72,6 +74,10 @@ AudioCodec StringToAudioCodec(const std: return kCodecVorbis; if (base::StartsWith(codec_id, "mp4a.40.", base::CompareCase::SENSITIVE)) return kCodecAAC; + if (codec_id == "mp2") + return kCodecMP2; + if (codec_id == "dts") + return kCodecDTS; return kUnknownAudioCodec; } diff -up chromium-62.0.3192.0/media/base/audio_codecs.h.extra-media chromium-62.0.3192.0/media/base/audio_codecs.h --- chromium-62.0.3192.0/media/base/audio_codecs.h.extra-media 2017-08-22 21:04:45.000000000 +0200 +++ chromium-62.0.3192.0/media/base/audio_codecs.h 2017-08-30 15:39:09.735186077 +0200 @@ -33,13 +33,15 @@ kCodecALAC = 15, kCodecAC3 = 16, kCodecMpegHAudio = 17, + kCodecMP2 = 18, + kCodecDTS = 19, // DO NOT ADD RANDOM AUDIO CODECS! // // The only acceptable time to add a new codec is if there is production code // that uses said codec in the same CL. // Must always be equal to the largest entry ever logged. - kAudioCodecMax = kCodecMpegHAudio, + kAudioCodecMax = kCodecDTS, }; std::string MEDIA_EXPORT GetCodecName(AudioCodec codec); diff -up chromium-62.0.3192.0/media/base/mime_util_internal.cc.extra-media chromium-62.0.3192.0/media/base/mime_util_internal.cc --- chromium-62.0.3192.0/media/base/mime_util_internal.cc.extra-media 2017-08-22 21:04:45.000000000 +0200 +++ chromium-62.0.3192.0/media/base/mime_util_internal.cc 2017-08-30 15:44:46.519076991 +0200 @@ -87,6 +87,10 @@ {"vp8", MimeUtil::VP8}, {"vp8.0", MimeUtil::VP8}, {"theora", MimeUtil::THEORA}, + {"dts", MimeUtil::DTS}, + {"mp2", MimeUtil::MP2}, + {"mp4v.20.8", MimeUtil::MPEG4_SP}, + {"mp4v.20.240", MimeUtil::MPEG4_ASP}, }); return *kStringToCodecMap; @@ -162,6 +166,10 @@ return kCodecOpus; case MimeUtil::FLAC: return kCodecFLAC; + case MimeUtil::DTS: + return kCodecDTS; + case MimeUtil::MP2: + return kCodecMP2; default: break; } @@ -184,6 +192,9 @@ return kCodecTheora; case MimeUtil::DOLBY_VISION: return kCodecDolbyVision; + case MimeUtil::MPEG4_SP: + case MimeUtil::MPEG4_ASP: + return kCodecMPEG4; default: break; } @@ -274,6 +285,35 @@ CodecSet ogg_codecs(ogg_audio_codecs); ogg_codecs.insert(ogg_video_codecs.begin(), ogg_video_codecs.end()); + CodecSet matroska_audio_codecs; + matroska_audio_codecs.emplace(OPUS); + matroska_audio_codecs.emplace(VORBIS); + matroska_audio_codecs.emplace(AC3); + matroska_audio_codecs.emplace(EAC3); + matroska_audio_codecs.emplace(DTS); + matroska_audio_codecs.emplace(MP3); + matroska_audio_codecs.emplace(MP2); + matroska_audio_codecs.emplace(MPEG2_AAC); + matroska_audio_codecs.emplace(MPEG4_AAC); + matroska_audio_codecs.emplace(PCM); + matroska_audio_codecs.emplace(FLAC); + + CodecSet matroska_video_codecs; + matroska_video_codecs.emplace(THEORA); + matroska_video_codecs.emplace(VP8); + matroska_video_codecs.emplace(VP9); + matroska_video_codecs.emplace(H264); + matroska_video_codecs.emplace(MPEG4_SP); + matroska_video_codecs.emplace(MPEG4_ASP); +#if BUILDFLAG(ENABLE_AV1_DECODER) + matroska_video_codecs.emplace(AV1); +#endif +#if BUILDFLAG(ENABLE_HEVC_DEMUXING) + matroska_video_codecs.emplace(HEVC); +#endif // BUILDFLAG(ENABLE_HEVC_DEMUXING) + CodecSet matroska_codecs(matroska_audio_codecs); + matroska_codecs.insert(matroska_video_codecs.begin(), matroska_video_codecs.end()); + const CodecSet webm_audio_codecs{OPUS, VORBIS}; CodecSet webm_video_codecs{VP8, VP9}; #if BUILDFLAG(ENABLE_AV1_DECODER) @@ -283,9 +323,9 @@ CodecSet webm_codecs(webm_audio_codecs); webm_codecs.insert(webm_video_codecs.begin(), webm_video_codecs.end()); - const CodecSet mp3_codecs{MP3}; + const CodecSet mp3_codecs{MP3, MP2}; - CodecSet mp4_audio_codecs{FLAC, MP3, OPUS}; + CodecSet mp4_audio_codecs{FLAC, MP3, OPUS, MP2, DTS, AC3, EAC3}; // Only VP9 with valid codec string vp09.xx.xx.xx.xx.xx.xx.xx is supported. // See ParseVp9CodecID for details. @@ -309,6 +349,8 @@ #endif // BUILDFLAG(ENABLE_MPEG_H_AUDIO_DEMUXING) mp4_video_codecs.emplace(H264); + mp4_video_codecs.emplace(MPEG4_SP); + mp4_video_codecs.emplace(MPEG4_ASP); #if BUILDFLAG(ENABLE_HEVC_DEMUXING) mp4_video_codecs.emplace(HEVC); #endif // BUILDFLAG(ENABLE_HEVC_DEMUXING) @@ -345,6 +387,10 @@ DCHECK(!mp4_video_codecs.empty()); AddContainerWithCodecs("video/mp4", mp4_codecs); + AddContainerWithCodecs("audio/x-matroska", matroska_audio_codecs); + AddContainerWithCodecs("video/x-matroska", matroska_codecs); + AddContainerWithCodecs("video/x-msvideo", matroska_codecs); + #if BUILDFLAG(USE_PROPRIETARY_CODECS) AddContainerWithCodecs("audio/aac", implicit_codec); // AAC / ADTS. // These strings are supported for backwards compatibility only and thus only diff -up chromium-62.0.3192.0/media/base/mime_util_internal.h.extra-media chromium-62.0.3192.0/media/base/mime_util_internal.h --- chromium-62.0.3192.0/media/base/mime_util_internal.h.extra-media 2017-08-22 21:04:45.000000000 +0200 +++ chromium-62.0.3192.0/media/base/mime_util_internal.h 2017-08-30 15:39:09.734186095 +0200 @@ -46,7 +46,11 @@ class MEDIA_EXPORT MimeUtil { DOLBY_VISION, AV1, MPEG_H_AUDIO, - LAST_CODEC = MPEG_H_AUDIO + DTS, + MP2, + MPEG4_SP, + MPEG4_ASP, + LAST_CODEC = MPEG4_ASP }; // Platform configuration structure. Controls which codecs are supported at diff -up chromium-62.0.3192.0/media/ffmpeg/ffmpeg_common.cc.extra-media chromium-62.0.3192.0/media/ffmpeg/ffmpeg_common.cc --- chromium-62.0.3192.0/media/ffmpeg/ffmpeg_common.cc.extra-media 2017-08-22 21:04:45.000000000 +0200 +++ chromium-62.0.3192.0/media/ffmpeg/ffmpeg_common.cc 2017-08-30 15:39:09.735186077 +0200 @@ -115,6 +115,10 @@ AudioCodec CodecIDToAudioCodec(AVCodecID return kCodecOpus; case AV_CODEC_ID_ALAC: return kCodecALAC; + case AV_CODEC_ID_MP2: + return kCodecMP2; + case AV_CODEC_ID_DTS: + return kCodecDTS; default: DVLOG(1) << "Unknown audio CodecID: " << codec_id; } @@ -166,6 +168,14 @@ AVCodecID AudioCodecToCodecID(AudioCodec return AV_CODEC_ID_PCM_MULAW; case kCodecOpus: return AV_CODEC_ID_OPUS; + case kCodecAC3: + return AV_CODEC_ID_AC3; + case kCodecEAC3: + return AV_CODEC_ID_EAC3; + case kCodecMP2: + return AV_CODEC_ID_MP2; + case kCodecDTS: + return AV_CODEC_ID_DTS; default: DVLOG(1) << "Unknown AudioCodec: " << audio_codec; } @@ -389,23 +389,6 @@ bool AVCodecContextToAudioDecoderConfig( codec_context->channels); int sample_rate = codec_context->sample_rate; - switch (codec) { - // For AC3/EAC3 we enable only demuxing, but not decoding, so FFmpeg does - // not fill |sample_fmt|. - case kCodecAC3: - case kCodecEAC3: -#if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING) - // The spec for AC3/EAC3 audio is ETSI TS 102 366. According to sections - // F.3.1 and F.5.1 in that spec the sample_format for AC3/EAC3 must be 16. - sample_format = kSampleFormatS16; -#else - NOTREACHED(); -#endif - break; - - default: - break; - } base::TimeDelta seek_preroll; if (codec_context->seek_preroll > 0) { @@ -435,13 +418,6 @@ bool AVCodecContextToAudioDecoderConfig( if (channel_layout == CHANNEL_LAYOUT_DISCRETE) config->SetChannelsForDiscrete(codec_context->channels); -#if BUILDFLAG(ENABLE_AC3_EAC3_AUDIO_DEMUXING) - // These are bitstream formats unknown to ffmpeg, so they don't have - // a known sample format size. - if (codec == kCodecAC3 || codec == kCodecEAC3) - return true; -#endif - // Verify that AudioConfig.bits_per_channel was calculated correctly for // codecs that have |sample_fmt| set by FFmpeg. DCHECK_EQ(av_get_bytes_per_sample(codec_context->sample_fmt) * 8, diff -up chromium-62.0.3192.0/media/filters/ffmpeg_video_decoder.cc.extra-media chromium-62.0.3192.0/media/filters/ffmpeg_video_decoder.cc --- chromium-62.0.3192.0/media/filters/ffmpeg_video_decoder.cc.extra-media 2017-08-22 21:04:45.000000000 +0200 +++ chromium-62.0.3192.0/media/filters/ffmpeg_video_decoder.cc 2017-08-30 15:39:09.736186059 +0200 @@ -38,7 +38,6 @@ case kUnknownVideoCodec: case kCodecVC1: case kCodecMPEG2: - case kCodecHEVC: case kCodecVP9: case kCodecAV1: case kCodecDolbyVision: @@ -52,6 +51,7 @@ case kCodecH264: case kCodecVP8: + case kCodecHEVC: // Normalize to three threads for 1080p content, then scale linearly // with number of pixels. // Examples: diff -up chromium-62.0.3192.0/media/remoting/proto_enum_utils.cc.extra-media chromium-62.0.3192.0/media/remoting/proto_enum_utils.cc --- chromium-62.0.3192.0/media/remoting/proto_enum_utils.cc.extra-media 2017-08-22 21:04:45.000000000 +0200 +++ chromium-62.0.3192.0/media/remoting/proto_enum_utils.cc 2017-08-30 15:39:09.736186059 +0200 @@ -58,6 +58,8 @@ base::Optional ToMediaAudioC CASE_RETURN_OTHER(kCodecALAC); CASE_RETURN_OTHER(kCodecAC3); CASE_RETURN_OTHER(kCodecMpegHAudio); + CASE_RETURN_OTHER(kCodecMP2); + CASE_RETURN_OTHER(kCodecDTS); } return base::nullopt; // Not a 'default' to ensure compile-time checks. } @@ -85,6 +86,8 @@ base::Optional