summaryrefslogtreecommitdiffstats
path: root/Source/WebCore
diff options
context:
space:
mode:
authorDerek Sollenberger <djsollen@google.com>2011-09-08 11:25:50 -0400
committerDerek Sollenberger <djsollen@google.com>2011-09-08 11:25:50 -0400
commit86772c601f6ccc0e1d0e0eca429cc2a73c6c3207 (patch)
treea440047fdbc9647b83c91ee7df4824b1fccf8b5c /Source/WebCore
parent666a074f73aab3617c866ebe204ce841978ba270 (diff)
downloadexternal_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')
-rw-r--r--Source/WebCore/platform/graphics/android/MediaLayer.cpp7
-rw-r--r--Source/WebCore/platform/graphics/android/MediaLayer.h1
-rw-r--r--Source/WebCore/platform/graphics/android/MediaListener.h16
-rw-r--r--Source/WebCore/platform/graphics/android/MediaTexture.cpp12
-rw-r--r--Source/WebCore/platform/graphics/android/MediaTexture.h3
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: