summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/graphics/android/MediaLayer.cpp
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2011-01-25 18:02:00 -0500
committerDerek Sollenberger <djsollen@google.com>2011-01-26 18:27:07 -0500
commit136290ef021ff9a9bf9152124a5fa42069acfdfc (patch)
tree763219807011b9f4442e72e25f44bede0a2683fa /WebCore/platform/graphics/android/MediaLayer.cpp
parent9d071845bbad7f9b73a17de59ad8b564e6ce39e4 (diff)
downloadexternal_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.cpp54
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)