diff options
author | Derek Sollenberger <djsollen@google.com> | 2011-01-25 18:02:00 -0500 |
---|---|---|
committer | Derek Sollenberger <djsollen@google.com> | 2011-01-26 18:27:07 -0500 |
commit | 136290ef021ff9a9bf9152124a5fa42069acfdfc (patch) | |
tree | 763219807011b9f4442e72e25f44bede0a2683fa /WebCore/platform/graphics/android/MediaLayer.cpp | |
parent | 9d071845bbad7f9b73a17de59ad8b564e6ce39e4 (diff) | |
download | external_webkit-136290ef021ff9a9bf9152124a5fa42069acfdfc.zip external_webkit-136290ef021ff9a9bf9152124a5fa42069acfdfc.tar.gz external_webkit-136290ef021ff9a9bf9152124a5fa42069acfdfc.tar.bz2 |
Initial pass at a video API for plugins.
bug: 3072603
Change-Id: Ie22d289a93682dfd68cf81f5220d658d45a69d81
Diffstat (limited to 'WebCore/platform/graphics/android/MediaLayer.cpp')
-rw-r--r-- | WebCore/platform/graphics/android/MediaLayer.cpp | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/WebCore/platform/graphics/android/MediaLayer.cpp b/WebCore/platform/graphics/android/MediaLayer.cpp index e4ccbdb..3ec21a4 100644 --- a/WebCore/platform/graphics/android/MediaLayer.cpp +++ b/WebCore/platform/graphics/android/MediaLayer.cpp @@ -15,12 +15,11 @@ */ #include "config.h" #include "MediaLayer.h" +#include "MediaTexture.h" #include "TilesManager.h" #if USE(ACCELERATED_COMPOSITING) -#include <wtf/CurrentTime.h> - #define LAYER_DEBUG #undef LAYER_DEBUG @@ -45,6 +44,9 @@ MediaLayer::MediaLayer() : LayerAndroid(false) { m_bufferedTexture = new MediaTexture(EGL_NO_CONTEXT); m_bufferedTexture->incStrong(this); + m_videoTexture = new VideoTexture(); + m_videoTexture->incStrong(this); + m_currentTextureInfo = 0; m_isContentInverted = false; XLOG("Creating Media Layer %p", this); @@ -54,6 +56,9 @@ MediaLayer::MediaLayer(const MediaLayer& layer) : LayerAndroid(layer) { m_bufferedTexture = layer.getTexture(); m_bufferedTexture->incStrong(this); + m_videoTexture = layer.m_videoTexture; + m_videoTexture->incStrong(this); + m_currentTextureInfo = 0; m_isContentInverted = layer.m_isContentInverted; XLOG("Creating Media Layer Copy %p -> %p", &layer, this); @@ -63,24 +68,31 @@ MediaLayer::~MediaLayer() { XLOG("Deleting Media Layer"); m_bufferedTexture->decStrong(this); + m_videoTexture->decStrong(this); } bool MediaLayer::drawGL(SkMatrix& matrix) { + + TransformationMatrix m = drawTransform(); + // the layer's shader draws the content inverted so we must undo + // that change in the transformation matrix + if (!m_isContentInverted) { + m.flipY(); + m.translate(0, -getSize().height()); + } + + // check to see if we need to create a video texture + m_videoTexture->initNativeWindowIfNeeded(); + // draw any video content if present + m_videoTexture->drawVideo(m); + + // draw the primary content if (m_bufferedTexture) { TextureInfo* textureInfo = m_bufferedTexture->consumerLock(); if (textureInfo) { SkRect rect; rect.set(0, 0, getSize().width(), getSize().height()); - TransformationMatrix m = drawTransform(); - - // the layer's shader draws the content inverted so we must undo - // that change in the transformation matrix - if (!m_isContentInverted) { - m.flipY(); - m.translate(0, -getSize().height()); - } - TilesManager::instance()->shader()->drawLayerQuad(m, rect, textureInfo->m_textureId, 1.0f); //TODO fix this m_drawOpacity @@ -94,6 +106,26 @@ bool MediaLayer::drawGL(SkMatrix& matrix) return true; } +ANativeWindow* MediaLayer::acquireNativeWindowForVideo() +{ + return m_videoTexture->requestNewWindow(); +} + +void MediaLayer::setWindowDimensionsForVideo(const ANativeWindow* window, const SkRect& dimensions) +{ + if (window != m_videoTexture->getNativeWindow()) + return; + + //TODO validate that the dimensions do not exceed the plugin's bounds + m_videoTexture->setDimensions(dimensions); +} + +void MediaLayer::releaseNativeWindowForVideo(ANativeWindow* window) +{ + if (window == m_videoTexture->getNativeWindow()) + m_videoTexture->releaseNativeWindow(); +} + } // namespace WebCore #endif // USE(ACCELERATED_COMPOSITING) |