Commit 0468e089 authored by wolenetz@chromium.org's avatar wolenetz@chromium.org

MSE: Allow requesting coded frame processor: legacy or new

Updates WebMediaSource to have an addSourceBuffer() version that
allows caller to request which of LegacyFrameProcessor or a (not yet
landed in Chromium) new frame processor to use to process frames parsed
during appends to the source buffer.

The choice of which frame processor to request is based on
--enable-experimental-web-platform-features, as exposed through
RuntimeEnabledFeatures::mediaSourceExperimentalEnabled(): if enabled,
the new frame processor is requested. Otherwise, LegacyFrameProcessor is
requested.

Until the updated Chromium side WebMediaSourceImpl lands and (later)
the new Chromium frame processor lands, LegacyFrameProcessor will be
used regardless of the requested processor.

R=acolwell@chromium.org,abarth@chromium.org
BUG=249422
TEST=All MediaSource layout tests pass both before and after Chromium
side WMSI change is applied locally, and MediaSourceBase logging shows
frameProcessorChoice reflects usage (or lack) of cmdline switch
--enable-experimental-web-platform-features

Review URL: https://codereview.chromium.org/220593010

git-svn-id: svn://svn.chromium.org/blink/trunk@170678 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 99bd0129
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "config.h" #include "config.h"
#include "modules/mediasource/MediaSourceBase.h" #include "modules/mediasource/MediaSourceBase.h"
#include "RuntimeEnabledFeatures.h"
#include "bindings/v8/ExceptionMessages.h" #include "bindings/v8/ExceptionMessages.h"
#include "bindings/v8/ExceptionState.h" #include "bindings/v8/ExceptionState.h"
#include "bindings/v8/ExceptionStatePlaceholder.h" #include "bindings/v8/ExceptionStatePlaceholder.h"
...@@ -310,7 +311,14 @@ void MediaSourceBase::stop() ...@@ -310,7 +311,14 @@ void MediaSourceBase::stop()
PassOwnPtr<WebSourceBuffer> MediaSourceBase::createWebSourceBuffer(const String& type, const Vector<String>& codecs, ExceptionState& exceptionState) PassOwnPtr<WebSourceBuffer> MediaSourceBase::createWebSourceBuffer(const String& type, const Vector<String>& codecs, ExceptionState& exceptionState)
{ {
WebSourceBuffer* webSourceBuffer = 0; WebSourceBuffer* webSourceBuffer = 0;
switch (m_webMediaSource->addSourceBuffer(type, codecs, &webSourceBuffer)) {
// FIXME: Always use the new frame processor once it has stabilized enough. See http://crbug.com/249422.
WebMediaSource::FrameProcessorChoice frameProcessorChoice = RuntimeEnabledFeatures::mediaSourceExperimentalEnabled() ?
WebMediaSource::UseNewFrameProcessor : WebMediaSource::UseLegacyFrameProcessor;
WTF_LOG(Media, "MediaSourceBase::createWebSourceBuffer() %p : frameProcessorChoice = %i", this, frameProcessorChoice);
switch (m_webMediaSource->addSourceBuffer(type, codecs, frameProcessorChoice, &webSourceBuffer)) {
case WebMediaSource::AddStatusOk: case WebMediaSource::AddStatusOk:
return adoptPtr(webSourceBuffer); return adoptPtr(webSourceBuffer);
case WebMediaSource::AddStatusNotSupported: case WebMediaSource::AddStatusNotSupported:
......
...@@ -52,9 +52,26 @@ public: ...@@ -52,9 +52,26 @@ public:
EndOfStreamStatusDecodeError, EndOfStreamStatusDecodeError,
}; };
enum FrameProcessorChoice {
UseLegacyFrameProcessor,
UseNewFrameProcessor
};
virtual ~WebMediaSource() { } virtual ~WebMediaSource() { }
virtual AddStatus addSourceBuffer(const WebString& type, const WebVector<WebString>& codecs, WebSourceBuffer**) = 0; // FIXME: Remove addSourceBuffer() that has no FrameProcessorChoice, and
// remove the default implementation for the addSourceBuffer() that has
// FrameProcessorChoice once the latter's Chromium implementation has
// landed. See http://crbug.com/249422.
virtual AddStatus addSourceBuffer(const WebString& type, const WebVector<WebString>& codecs, WebSourceBuffer** webSourceBuffer)
{
return addSourceBuffer(type, codecs, WebMediaSource::UseLegacyFrameProcessor, webSourceBuffer);
}
virtual AddStatus addSourceBuffer(const WebString& type, const WebVector<WebString>& codecs, const FrameProcessorChoice choice, WebSourceBuffer** webSourceBuffer)
{
return addSourceBuffer(type, codecs, webSourceBuffer);
}
virtual double duration() = 0; virtual double duration() = 0;
virtual void setDuration(double) = 0; virtual void setDuration(double) = 0;
virtual void markEndOfStream(EndOfStreamStatus) = 0; virtual void markEndOfStream(EndOfStreamStatus) = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment