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"; } } @@ -81,6 +85,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 @@ enum AudioCodec { 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, }; enum class AudioCodecProfile { 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 @@ -88,6 +88,10 @@ const StringToCodecMap& GetStringToCodec {"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; @@ -183,6 +187,10 @@ AudioCodec MimeUtilToAudioCodec(MimeUtil return kCodecOpus; case MimeUtil::FLAC: return kCodecFLAC; + case MimeUtil::DTS: + return kCodecDTS; + case MimeUtil::MP2: + return kCodecMP2; default: break; } @@ -205,6 +213,9 @@ VideoCodec MimeUtilToVideoCodec(MimeUtil return kCodecTheora; case MimeUtil::DOLBY_VISION: return kCodecDolbyVision; + case MimeUtil::MPEG4_SP: + case MimeUtil::MPEG4_ASP: + return kCodecMPEG4; default: break; } @@ -295,6 +306,35 @@ void MimeUtil::AddSupportedMediaFormats( 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_PLATFORM_HEVC) + matroska_video_codecs.emplace(HEVC); +#endif // BUILDFLAG(ENABLE_PLATFORM_HEVC) + 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) @@ -304,9 +344,9 @@ void MimeUtil::AddSupportedMediaFormats( 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. @@ -330,6 +370,8 @@ void MimeUtil::AddSupportedMediaFormats( #endif // BUILDFLAG(ENABLE_PLATFORM_MPEG_H_AUDIO) mp4_video_codecs.emplace(H264); + mp4_video_codecs.emplace(MPEG4_SP); + mp4_video_codecs.emplace(MPEG4_ASP); #if BUILDFLAG(ENABLE_PLATFORM_HEVC) mp4_video_codecs.emplace(HEVC); #endif // BUILDFLAG(ENABLE_PLATFORM_HEVC) @@ -366,6 +408,10 @@ void MimeUtil::AddSupportedMediaFormats( 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 @@ -124,6 +124,10 @@ AudioCodec CodecIDToAudioCodec(AVCodecID case AV_CODEC_ID_MPEGH_3D_AUDIO: return kCodecMpegHAudio; #endif + case AV_CODEC_ID_MP2: + return kCodecMP2; + case AV_CODEC_ID_DTS: + return kCodecDTS; default: DVLOG(1) << "Unknown audio CodecID: " << codec_id; } @@ -179,6 +183,14 @@ AVCodecID AudioCodecToCodecID(AudioCodec case kCodecMpegHAudio: return AV_CODEC_ID_MPEGH_3D_AUDIO; #endif + 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; } @@ -347,30 +359,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_PLATFORM_AC3_EAC3_AUDIO) - // 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; -#if BUILDFLAG(ENABLE_PLATFORM_MPEG_H_AUDIO) - case kCodecMpegHAudio: - channel_layout = CHANNEL_LAYOUT_BITSTREAM; - sample_format = kSampleFormatMpegHAudio; - break; -#endif - - default: - break; - } - base::TimeDelta seek_preroll; if (codec_context->seek_preroll > 0) { seek_preroll = base::TimeDelta::FromMicroseconds( @@ -399,17 +387,6 @@ bool AVCodecContextToAudioDecoderConfig( if (channel_layout == CHANNEL_LAYOUT_DISCRETE) config->SetChannelsForDiscrete(codec_context->channels); -#if BUILDFLAG(ENABLE_PLATFORM_AC3_EAC3_AUDIO) - // 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 -#if BUILDFLAG(ENABLE_PLATFORM_MPEG_H_AUDIO) - if (codec == kCodecMpegHAudio) - return true; -#endif - #if BUILDFLAG(USE_PROPRIETARY_CODECS) // TODO(dalecurtis): Just use the profile from the codec context if ffmpeg // ever starts supporting xHE-AAC. 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 @@ -34,6 +34,8 @@ 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. } @@ -61,6 +63,8 @@ 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. } diff -up chromium-62.0.3192.0/media/remoting/media_remoting_rpc.proto.extra-media chromium-62.0.3192.0/media/remoting/media_remoting_rpc.proto --- chromium-62.0.3192.0/media/remoting/media_remoting_rpc.proto.extra-media 2017-08-22 21:04:45.000000000 +0200 +++ chromium-62.0.3192.0/media/remoting/media_remoting_rpc.proto 2017-08-30 15:39:09.736186059 +0200 @@ -67,6 +67,8 @@ message AudioDecoderConfig { kCodecALAC = 15; kCodecAC3 = 16; kCodecMpegHAudio = 17; + kCodecMP2 = 18; + kCodecDTS = 19; } // Proto version of media::SampleFormat. diff -up chromium-62.0.3192.0/net/base/mime_util.cc.extra-media chromium-62.0.3192.0/net/base/mime_util.cc --- chromium-62.0.3192.0/net/base/mime_util.cc.extra-media 2017-08-22 21:04:46.000000000 +0200 +++ chromium-62.0.3192.0/net/base/mime_util.cc 2017-08-30 15:47:23.952221630 +0200 @@ -94,6 +94,9 @@ {"image/png", "png"}, {"image/apng", "png"}, {"image/webp", "webp"}, + {"video/x-matroska", "mkv"}, + {"audio/x-matroska", "mkv"}, + {"video/x-msvideo", "avi"}, {"multipart/related", "mht,mhtml"}, {"text/css", "css"}, {"text/html", "html,htm,shtml,shtm"}, @@ -495,6 +498,7 @@ "audio/vorbis", "audio/wav", "audio/webm", + "audio/x-matroska", "audio/x-m4a", "audio/x-ms-wma", "audio/vnd.rn-realaudio", @@ -512,8 +516,10 @@ "video/webm", "video/x-dv", "video/x-m4v", + "video/x-matroska", "video/x-mpeg", "video/x-ms-asf", + "video/x-msvideo", "video/x-ms-wmv" }; --- chromium-73.0.3683.75/media/base/supported_types.cc.extra-media 2019-03-11 23:00:59.000000000 +0100 +++ chromium-73.0.3683.75/media/base/supported_types.cc 2019-03-17 18:40:07.610556592 +0100 @@ -163,6 +163,7 @@ bool IsAudioCodecProprietary(AudioCodec case kCodecAAC: case kCodecAC3: case kCodecEAC3: + case kCodecDTS: case kCodecAMR_NB: case kCodecAMR_WB: case kCodecGSM_MS: @@ -171,6 +172,7 @@ bool IsAudioCodecProprietary(AudioCodec return true; case kCodecFLAC: + case kCodecMP2: case kCodecMP3: case kCodecOpus: case kCodecVorbis: @@ -205,6 +207,7 @@ bool IsDefaultSupportedAudioType(const A #endif case kCodecFLAC: + case kCodecMP2: case kCodecMP3: case kCodecOpus: case kCodecPCM: @@ -213,6 +216,10 @@ bool IsDefaultSupportedAudioType(const A case kCodecPCM_S24BE: case kCodecPCM_ALAW: case kCodecVorbis: + case kCodecEAC3: + case kCodecALAC: + case kCodecAC3: + case kCodecDTS: return true; case kCodecAMR_NB: @@ -224,9 +231,6 @@ bool IsDefaultSupportedAudioType(const A return false; #endif - case kCodecEAC3: - case kCodecALAC: - case kCodecAC3: case kCodecMpegHAudio: case kUnknownAudioCodec: return false; @@ -282,21 +286,15 @@ bool IsDefaultSupportedVideoType(const V case kCodecH264: case kCodecVP8: case kCodecTheora: - return true; - - case kUnknownVideoCodec: case kCodecVC1: case kCodecMPEG2: case kCodecHEVC: - case kCodecDolbyVision: - return false; - case kCodecMPEG4: -#if defined(OS_CHROMEOS) return true; -#else + + case kUnknownVideoCodec: + case kCodecDolbyVision: return false; -#endif } NOTREACHED();