Bug 1168674: [ogg] P2. Hook up new OggDemuxer. r?jya draft
authorBrion Vibber <brion@pobox.com>
Thu, 21 Jul 2016 11:34:42 +1000
changeset 394184 6b4746aa91f6b353663637aaea20fdf297e590bd
parent 394183 7f453e8e6d4ca7a155aaa28c1883eec6941fa3fd
child 394185 0e172cc45989221dc6e0cf100d49f68cef1830a1
push id24516
push userbmo:jyavenard@mozilla.com
push dateFri, 29 Jul 2016 07:36:49 +0000
reviewersjya
bugs1168674
milestone50.0a1
Bug 1168674: [ogg] P2. Hook up new OggDemuxer. r?jya Not on by default yet. use media.format-reader.ogg preference MozReview-Commit-ID: 7pH67XERTbW
dom/media/DecoderTraits.cpp
dom/media/ogg/OggDecoder.cpp
modules/libpref/init/all.js
--- a/dom/media/DecoderTraits.cpp
+++ b/dom/media/DecoderTraits.cpp
@@ -8,16 +8,17 @@
 #include "MediaDecoder.h"
 #include "nsCharSeparatedTokenizer.h"
 #include "nsMimeTypes.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/Telemetry.h"
 
 #include "OggDecoder.h"
 #include "OggReader.h"
+#include "OggDemuxer.h"
 
 #include "WebMDecoder.h"
 #include "WebMDemuxer.h"
 
 #ifdef MOZ_RAW
 #include "RawDecoder.h"
 #include "RawReader.h"
 #endif
@@ -684,17 +685,19 @@ MediaDecoderReader* DecoderTraits::Creat
     decoderReader = new MediaFormatReader(aDecoder, new WAVDemuxer(aDecoder->GetResource()));
   } else
 #ifdef MOZ_RAW
   if (IsRawType(aType)) {
     decoderReader = new RawReader(aDecoder);
   } else
 #endif
   if (IsOggType(aType)) {
-    decoderReader = new OggReader(aDecoder);
+    decoderReader = Preferences::GetBool("media.format-reader.ogg", true) ?
+      static_cast<MediaDecoderReader*>(new MediaFormatReader(aDecoder, new OggDemuxer(aDecoder->GetResource()))) :
+      new OggReader(aDecoder);
   } else
   if (IsWaveType(aType)) {
     decoderReader = new WaveReader(aDecoder);
   } else
 #ifdef MOZ_OMX_DECODER
   if (IsOmxSupportedType(aType)) {
     decoderReader = new MediaOmxReader(aDecoder);
   } else
--- a/dom/media/ogg/OggDecoder.cpp
+++ b/dom/media/ogg/OggDecoder.cpp
@@ -1,18 +1,26 @@
 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim:set ts=2 sw=2 sts=2 et cindent: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
+#include "mozilla/Preferences.h"
 #include "MediaDecoderStateMachine.h"
+#include "MediaFormatReader.h"
+#include "OggDemuxer.h"
 #include "OggReader.h"
 #include "OggDecoder.h"
 
 namespace mozilla {
 
 MediaDecoderStateMachine* OggDecoder::CreateStateMachine()
 {
-  return new MediaDecoderStateMachine(this, new OggReader(this));
+  bool useFormatDecoder =
+    Preferences::GetBool("media.format-reader.ogg", true);
+  RefPtr<MediaDecoderReader> reader = useFormatDecoder ?
+      static_cast<MediaDecoderReader*>(new MediaFormatReader(this, new OggDemuxer(GetResource()), GetVideoFrameContainer())) :
+      new OggReader(this);
+  return new MediaDecoderStateMachine(this, reader);
 }
 
 } // namespace mozilla
--- a/modules/libpref/init/all.js
+++ b/modules/libpref/init/all.js
@@ -537,16 +537,19 @@ pref("media.mediasource.mp4.enabled", tr
 
 #if defined(XP_WIN) || defined(XP_MACOSX) || defined(MOZ_WIDGET_GONK)
 pref("media.mediasource.webm.enabled", false);
 #else
 pref("media.mediasource.webm.enabled", true);
 #endif
 pref("media.mediasource.webm.audio.enabled", true);
 
+// Use new MediaFormatReader architecture for plain ogg.
+pref("media.format-reader.ogg", false);
+
 pref("media.benchmark.vp9.threshold", 150);
 pref("media.benchmark.frames", 300);
 pref("media.benchmark.timeout", 1000);
 
 #ifdef MOZ_WEBSPEECH
 pref("media.webspeech.recognition.enable", false);
 pref("media.webspeech.synth.enabled", false);
 #endif