--- patch103/media/base/mime_util_internal.h 2022-06-16 04:31:15.000000000 +0200 +++ patch103/media/base/mime_util_internal.h-extra-media 2022-06-19 14:38:12.148935467 +0200 @@ -53,7 +53,23 @@ class MEDIA_EXPORT MimeUtil { MPEG_H_AUDIO, DTS, DTSXP2, - LAST_CODEC = DTSXP2 + MP2, + MPEG4_SP, + MPEG4_ASP, + MSMPEG4v1, + MSMPEG4v2, + MSMPEG4v3, + WMV7, + WMV8, + WMV9, + VC1, + WMA1, + WMA2, + VP6, + MPEG1, + MPEG2, + FLV1, + LAST_CODEC = FLV1 }; // Platform configuration structure. Controls which codecs are supported at --- patch103/net/base/mime_util.cc 2022-06-16 04:31:16.000000000 +0200 +++ patch103/net/base/mime_util.cc.extra-media 2022-06-20 17:57:06.883495528 +0200 @@ -168,6 +168,10 @@ static const MimeInfo kPrimaryMappings[] {"image/apng", "png"}, {"image/svg+xml", "svg,svgz"}, {"image/webp", "webp"}, + {"video/x-matroska", "mkv"}, + {"audio/x-matroska", "mkv"}, + {"video/x-msvideo", "avi"}, + {"video/quicktime", "mov"}, {"multipart/related", "mht,mhtml"}, {"text/css", "css"}, {"text/html", "html,htm,shtml,shtm"}, @@ -693,6 +697,7 @@ static const char* const kStandardAudioT "audio/vorbis", "audio/wav", "audio/webm", + "audio/x-matroska", "audio/x-m4a", "audio/x-ms-wma", "audio/vnd.rn-realaudio", @@ -715,8 +720,10 @@ static const char* const kStandardVideoT "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" }; --- patch103/media/base/audio_codecs.cc 2022-06-08 18:03:14.000000000 +0200 +++ patch103/media/base/audio_codecs.cc-add-extra-media 2022-06-14 18:42:34.578554464 +0200 @@ -51,7 +51,14 @@ std::string GetCodecName(AudioCodec code return "dts"; case AudioCodec::kDTSXP2: return "dtsx-p2"; + case AudioCodec::kMP2: + return "mp2"; + case AudioCodec::kWMA1: + return "wma1"; + case AudioCodec::kWMA2: + return "wma2"; } + return ""; } std::string GetProfileName(AudioCodecProfile profile) { @@ -61,6 +68,7 @@ std::string GetProfileName(AudioCodecPro case AudioCodecProfile::kXHE_AAC: return "xhe-aac"; } + return ""; } AudioCodec StringToAudioCodec(const std::string& codec_id) { @@ -94,6 +102,14 @@ AudioCodec StringToAudioCodec(const std: return AudioCodec::kDTSXP2; if (base::StartsWith(codec_id, "mp4a.40.", base::CompareCase::SENSITIVE)) return AudioCodec::kAAC; + if (codec_id == "mp2") + return AudioCodec::kMP2; + if (codec_id == "dts") + return AudioCodec::kDTS; + if (codec_id == "wma1") + return AudioCodec::kWMA1; + if (codec_id == "wma2") + return AudioCodec::kWMA2; return AudioCodec::kUnknown; } --- patch98/media/base/audio_codecs.h 2022-01-21 02:05:09.000000000 +0100 +++ patch98/media/base/audio_codecs.h.extra-media 2022-01-26 18:35:38.832001547 +0100 @@ -35,13 +35,16 @@ enum class AudioCodec { kMpegHAudio = 17, kDTS = 18, kDTSXP2 = 19, + kMP2 = 20, + kWMA1 = 21, + kWMA2 = 22, // 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. - kMaxValue = kDTSXP2, + kMaxValue = kWMA2, }; enum class AudioCodecProfile { --- patch103/media/base/mime_util_internal.cc 2022-06-08 18:03:14.000000000 +0200 +++ patch103/media/base/mime_util_internal.cc-add-extra-media 2022-06-20 15:17:48.833094295 +0200 @@ -97,6 +97,22 @@ const StringToCodecMap& GetStringToCodec {"dtsx", MimeUtil::DTSXP2}, {"mp4a.b2", MimeUtil::DTSXP2}, {"mp4a.B2", MimeUtil::DTSXP2}, + {"dts", MimeUtil::DTS}, + {"mp2", MimeUtil::MP2}, + {"mp4v.20.8", MimeUtil::MPEG4_SP}, + {"mp4v.20.240", MimeUtil::MPEG4_ASP}, + {"msmpeg4v1", MimeUtil::MSMPEG4v1}, + {"msmpeg4v2", MimeUtil::MSMPEG4v2}, + {"msmpeg4v3", MimeUtil::MSMPEG4v3}, + {"wmv7", MimeUtil::WMV7}, + {"wmv8", MimeUtil::WMV8}, + {"wmv9", MimeUtil::WMV9}, + {"vc-1", MimeUtil::VC1}, + {"vp6", MimeUtil::VP6}, + {"mpeg1", MimeUtil::MPEG1}, + {"mpeg2", MimeUtil::MPEG2}, + {"wma1", MimeUtil::WMA1}, + {"wma2", MimeUtil::WMA2}, }); return *kStringToCodecMap; @@ -193,6 +209,12 @@ AudioCodec MimeUtilToAudioCodec(MimeUtil return AudioCodec::kDTS; case MimeUtil::DTSXP2: return AudioCodec::kDTSXP2; + case MimeUtil::MP2: + return AudioCodec::kMP2; + case MimeUtil::WMA1: + return AudioCodec::kWMA1; + case MimeUtil::WMA2: + return AudioCodec::kWMA2; default: break; } @@ -215,6 +237,29 @@ VideoCodec MimeUtilToVideoCodec(MimeUtil return VideoCodec::kTheora; case MimeUtil::DOLBY_VISION: return VideoCodec::kDolbyVision; + case MimeUtil::MPEG4_SP: + case MimeUtil::MPEG4_ASP: + return VideoCodec::kMPEG4; + case MimeUtil::MSMPEG4v1: + return VideoCodec::kMSMPEG4V1; + case MimeUtil::MSMPEG4v2: + return VideoCodec::kMSMPEG4V2; + case MimeUtil::MSMPEG4v3: + return VideoCodec::kMSMPEG4V3; + case MimeUtil::WMV7: + return VideoCodec::kWMV7; + case MimeUtil::WMV8: + return VideoCodec::kWMV8; + case MimeUtil::WMV9: + return VideoCodec::kWMV9; + case MimeUtil::VC1: + return VideoCodec::kVC1; + case MimeUtil::VP6: + return VideoCodec::kVP6; + case MimeUtil::MPEG1: + return VideoCodec::kMPEG1; + case MimeUtil::MPEG2: + return VideoCodec::kMPEG2; default: break; } @@ -304,6 +349,37 @@ 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); + matroska_audio_codecs.emplace(WMA1); + matroska_audio_codecs.emplace(WMA2); + + 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) @@ -313,9 +389,10 @@ 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 mp1_codecs{MPEG1, MPEG2}; + 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. @@ -339,6 +416,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) @@ -359,6 +438,28 @@ void MimeUtil::AddSupportedMediaFormats( CodecSet mp4_codecs(mp4_audio_codecs); mp4_codecs.insert(mp4_video_codecs.begin(), mp4_video_codecs.end()); + const CodecSet wma_codecs{WMA1, WMA2}; + + CodecSet wmv_codecs(wma_codecs); + wmv_codecs.emplace(MSMPEG4v1); + wmv_codecs.emplace(MSMPEG4v2); + wmv_codecs.emplace(MSMPEG4v3); + wmv_codecs.emplace(MPEG4_SP); + wmv_codecs.emplace(MPEG4_ASP); + wmv_codecs.emplace(WMV7); + wmv_codecs.emplace(WMV8); + wmv_codecs.emplace(WMV9); + wmv_codecs.emplace(VC1); + + matroska_codecs.emplace(MSMPEG4v1); + matroska_codecs.emplace(MSMPEG4v2); + matroska_codecs.emplace(MSMPEG4v3); + + CodecSet flv_codecs(mp4_codecs); + flv_codecs.emplace(VP6); + flv_codecs.emplace(MP3); + flv_codecs.emplace(FLV1); + const CodecSet implicit_codec; AddContainerWithCodecs("audio/wav", wav_codecs); AddContainerWithCodecs("audio/x-wav", wav_codecs); @@ -380,6 +481,15 @@ 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); + AddContainerWithCodecs("video/x-ms-wmv", wmv_codecs); + AddContainerWithCodecs("audio/x-ms-wma", wma_codecs); + AddContainerWithCodecs("video/x-ms-asf", wmv_codecs); + AddContainerWithCodecs("video/x-flv", flv_codecs); + AddContainerWithCodecs("video/mpeg", mp1_codecs); + #if BUILDFLAG(USE_PROPRIETARY_CODECS) AddContainerWithCodecs("audio/aac", implicit_codec); // AAC / ADTS. // These strings are supported for backwards compatibility only and thus only @@ -886,6 +996,7 @@ SupportsType MimeUtil::IsCodecSupported( if (video_codec != VideoCodec::kUnknown && // Theora and VP8 do not have profiles/levels. video_codec != VideoCodec::kTheora && video_codec != VideoCodec::kVP8 && + video_codec != VideoCodec::kMSMPEG4V1 && video_codec != VideoCodec::kMSMPEG4V2 && video_codec != VideoCodec::kMSMPEG4V3 && video_codec != VideoCodec::kWMV7 && video_codec != VideoCodec::kWMV8 && video_codec != VideoCodec::kWMV9 && video_codec != VideoCodec::kVP6 && video_codec != VideoCodec::kMPEG1 && video_codec != VideoCodec::kMPEG2 && video_codec != VideoCodec::kSorensonSpark && // TODO(dalecurtis): AV1 has levels, but they aren't supported yet; // http://crbug.com/784993 video_codec != VideoCodec::kAV1) { --- patch103/media/ffmpeg/ffmpeg_common.cc 2022-06-08 18:03:14.000000000 +0200 +++ patch103/media/ffmpeg/ffmpeg_common.cc-add-extra-media 2022-06-19 15:28:01.395412531 +0200 @@ -128,6 +128,14 @@ AudioCodec CodecIDToAudioCodec(AVCodecID case AV_CODEC_ID_MPEGH_3D_AUDIO: return AudioCodec::kMpegHAudio; #endif + case AV_CODEC_ID_MP2: + return AudioCodec::kMP2; + case AV_CODEC_ID_DTS: + return AudioCodec::kDTS; + case AV_CODEC_ID_WMAV1: + return AudioCodec::kWMA1; + case AV_CODEC_ID_WMAV2: + return AudioCodec::kWMA2; default: DVLOG(1) << "Unknown audio CodecID: " << codec_id; } @@ -183,6 +191,18 @@ AVCodecID AudioCodecToCodecID(AudioCodec case AudioCodec::kMpegHAudio: return AV_CODEC_ID_MPEGH_3D_AUDIO; #endif + case AudioCodec::kAC3: + return AV_CODEC_ID_AC3; + case AudioCodec::kEAC3: + return AV_CODEC_ID_EAC3; + case AudioCodec::kMP2: + return AV_CODEC_ID_MP2; + case AudioCodec::kDTS: + return AV_CODEC_ID_DTS; + case AudioCodec::kWMA1: + return AV_CODEC_ID_WMAV1; + case AudioCodec::kWMA2: + return AV_CODEC_ID_WMAV2; default: DVLOG(1) << "Unknown AudioCodec: " << audio_codec; } @@ -208,6 +228,28 @@ static VideoCodec CodecIDToVideoCodec(AV return VideoCodec::kVP9; case AV_CODEC_ID_AV1: return VideoCodec::kAV1; + case AV_CODEC_ID_MSMPEG4V1: + return VideoCodec::kMSMPEG4V1; + case AV_CODEC_ID_MSMPEG4V2: + return VideoCodec::kMSMPEG4V2; + case AV_CODEC_ID_MSMPEG4V3: + return VideoCodec::kMSMPEG4V3; + case AV_CODEC_ID_WMV1: + return VideoCodec::kWMV7; + case AV_CODEC_ID_WMV2: + return VideoCodec::kWMV8; + case AV_CODEC_ID_WMV3: + return VideoCodec::kWMV9; + case AV_CODEC_ID_VC1: + return VideoCodec::kVC1; + case AV_CODEC_ID_VP6: + return VideoCodec::kVP6; + case AV_CODEC_ID_MPEG1VIDEO: + return VideoCodec::kMPEG1; + case AV_CODEC_ID_MPEG2VIDEO: + return VideoCodec::kMPEG2; + case AV_CODEC_ID_FLV1: + return VideoCodec::kSorensonSpark; default: DVLOG(1) << "Unknown video CodecID: " << codec_id; } @@ -232,6 +274,28 @@ AVCodecID VideoCodecToCodecID(VideoCodec return AV_CODEC_ID_VP9; case VideoCodec::kAV1: return AV_CODEC_ID_AV1; + case VideoCodec::kMSMPEG4V1: + return AV_CODEC_ID_MSMPEG4V1; + case VideoCodec::kMSMPEG4V2: + return AV_CODEC_ID_MSMPEG4V2; + case VideoCodec::kMSMPEG4V3: + return AV_CODEC_ID_MSMPEG4V3; + case VideoCodec::kWMV7: + return AV_CODEC_ID_WMV1; + case VideoCodec::kWMV8: + return AV_CODEC_ID_WMV2; + case VideoCodec::kWMV9: + return AV_CODEC_ID_WMV3; + case VideoCodec::kVC1: + return AV_CODEC_ID_VC1; + case VideoCodec::kVP6: + return AV_CODEC_ID_VP6; + case VideoCodec::kMPEG1: + return AV_CODEC_ID_MPEG1VIDEO; + case VideoCodec::kMPEG2: + return AV_CODEC_ID_MPEG2VIDEO; + case VideoCodec::kSorensonSpark: + return AV_CODEC_ID_FLV1; default: DVLOG(1) << "Unknown VideoCodec: " << video_codec; } @@ -351,30 +415,6 @@ bool AVCodecContextToAudioDecoderConfig( codec_context->ch_layout.u.mask, codec_context->ch_layout.nb_channels); - switch (codec) { - // For AC3/EAC3 we enable only demuxing, but not decoding, so FFmpeg does - // not fill |sample_fmt|. - case AudioCodec::kAC3: - case AudioCodec::kEAC3: -#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 AudioCodec::kMpegHAudio: - 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::Microseconds(codec_context->seek_preroll * 1000000.0 / @@ -403,17 +443,6 @@ bool AVCodecContextToAudioDecoderConfig( if (channel_layout == CHANNEL_LAYOUT_DISCRETE) config->SetChannelsForDiscrete(codec_context->ch_layout.nb_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 == AudioCodec::kAC3 || codec == AudioCodec::kEAC3) - return true; -#endif -#if BUILDFLAG(ENABLE_PLATFORM_MPEG_H_AUDIO) - if (codec == AudioCodec::kMpegHAudio) - return true; -#endif - #if BUILDFLAG(USE_PROPRIETARY_CODECS) if (codec == AudioCodec::kAAC) { config->set_aac_extra_data(extra_data); --- patch103/media/filters/ffmpeg_video_decoder.cc 2022-06-16 04:31:15.000000000 +0200 +++ patch103/media/filters/ffmpeg_video_decoder.cc-extra-media 2022-06-19 15:33:32.562955361 +0200 @@ -39,8 +39,6 @@ static int GetFFmpegVideoDecoderThreadCo switch (config.codec()) { case VideoCodec::kUnknown: case VideoCodec::kVC1: - case VideoCodec::kMPEG2: - case VideoCodec::kHEVC: case VideoCodec::kVP9: case VideoCodec::kAV1: case VideoCodec::kDolbyVision: @@ -49,11 +47,22 @@ static int GetFFmpegVideoDecoderThreadCo case VideoCodec::kTheora: case VideoCodec::kMPEG4: + case VideoCodec::kMSMPEG4V1: + case VideoCodec::kMSMPEG4V2: + case VideoCodec::kMSMPEG4V3: + case VideoCodec::kWMV7: + case VideoCodec::kWMV8: + case VideoCodec::kWMV9: + case VideoCodec::kVP6: + case VideoCodec::kMPEG1: + case VideoCodec::kMPEG2: + case VideoCodec::kSorensonSpark: // No extra threads for these codecs. break; case VideoCodec::kH264: case VideoCodec::kVP8: + case VideoCodec::kHEVC: // Normalize to three threads for 1080p content, then scale linearly // with number of pixels. // Examples: --- patch101/media/base/supported_types.cc 2022-04-07 05:21:05.000000000 +0200 +++ patch101/media/base/supported_types.cc.patch 2022-04-11 10:03:43.507906013 +0200 @@ -139,6 +139,15 @@ bool IsVideoCodecProprietary(VideoCodec case VideoCodec::kMPEG4: case VideoCodec::kHEVC: case VideoCodec::kDolbyVision: + case VideoCodec::kMSMPEG4V1: + case VideoCodec::kMSMPEG4V2: + case VideoCodec::kMSMPEG4V3: + case VideoCodec::kWMV7: + case VideoCodec::kWMV8: + case VideoCodec::kWMV9: + case VideoCodec::kVP6: + case VideoCodec::kMPEG1: + case VideoCodec::kSorensonSpark: return true; case VideoCodec::kUnknown: case VideoCodec::kTheora: @@ -161,9 +170,12 @@ bool IsAudioCodecProprietary(AudioCodec case AudioCodec::kMpegHAudio: case AudioCodec::kDTS: case AudioCodec::kDTSXP2: + case AudioCodec::kWMA1: + case AudioCodec::kWMA2: return true; case AudioCodec::kFLAC: + case AudioCodec::kMP2: case AudioCodec::kMP3: case AudioCodec::kOpus: case AudioCodec::kVorbis: @@ -312,6 +322,17 @@ bool IsDefaultSupportedVideoType(const V case VideoCodec::kH264: case VideoCodec::kVP8: case VideoCodec::kTheora: + case VideoCodec::kVC1: + case VideoCodec::kMPEG2: + case VideoCodec::kMSMPEG4V1: + case VideoCodec::kMSMPEG4V2: + case VideoCodec::kMSMPEG4V3: + case VideoCodec::kWMV7: + case VideoCodec::kWMV8: + case VideoCodec::kWMV9: + case VideoCodec::kVP6: + case VideoCodec::kMPEG1: + case VideoCodec::kSorensonSpark: return true; case VideoCodec::kAV1: return IsAV1Supported(type); @@ -322,8 +343,6 @@ bool IsDefaultSupportedVideoType(const V case VideoCodec::kMPEG4: return IsMPEG4Supported(); case VideoCodec::kUnknown: - case VideoCodec::kVC1: - case VideoCodec::kMPEG2: case VideoCodec::kDolbyVision: return false; } @@ -346,6 +365,7 @@ bool IsDefaultSupportedAudioType(const A case AudioCodec::kGSM_MS: return HasOldVoiceCodecSupport(); case AudioCodec::kFLAC: + case AudioCodec::kMP2: case AudioCodec::kMP3: case AudioCodec::kOpus: case AudioCodec::kPCM: @@ -354,10 +374,12 @@ bool IsDefaultSupportedAudioType(const A case AudioCodec::kPCM_S24BE: case AudioCodec::kPCM_ALAW: case AudioCodec::kVorbis: - return true; case AudioCodec::kEAC3: case AudioCodec::kALAC: case AudioCodec::kAC3: + case AudioCodec::kWMA1: + case AudioCodec::kWMA2: + return true; case AudioCodec::kMpegHAudio: case AudioCodec::kUnknown: return false; --- chromium-95.0.4638.54/media/base/video_codecs.h 2021-10-18 21:23:32.000000000 +0200 +++ chromium-95.0.4638.54/media/base/video_codecs.h.extra-media 2021-10-23 21:20:42.205850855 +0200 @@ -31,12 +31,21 @@ enum class VideoCodec { kHEVC, kDolbyVision, kAV1, + kMSMPEG4V1, + kMSMPEG4V2, + kMSMPEG4V3, + kWMV7, + kWMV8, + kWMV9, + kVP6, + kMPEG1, + kSorensonSpark, // DO NOT ADD RANDOM VIDEO CODECS! // // The only acceptable time to add a new codec is if there is production code // that uses said codec in the same CL. - kMaxValue = kAV1, // Must equal the last "real" codec above. + kMaxValue = kSorensonSpark, // Must equal the last "real" codec above. }; // Video codec profiles. Keep in sync with mojo::VideoCodecProfile (see --- chromium-95.0.4638.54/media/base/media_types.cc 2021-10-18 21:23:32.000000000 +0200 +++ chromium-95.0.4638.54/media/base/media_types.cc.extra-media 2021-10-23 22:15:33.461000275 +0200 @@ -36,6 +36,15 @@ VideoType VideoType::FromDecoderConfig(c case VideoCodec::kVC1: case VideoCodec::kMPEG2: case VideoCodec::kMPEG4: + case VideoCodec::kMSMPEG4V1: + case VideoCodec::kMSMPEG4V2: + case VideoCodec::kMSMPEG4V3: + case VideoCodec::kWMV7: + case VideoCodec::kWMV8: + case VideoCodec::kWMV9: + case VideoCodec::kVP6: + case VideoCodec::kMPEG1: + case VideoCodec::kSorensonSpark: break; case VideoCodec::kH264: case VideoCodec::kVP9: @@ -74,4 +83,4 @@ bool operator!=(const VideoType& x, cons return !(x == y); } -} // namespace media \ Pas de fin de ligne à la fin du fichier +} // namespace media --- patch98/third_party/openscreen/src/cast/streaming/remoting.proto 2022-01-21 02:07:49.000000000 +0100 +++ patch98/third_party/openscreen/src/cast/streaming/remoting.proto.2patch 2022-01-26 20:05:07.845280777 +0100 @@ -62,6 +62,9 @@ message AudioDecoderConfig { kCodecMpegHAudio = 17; kCodecDTS = 18; kCodecDTSXP2 = 19; + kCodecMP2 = 20; + kCodecWMA1 = 21; + kCodecWMA2 = 22; } // Proto version of Chrome's media::SampleFormat. @@ -153,6 +156,15 @@ message VideoDecoderConfig { kCodecHEVC = 8; kCodecDolbyVision = 9; kCodecAV1 = 10; + kCodecMSMPEG4V1 = 11; + kCodecMSMPEG4V2 = 12; + kCodecMSMPEG4V3 = 13; + kCodecWMV7 = 14; + kCodecWMV8 = 15; + kCodecWMV9 = 16; + kCodecVP6 = 17; + kCodecMPEG1 = 18; + kCodecSorensonSpark = 19; } // Proto version of Chrome's media::VideoCodecProfile. --- patch103/media/base/video_codecs.cc 2022-06-08 18:03:14.000000000 +0200 +++ patch103/media/base/video_codecs.cc-add-extra-media 2022-06-19 15:55:21.350079599 +0200 @@ -40,6 +40,24 @@ std::string GetCodecName(VideoCodec code return "vp9"; case VideoCodec::kAV1: return "av1"; + case VideoCodec::kMSMPEG4V1: + return "msmpeg4v1"; + case VideoCodec::kMSMPEG4V2: + return "msmpeg4v2"; + case VideoCodec::kMSMPEG4V3: + return "msmpeg4v3"; + case VideoCodec::kWMV7: + return "wmv1"; + case VideoCodec::kWMV8: + return "wmv2"; + case VideoCodec::kWMV9: + return "wmv3"; + case VideoCodec::kVP6: + return "vp6"; + case VideoCodec::kMPEG1: + return "mpeg1video"; + case VideoCodec::kSorensonSpark: + return "flv1"; } NOTREACHED(); return ""; @@ -988,6 +1006,50 @@ void ParseCodec(const std::string& codec return; } #endif + if (codec_id == "msmpeg4v1") { + codec = VideoCodec::kMSMPEG4V1; + return; + } + if (codec_id == "msmpeg4v2") { + codec = VideoCodec::kMSMPEG4V2; + return; + } + if (codec_id == "msmpeg4v3") { + codec = VideoCodec::kMSMPEG4V3; + return; + } + if (codec_id == "wmv7") { + codec = VideoCodec::kWMV7; + return; + } + if (codec_id == "wmv8") { + codec = VideoCodec::kWMV8; + return; + } + if (codec_id == "wmv9") { + codec = VideoCodec::kWMV9; + return; + } + if (codec_id == "vc1") { + codec = VideoCodec::kVC1; + return; + } + if (codec_id == "vp6") { + codec = VideoCodec::kVP6; + return; + } + if (codec_id == "mpeg1video") { + codec = VideoCodec::kMPEG1; + return; + } + if (codec_id == "mpeg2video") { + codec = VideoCodec::kMPEG2; + return; + } + if (codec_id == "flv1") { + codec = VideoCodec::kSorensonSpark; + return; + } codec = VideoCodec::kUnknown; } --- patch103/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits.h 2022-06-08 18:03:14.000000000 +0200 +++ patch103/media/mojo/mojom/stable/stable_video_decoder_types_mojom_traits.h-extra-media-video 2022-06-19 18:48:13.178021661 +0200 @@ -726,6 +726,24 @@ struct EnumTraits<media::stable::mojom:: return media::stable::mojom::VideoCodec::kDolbyVision; case ::media::VideoCodec::kAV1: return media::stable::mojom::VideoCodec::kAV1; + case ::media::VideoCodec::kMSMPEG4V1: + return media::stable::mojom::VideoCodec::kMSMPEG4V1; + case ::media::VideoCodec::kMSMPEG4V2: + return media::stable::mojom::VideoCodec::kMSMPEG4V2; + case ::media::VideoCodec::kMSMPEG4V3: + return media::stable::mojom::VideoCodec::kMSMPEG4V3; + case ::media::VideoCodec::kWMV7: + return media::stable::mojom::VideoCodec::kWMV7; + case ::media::VideoCodec::kWMV8: + return media::stable::mojom::VideoCodec::kWMV8; + case ::media::VideoCodec::kWMV9: + return media::stable::mojom::VideoCodec::kWMV9; + case ::media::VideoCodec::kVP6: + return media::stable::mojom::VideoCodec::kVP6; + case ::media::VideoCodec::kMPEG1: + return media::stable::mojom::VideoCodec::kMPEG1; + case ::media::VideoCodec::kSorensonSpark: + return media::stable::mojom::VideoCodec::kSorensonSpark; } NOTREACHED(); @@ -770,6 +788,33 @@ struct EnumTraits<media::stable::mojom:: case media::stable::mojom::VideoCodec::kAV1: *output = ::media::VideoCodec::kAV1; return true; + case media::stable::mojom::VideoCodec::kMSMPEG4V1: + *output = ::media::VideoCodec::kMSMPEG4V1; + return true; + case media::stable::mojom::VideoCodec::kMSMPEG4V2: + *output = ::media::VideoCodec::kMSMPEG4V2; + return true; + case media::stable::mojom::VideoCodec::kMSMPEG4V3: + *output = ::media::VideoCodec::kMSMPEG4V3; + return true; + case media::stable::mojom::VideoCodec::kWMV7: + *output = ::media::VideoCodec::kWMV7; + return true; + case media::stable::mojom::VideoCodec::kWMV8: + *output = ::media::VideoCodec::kWMV8; + return true; + case media::stable::mojom::VideoCodec::kWMV9: + *output = ::media::VideoCodec::kWMV9; + return true; + case media::stable::mojom::VideoCodec::kVP6: + *output = ::media::VideoCodec::kVP6; + return true; + case media::stable::mojom::VideoCodec::kMPEG1: + *output = ::media::VideoCodec::kMPEG1; + return true; + case media::stable::mojom::VideoCodec::kSorensonSpark: + *output = ::media::VideoCodec::kSorensonSpark; + return true; } NOTREACHED(); --- patch103/media/mojo/mojom/stable/stable_video_decoder_types.mojom 2022-06-08 18:03:14.000000000 +0200 +++ patch103/media/mojo/mojom/stable/stable_video_decoder_types.mojom-extra-media-video 2022-06-15 20:04:47.058444198 +0200 @@ -25,6 +25,15 @@ enum VideoCodec { kHEVC, kDolbyVision, kAV1, + kMSMPEG4V1, + kMSMPEG4V2, + kMSMPEG4V3, + kWMV7, + kWMV8, + kWMV9, + kVP6, + kMPEG1, + kSorensonSpark, // DO NOT ADD RANDOM VIDEO CODECS! // // The only acceptable time to add a new codec is if there is production code --- patch103/media/filters/ffmpeg_glue.cc 2022-06-16 04:31:15.000000000 +0200 +++ patch103/media/filters/ffmpeg_glue.cc-wmvflvmpg 2022-06-20 18:34:10.627824923 +0200 @@ -151,6 +151,14 @@ bool FFmpegGlue::OpenContext(bool is_loc container_ = container_names::CONTAINER_AMR; else if (strcmp(format_context_->iformat->name, "avi") == 0) container_ = container_names::CONTAINER_AVI; + else if (strcmp(format_context_->iformat->name, "flv") == 0) + container_ = container_names::CONTAINER_FLV; + else if (strcmp(format_context_->iformat->name, "asf") == 0) + container_ = container_names::CONTAINER_ASF; + else if (strcmp(format_context_->iformat->name, "mpegvideo,mpgv") == 0) + container_ = container_names::CONTAINER_ASF; //squidf- better than CONTAINER_MP3 + else if (strcmp(format_context_->iformat->name, "vp6,vp60") == 0) + container_ = container_names::CONTAINER_FLV; //squidf DCHECK_NE(container_, container_names::CONTAINER_UNKNOWN); LogContainer(is_local_file, container_);