Bug 1371188 P4 - add media.decoder.skip-to-next-key-frame.enabled pref; r?jya
MozReview-Commit-ID: HUQX1IeWkEE
--- a/dom/media/MediaFormatReader.cpp
+++ b/dom/media/MediaFormatReader.cpp
@@ -1537,16 +1537,21 @@ MediaFormatReader::GetDecoderData(TrackT
}
return mVideo;
}
bool
MediaFormatReader::ShouldSkip(TimeUnit aTimeThreshold)
{
MOZ_ASSERT(HasVideo());
+
+ if (!MediaPrefs::MFRSkipToNextKeyFrameEnabled()) {
+ return false;
+ }
+
TimeUnit nextKeyframe;
nsresult rv = mVideo.mTrackDemuxer->GetNextRandomAccessPoint(&nextKeyframe);
if (NS_FAILED(rv)) {
// Only OggTrackDemuxer with video type gets into here.
// We don't support skip-to-next-frame for this case.
return false;
}
return (nextKeyframe < aTimeThreshold
--- a/dom/media/MediaPrefs.h
+++ b/dom/media/MediaPrefs.h
@@ -136,16 +136,17 @@ private:
DECL_MEDIA_PREF("media.wmf.vp9.enabled", PDMWMFVP9DecoderEnabled, bool, true);
DECL_MEDIA_PREF("media.wmf.decoder.thread-count", PDMWMFThreadCount, int32_t, -1);
DECL_MEDIA_PREF("media.wmf.allow-unsupported-resolutions", PDMWMFAllowUnsupportedResolutions, bool, false);
#endif
DECL_MEDIA_PREF("media.decoder.fuzzing.enabled", PDMFuzzingEnabled, bool, false);
DECL_MEDIA_PREF("media.decoder.fuzzing.video-output-minimum-interval-ms", PDMFuzzingInterval, uint32_t, 0);
DECL_MEDIA_PREF("media.decoder.fuzzing.dont-delay-inputexhausted", PDMFuzzingDelayInputExhausted, bool, true);
DECL_MEDIA_PREF("media.decoder.recycle.enabled", MediaDecoderCheckRecycling, bool, false);
+ DECL_MEDIA_PREF("media.decoder.skip-to-next-key-frame.enabled", MFRSkipToNextKeyFrameEnabled, bool, true);
DECL_MEDIA_PREF("media.gmp.decoder.enabled", PDMGMPEnabled, bool, true);
DECL_MEDIA_PREF("media.gmp.decoder.aac", GMPAACPreferred, uint32_t, 0);
DECL_MEDIA_PREF("media.gmp.decoder.h264", GMPH264Preferred, uint32_t, 0);
DECL_MEDIA_PREF("media.eme.audio.blank", EMEBlankAudio, bool, false);
DECL_MEDIA_PREF("media.eme.video.blank", EMEBlankVideo, bool, false);
DECL_MEDIA_PREF("media.eme.chromium-api.enabled", EMEChromiumAPIEnabled, bool, false);
DECL_MEDIA_PREF("media.eme.chromium-api.video-shmems",
EMEChromiumAPIVideoShmemCount,
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -618,16 +618,19 @@ pref("media.video-queue.default-size", 1
pref("media.video-queue.send-to-compositor-size", 9999);
// Whether to disable the video stats to prevent fingerprinting
pref("media.video_stats.enabled", true);
// Whether to check the decoder supports recycling.
pref("media.decoder.recycle.enabled", false);
+//Weather MFR should try to skip to next key frame or not.
+pref("media.decoder.skip-to-next-key-frame.enabled", true);
+
// Log level for cubeb, the audio input/output system. Valid values are
// "verbose", "normal" and "" (log disabled).
pref("media.cubeb.log_level", "");
// Set to true to force demux/decode warnings to be treated as errors.
pref("media.playback.warnings-as-errors", false);
// Weather we allow AMD switchable graphics