diff options
author | Derek Sollenberger <djsollen@google.com> | 2011-09-08 11:25:50 -0400 |
---|---|---|
committer | Derek Sollenberger <djsollen@google.com> | 2011-09-08 11:25:50 -0400 |
commit | 86772c601f6ccc0e1d0e0eca429cc2a73c6c3207 (patch) | |
tree | a440047fdbc9647b83c91ee7df4824b1fccf8b5c /Source/WebCore/platform | |
parent | 666a074f73aab3617c866ebe204ce841978ba270 (diff) | |
download | external_webkit-86772c601f6ccc0e1d0e0eca429cc2a73c6c3207.zip external_webkit-86772c601f6ccc0e1d0e0eca429cc2a73c6c3207.tar.gz external_webkit-86772c601f6ccc0e1d0e0eca429cc2a73c6c3207.tar.bz2 |
Add Plugin API for a video framerate callback.
bug: 5239378
Change-Id: I5f7d33302d5a40f58ec12a3c0be63cb51d4ffc75
Diffstat (limited to 'Source/WebCore/platform')
5 files changed, 35 insertions, 4 deletions
diff --git a/Source/WebCore/platform/graphics/android/MediaLayer.cpp b/Source/WebCore/platform/graphics/android/MediaLayer.cpp index 5625bbe..85fb92f 100644 --- a/Source/WebCore/platform/graphics/android/MediaLayer.cpp +++ b/Source/WebCore/platform/graphics/android/MediaLayer.cpp @@ -137,6 +137,13 @@ void MediaLayer::releaseNativeWindowForVideo(ANativeWindow* window) m_videoTexture->releaseNativeWindow(); } +void MediaLayer::setFramerateCallback(const ANativeWindow* window, FramerateCallbackProc callback) +{ + if (window != m_videoTexture->getNativeWindow()) + return; + m_videoTexture->setFramerateCallback(callback); +} + } // namespace WebCore #endif // USE(ACCELERATED_COMPOSITING) diff --git a/Source/WebCore/platform/graphics/android/MediaLayer.h b/Source/WebCore/platform/graphics/android/MediaLayer.h index 6d08ed6..cd15d9e 100644 --- a/Source/WebCore/platform/graphics/android/MediaLayer.h +++ b/Source/WebCore/platform/graphics/android/MediaLayer.h @@ -53,6 +53,7 @@ public: ANativeWindow* acquireNativeWindowForVideo(); void setWindowDimensionsForVideo(const ANativeWindow* window, const SkRect& dimensions); void releaseNativeWindowForVideo(ANativeWindow* window); + void setFramerateCallback(const ANativeWindow* window, FramerateCallbackProc callback); private: bool m_isCopy; diff --git a/Source/WebCore/platform/graphics/android/MediaListener.h b/Source/WebCore/platform/graphics/android/MediaListener.h index 0a85574..5fcbbb2 100644 --- a/Source/WebCore/platform/graphics/android/MediaListener.h +++ b/Source/WebCore/platform/graphics/android/MediaListener.h @@ -20,8 +20,10 @@ #if USE(ACCELERATED_COMPOSITING) #include <gui/SurfaceTexture.h> +#include <gui/SurfaceTextureClient.h> #include <jni.h> #include <JNIUtility.h> +#include "MediaTexture.h" #include "WebCoreJni.h" #ifdef DEBUG @@ -44,10 +46,15 @@ namespace WebCore { class MediaListener : public android::SurfaceTexture::FrameAvailableListener { public: - MediaListener(jobject weakWebViewRef) + MediaListener(jobject weakWebViewRef, + const sp<android::SurfaceTexture>& surfaceTexture, + const sp<ANativeWindow>& nativeWindow) : m_weakWebViewRef(weakWebViewRef) , m_postInvalMethod(0) , m_frameAvailable(false) + , m_surfaceTexture(surfaceTexture) + , m_nativeWindow(nativeWindow) + , m_framerateCallback(0) { if (!m_weakWebViewRef) return; @@ -75,15 +82,20 @@ public: if (!m_frameAvailable) { m_frameAvailable = true; } + if (m_framerateCallback) + m_framerateCallback(m_nativeWindow.get(), m_surfaceTexture->getTimestamp()); } - void resetFrameAvailable() { m_frameAvailable = false; } bool isFrameAvailable() { return m_frameAvailable; } + void setFramerateCallback(FramerateCallbackProc callback) { m_framerateCallback = callback; } private: jobject m_weakWebViewRef; jmethodID m_postInvalMethod; bool m_frameAvailable; + sp<android::SurfaceTexture> m_surfaceTexture; + sp<ANativeWindow> m_nativeWindow; + FramerateCallbackProc m_framerateCallback; }; } // namespace WebCore diff --git a/Source/WebCore/platform/graphics/android/MediaTexture.cpp b/Source/WebCore/platform/graphics/android/MediaTexture.cpp index eb143a4..0de7dfa 100644 --- a/Source/WebCore/platform/graphics/android/MediaTexture.cpp +++ b/Source/WebCore/platform/graphics/android/MediaTexture.cpp @@ -61,7 +61,6 @@ MediaTexture::MediaTexture(jobject webViewRef) : android::LightRefBase<MediaText m_dimensions.setEmpty(); m_newWindowRequest = false; m_newWindowReady = false; - m_mediaListener = new MediaListener(m_weakWebViewRef); } MediaTexture::~MediaTexture() @@ -91,7 +90,9 @@ void MediaTexture::initNativeWindowIfNeeded() m_surfaceTextureClient = new android::SurfaceTextureClient(m_surfaceTexture); //setup callback - m_mediaListener->resetFrameAvailable(); + m_mediaListener = new MediaListener(m_weakWebViewRef, + m_surfaceTexture, + m_surfaceTextureClient); m_surfaceTexture->setFrameAvailableListener(m_mediaListener); m_newWindowRequest = false; @@ -210,6 +211,7 @@ void MediaTexture::releaseNativeWindow() m_surfaceTexture->setFrameAvailableListener(0); // clear the strong pointer references + m_mediaListener.clear(); m_surfaceTextureClient.clear(); m_surfaceTexture.clear(); } @@ -220,6 +222,12 @@ void MediaTexture::setDimensions(const SkRect& dimensions) m_dimensions = dimensions; } +void MediaTexture::setFramerateCallback(FramerateCallbackProc callback) +{ + android::Mutex::Autolock lock(m_mediaLock); + m_mediaListener->setFramerateCallback(callback); +} + } // namespace WebCore #endif // USE(ACCELERATED_COMPOSITING) diff --git a/Source/WebCore/platform/graphics/android/MediaTexture.h b/Source/WebCore/platform/graphics/android/MediaTexture.h index c617264..d5ecd7b 100644 --- a/Source/WebCore/platform/graphics/android/MediaTexture.h +++ b/Source/WebCore/platform/graphics/android/MediaTexture.h @@ -31,6 +31,8 @@ namespace android { namespace WebCore { +typedef void (*FramerateCallbackProc)(ANativeWindow* window, int64_t timestamp); + class MediaListener; class MediaTexture : public android::LightRefBase<MediaTexture> { @@ -47,6 +49,7 @@ public: ANativeWindow* getNativeWindow(); void releaseNativeWindow(); void setDimensions(const SkRect& dimensions); + void setFramerateCallback(FramerateCallbackProc callback); private: |