#ifndef LOCKED_SURFACE_H #define LOCKED_SURFACE_H #include <jni.h> #include <android/bitmap.h> #include <android/native_window_jni.h> #include "YuvBufferT.h" // Wraps an RAII pattern around locking an ANativeWindow. class LockedSurface { public: // Lock a Surface, returning a lock object, or nullptr if it failed. static LockedSurface *lock(JNIEnv *env, jobject surface); ~LockedSurface(); const ANativeWindow_Buffer &buffer() const; // If buffer() is a compatible YUV format, returns a non-null YuvBufferT. // Otherwise, output.isNull() will be true. YuvBufferT yuvView() const; private: LockedSurface() = default; ANativeWindow *window_; ANativeWindow_Buffer buffer_; };