Index: ui/gl/android/surface_texture.cc |
diff --git a/ui/gl/android/surface_texture.cc b/ui/gl/android/surface_texture.cc |
index 35f9b47288b6deb3ac9e865e826bed9edef872a2..95be7f717f622e7aa951f5474dfb56ab56e54e97 100644 |
--- a/ui/gl/android/surface_texture.cc |
+++ b/ui/gl/android/surface_texture.cc |
@@ -26,10 +26,19 @@ bool GlContextMethodsAvailable() { |
namespace gfx { |
-SurfaceTexture::SurfaceTexture(int texture_id) { |
+SurfaceTexture* SurfaceTexture::Create(int texture_id) { |
+ return new SurfaceTexture(texture_id, false); |
+} |
+ |
+SurfaceTexture* SurfaceTexture::CreateSingleBufferMode(int texture_id) { |
+ DCHECK(IsSingleBufferModeSupported()); |
+ return new SurfaceTexture(texture_id, true); |
+} |
+ |
+SurfaceTexture::SurfaceTexture(int texture_id, bool single_buffer_mode) { |
JNIEnv* env = base::android::AttachCurrentThread(); |
- j_surface_texture_.Reset( |
- Java_SurfaceTexturePlatformWrapper_create(env, texture_id)); |
+ j_surface_texture_.Reset(Java_SurfaceTexturePlatformWrapper_create( |
+ env, texture_id, single_buffer_mode)); |
} |
SurfaceTexture::~SurfaceTexture() { |
@@ -52,6 +61,13 @@ void SurfaceTexture::UpdateTexImage() { |
j_surface_texture_.obj()); |
} |
+void SurfaceTexture::ReleaseTexImage() { |
+ DCHECK(IsSingleBufferModeSupported()); |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ Java_SurfaceTexturePlatformWrapper_releaseTexImage(env, |
+ j_surface_texture_.obj()); |
+} |
+ |
void SurfaceTexture::GetTransformMatrix(float mtx[16]) { |
JNIEnv* env = base::android::AttachCurrentThread(); |
@@ -109,6 +125,10 @@ ANativeWindow* SurfaceTexture::CreateSurface() { |
} |
// static |
+bool SurfaceTexture::IsSingleBufferModeSupported() { |
+ return base::android::BuildInfo::GetInstance()->sdk_int() >= 19; |
+} |
+ |
bool SurfaceTexture::RegisterSurfaceTexture(JNIEnv* env) { |
return RegisterNativesImpl(env); |
} |