summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/platform/graphics/android/MediaListener.h
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/WebCore/platform/graphics/android/MediaListener.h
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/WebCore/platform/graphics/android/MediaListener.h')
-rw-r--r--Source/WebCore/platform/graphics/android/MediaListener.h92
1 files changed, 92 insertions, 0 deletions
diff --git a/Source/WebCore/platform/graphics/android/MediaListener.h b/Source/WebCore/platform/graphics/android/MediaListener.h
new file mode 100644
index 0000000..0a85574
--- /dev/null
+++ b/Source/WebCore/platform/graphics/android/MediaListener.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MediaListener_h
+#define MediaListener_h
+
+#if USE(ACCELERATED_COMPOSITING)
+
+#include <gui/SurfaceTexture.h>
+#include <jni.h>
+#include <JNIUtility.h>
+#include "WebCoreJni.h"
+
+#ifdef DEBUG
+
+#include <cutils/log.h>
+#include <wtf/text/CString.h>
+
+#undef XLOG
+#define XLOG(...) android_printLog(ANDROID_LOG_DEBUG, "MediaListener", __VA_ARGS__)
+
+#else
+
+#undef XLOG
+#define XLOG(...)
+
+#endif // DEBUG
+
+namespace WebCore {
+
+class MediaListener : public android::SurfaceTexture::FrameAvailableListener {
+
+public:
+ MediaListener(jobject weakWebViewRef)
+ : m_weakWebViewRef(weakWebViewRef)
+ , m_postInvalMethod(0)
+ , m_frameAvailable(false)
+ {
+ if (!m_weakWebViewRef)
+ return;
+
+ JNIEnv* env = JSC::Bindings::getJNIEnv();
+ jobject localWebViewRef = env->NewLocalRef(m_weakWebViewRef);
+ if (localWebViewRef) {
+ jclass wvClass = env->GetObjectClass(localWebViewRef);
+ m_postInvalMethod = env->GetMethodID(wvClass, "postInvalidate", "()V");
+ env->DeleteLocalRef(wvClass);
+ env->DeleteLocalRef(localWebViewRef);
+ }
+ checkException(env);
+ }
+
+ virtual void onFrameAvailable()
+ {
+ JNIEnv* env = JSC::Bindings::getJNIEnv();
+ jobject localWebViewRef = env->NewLocalRef(m_weakWebViewRef);
+ if (localWebViewRef) {
+ env->CallVoidMethod(localWebViewRef, m_postInvalMethod);
+ env->DeleteLocalRef(localWebViewRef);
+ }
+ checkException(env);
+ if (!m_frameAvailable) {
+ m_frameAvailable = true;
+ }
+ }
+
+ void resetFrameAvailable() { m_frameAvailable = false; }
+ bool isFrameAvailable() { return m_frameAvailable; }
+
+private:
+ jobject m_weakWebViewRef;
+ jmethodID m_postInvalMethod;
+ bool m_frameAvailable;
+};
+
+} // namespace WebCore
+
+#endif // USE(ACCELERATED_COMPOSITING)
+#endif // MediaListener_h