summaryrefslogtreecommitdiffstats
path: root/Source/WebKit/android
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2011-08-03 11:06:56 -0400
committerDerek Sollenberger <djsollen@google.com>2011-08-03 14:00:17 -0400
commit2c05b037dcbc9de2f41781747422c2098c42c16e (patch)
treec7dc65608bd8e57fa550413cc04211c670dbbfa8 /Source/WebKit/android
parent03137dd16df459ef3bee925373347982cb98124d (diff)
downloadexternal_webkit-2c05b037dcbc9de2f41781747422c2098c42c16e.zip
external_webkit-2c05b037dcbc9de2f41781747422c2098c42c16e.tar.gz
external_webkit-2c05b037dcbc9de2f41781747422c2098c42c16e.tar.bz2
Replace plugin's OpenGL API with a NativeWindow API.
bug: 5114637 Change-Id: Idfadf95b9b65bf87ad2edf76fd2c5fc0513a75c3
Diffstat (limited to 'Source/WebKit/android')
-rw-r--r--Source/WebKit/android/plugins/ANPNativeWindowInterface.cpp (renamed from Source/WebKit/android/plugins/ANPOpenGLInterface.cpp)67
-rw-r--r--Source/WebKit/android/plugins/ANPNativeWindow_npapi.h51
-rw-r--r--Source/WebKit/android/plugins/android_npapi.h2
3 files changed, 70 insertions, 50 deletions
diff --git a/Source/WebKit/android/plugins/ANPOpenGLInterface.cpp b/Source/WebKit/android/plugins/ANPNativeWindowInterface.cpp
index 839ec17..a61e122 100644
--- a/Source/WebKit/android/plugins/ANPOpenGLInterface.cpp
+++ b/Source/WebKit/android/plugins/ANPNativeWindowInterface.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2010, The Android Open Source Project
+ * Copyright 2011, The Android Open Source Project
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,7 +26,9 @@
// must include config.h first for webkit to fiddle with new/delete
#include "config.h"
-#include "ANPOpenGL_npapi.h"
+#include "ANPNativeWindow_npapi.h"
+
+#include <android/native_window.h>
#include "PluginView.h"
#include "PluginWidgetAndroid.h"
#include "MediaLayer.h"
@@ -36,6 +38,7 @@
#include "Chrome.h"
#include "ChromeClient.h"
+
using namespace android;
static WebCore::PluginView* pluginViewForInstance(NPP instance) {
@@ -44,59 +47,26 @@ static WebCore::PluginView* pluginViewForInstance(NPP instance) {
return WebCore::PluginView::currentPluginView();
}
-static EGLContext anp_acquireContext(NPP instance) {
+static WebCore::MediaLayer* mediaLayerForInstance(NPP instance) {
WebCore::PluginView* pluginView = pluginViewForInstance(instance);
PluginWidgetAndroid* pluginWidget = pluginView->platformPluginWidget();
- WebCore::MediaLayer* mediaLayer = pluginWidget->getLayer();
-
- if (!mediaLayer)
- return EGL_NO_CONTEXT;
-
- return mediaLayer->getTexture()->producerAcquireContext();
+ return pluginWidget->getLayer();
}
-static ANPTextureInfo anp_lockTexture(NPP instance) {
- WebCore::PluginView* pluginView = pluginViewForInstance(instance);
- PluginWidgetAndroid* pluginWidget = pluginView->platformPluginWidget();
- WebCore::MediaLayer* mediaLayer = pluginWidget->getLayer();
- WebCore::DoubleBufferedTexture* texture = mediaLayer->getTexture();
-
- // lock the texture and cache the internal info
- WebCore::TextureInfo* info = texture->producerLock();
- mediaLayer->setCurrentTextureInfo(info);
-
- ANPTextureInfo anpInfo;
- anpInfo.textureId = info->m_textureId;
- anpInfo.width = (int32_t) info->m_width;
- anpInfo.height = (int32_t) info->m_height;
- anpInfo.internalFormat = info->m_internalFormat;
- return anpInfo;
-}
-
-static void anp_releaseTexture(NPP instance, const ANPTextureInfo* textureInfo) {
- WebCore::PluginView* pluginView = pluginViewForInstance(instance);
- PluginWidgetAndroid* pluginWidget = pluginView->platformPluginWidget();
- WebCore::MediaLayer* mediaLayer = pluginWidget->getLayer();
- WebCore::DoubleBufferedTexture* texture = mediaLayer->getTexture();
-
- //copy the info into our internal structure
- WebCore::TextureInfo* info = mediaLayer->getCurrentTextureInfo();
- info->m_textureId = textureInfo->textureId;
- info->m_width = textureInfo->width;
- info->m_height = textureInfo->height;
- info->m_internalFormat = textureInfo->internalFormat;
-
- texture->producerReleaseAndSwap();
+static ANativeWindow* anp_acquireNativeWindow(NPP instance) {
+ WebCore::MediaLayer* mediaLayer = mediaLayerForInstance(instance);
+ if (!mediaLayer)
+ return 0;
- // invalidate the java view so that this content is drawn
- pluginWidget->viewInvalidate();
+ return mediaLayer->acquireNativeWindowForContent();
}
static void anp_invertPluginContent(NPP instance, bool isContentInverted) {
- WebCore::PluginView* pluginView = pluginViewForInstance(instance);
+ PluginView* pluginView = pluginViewForInstance(instance);
PluginWidgetAndroid* pluginWidget = pluginView->platformPluginWidget();
WebCore::MediaLayer* mediaLayer = pluginWidget->getLayer();
+ // update the layer
mediaLayer->invertContents(isContentInverted);
//force the layer to sync to the UI thread
@@ -106,16 +76,13 @@ static void anp_invertPluginContent(NPP instance, bool isContentInverted) {
}
-
///////////////////////////////////////////////////////////////////////////////
#define ASSIGN(obj, name) (obj)->name = anp_##name
-void ANPOpenGLInterfaceV0_Init(ANPInterface* v) {
- ANPOpenGLInterfaceV0* i = reinterpret_cast<ANPOpenGLInterfaceV0*>(v);
+void ANPNativeWindowInterfaceV0_Init(ANPInterface* v) {
+ ANPNativeWindowInterfaceV0* i = reinterpret_cast<ANPNativeWindowInterfaceV0*>(v);
- ASSIGN(i, acquireContext);
- ASSIGN(i, lockTexture);
- ASSIGN(i, releaseTexture);
+ ASSIGN(i, acquireNativeWindow);
ASSIGN(i, invertPluginContent);
}
diff --git a/Source/WebKit/android/plugins/ANPNativeWindow_npapi.h b/Source/WebKit/android/plugins/ANPNativeWindow_npapi.h
new file mode 100644
index 0000000..050bc94
--- /dev/null
+++ b/Source/WebKit/android/plugins/ANPNativeWindow_npapi.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2011, The Android Open Source Project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ANPNativeWindow_npapi_h
+#define ANPNativeWindow_npapi_h
+
+#include "android_npapi.h"
+
+struct ANativeWindow;
+
+struct ANPNativeWindowInterfaceV0 : ANPInterface {
+ /**
+ * Constructs a new native window to be used for rendering plugin content.
+ *
+ * Subsequent calls will return the original constructed window. Further, if
+ * the browser is unable to acquire the window quickly it may return NULL in
+ * order to not block the plugin indefinitely. A subsequent call will then
+ * return the window if it is available.
+ */
+ ANativeWindow* (*acquireNativeWindow)(NPP instance);
+
+ /**
+ * Invert the contents of the plugin on the y-axis.
+ * default is to not be inverted (e.g. use OpenGL coordinates)
+ */
+ void (*invertPluginContent)(NPP instance, bool isContentInverted);
+};
+
+#endif // ANPNativeWindow_npapi_h
diff --git a/Source/WebKit/android/plugins/android_npapi.h b/Source/WebKit/android/plugins/android_npapi.h
index 23db70b..bcb0bbb 100644
--- a/Source/WebKit/android/plugins/android_npapi.h
+++ b/Source/WebKit/android/plugins/android_npapi.h
@@ -129,6 +129,8 @@ typedef uint32_t ANPMatrixFlag;
#define kSystemInterfaceV2_ANPGetValue ((NPNVariable)1017)
#define kWindowInterfaceV2_ANPGetValue ((NPNVariable)1018)
+#define kNativeWindowInterfaceV0_ANPGetValue ((NPNVariable)1019)
+
/** queries for the drawing models supported on this device.
NPN_GetValue(inst, kSupportedDrawingModel_ANPGetValue, uint32_t* bits)