diff --git a/dom/media/MediaPrefs.h b/dom/media/MediaPrefs.h index c67a899896..1f2825fd21 100644 --- a/dom/media/MediaPrefs.h +++ b/dom/media/MediaPrefs.h @@ -117,6 +117,9 @@ private: #ifdef MOZ_FFVPX DECL_MEDIA_PREF("media.ffvpx.enabled", PDMFFVPXEnabled, bool, true); #endif +#if defined(MOZ_FFVPX) || defined(MOZ_FFMPEG) + DECL_MEDIA_PREF("media.ffmpeg.skip_loop_filter", FFmpegSkipLoopFilter, bool, false); +#endif #ifdef MOZ_AV1 DECL_MEDIA_PREF("media.av1.enabled", AV1Enabled, bool, false); #endif diff --git a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp index f3101e44ce..d9ab6fd5d1 100644 --- a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp +++ b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp @@ -15,6 +15,7 @@ #include "FFmpegVideoDecoder.h" #include "FFmpegLog.h" +#include "MediaPrefs.h" #include "mozilla/PodOperations.h" #include "libavutil/pixfmt.h" @@ -152,6 +153,12 @@ FFmpegVideoDecoder::InitCodecContext() mCodecContext->thread_type = FF_THREAD_SLICE | FF_THREAD_FRAME; } + if(MediaPrefs::FFmpegSkipLoopFilter()) { + // Enable skipping loop filter and allow non spec compliant speedup tricks. + mCodecContext->flags2 |= 1; //AV_CODEC_FLAG2_FAST - could not inline for unknown reason ^-^' + mCodecContext->skip_loop_filter = AVDISCARD_ALL; + } + // FFmpeg will call back to this to negotiate a video pixel format. mCodecContext->get_format = ChoosePixelFormat;