diff options
author | Derek Sollenberger <djsollen@google.com> | 2011-08-03 11:06:56 -0400 |
---|---|---|
committer | Derek Sollenberger <djsollen@google.com> | 2011-08-03 14:00:17 -0400 |
commit | 2c05b037dcbc9de2f41781747422c2098c42c16e (patch) | |
tree | c7dc65608bd8e57fa550413cc04211c670dbbfa8 /Source/WebCore/platform/graphics/android/MediaListener.h | |
parent | 03137dd16df459ef3bee925373347982cb98124d (diff) | |
download | external_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.h | 92 |
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 |