Loading libs/nativewindow/ANativeWindow.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -69,3 +69,20 @@ int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffe int32_t ANativeWindow_unlockAndPost(ANativeWindow* window) { return window->perform(window, NATIVE_WINDOW_UNLOCK_AND_POST); } int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transform) { static_assert(ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL == NATIVE_WINDOW_TRANSFORM_FLIP_H); static_assert(ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL == NATIVE_WINDOW_TRANSFORM_FLIP_V); static_assert(ANATIVEWINDOW_TRANSFORM_ROTATE_90 == NATIVE_WINDOW_TRANSFORM_ROT_90); constexpr int32_t kAllTransformBits = ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL | ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL | ANATIVEWINDOW_TRANSFORM_ROTATE_90; if (!window || !getWindowProp(window, NATIVE_WINDOW_IS_VALID)) return -EINVAL; if ((transform & ~kAllTransformBits) != 0) return -EINVAL; return native_window_set_buffers_transform(window, transform); } libs/nativewindow/Android.bp +4 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,10 @@ cc_library { clang: true, cppflags: [ "-std=c++1z" ], srcs: [ "AHardwareBuffer.cpp", "ANativeWindow.cpp", Loading libs/nativewindow/include/android/native_window.h +32 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,25 @@ enum { WINDOW_FORMAT_RGB_565 = AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM, }; /** * Transforms that can be applied to buffers as they are displayed to a window. * * Supported transforms are any combination of horizontal mirror, vertical * mirror, and clockwise 90 degree rotation, in that order. Rotations of 180 * and 270 degrees are made up of those basic transforms. */ enum ANativeWindowTransform { ANATIVEWINDOW_TRANSFORM_IDENTITY = 0x00, ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL = 0x01, ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL = 0x02, ANATIVEWINDOW_TRANSFORM_ROTATE_90 = 0x04, ANATIVEWINDOW_TRANSFORM_ROTATE_180 = ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL | ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL, ANATIVEWINDOW_TRANSFORM_ROTATE_270 = ANATIVEWINDOW_TRANSFORM_ROTATE_180 | ANATIVEWINDOW_TRANSFORM_ROTATE_90, }; struct ANativeWindow; /** * {@link ANativeWindow} is opaque type that provides access to a native window. Loading Loading @@ -147,6 +166,19 @@ int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffe */ int32_t ANativeWindow_unlockAndPost(ANativeWindow* window); #if __ANDROID_API__ >= __ANDROID_API_O__ /** * Set a transform that will be applied to future buffers posted to the window. * * @param transform combination of {@link ANativeWindowTransform} flags * @return 0 if successful * @return -EINVAL if @param transform is invalid */ int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transform); #endif // __ANDROID_API__ >= __ANDROID_API_O__ #ifdef __cplusplus }; #endif Loading libs/nativewindow/libnativewindow.map.txt +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ LIBNATIVEWINDOW { ANativeWindow_lock; ANativeWindow_release; ANativeWindow_setBuffersGeometry; ANativeWindow_setBuffersTransform; ANativeWindow_unlockAndPost; local: *; Loading Loading
libs/nativewindow/ANativeWindow.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -69,3 +69,20 @@ int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffe int32_t ANativeWindow_unlockAndPost(ANativeWindow* window) { return window->perform(window, NATIVE_WINDOW_UNLOCK_AND_POST); } int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transform) { static_assert(ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL == NATIVE_WINDOW_TRANSFORM_FLIP_H); static_assert(ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL == NATIVE_WINDOW_TRANSFORM_FLIP_V); static_assert(ANATIVEWINDOW_TRANSFORM_ROTATE_90 == NATIVE_WINDOW_TRANSFORM_ROT_90); constexpr int32_t kAllTransformBits = ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL | ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL | ANATIVEWINDOW_TRANSFORM_ROTATE_90; if (!window || !getWindowProp(window, NATIVE_WINDOW_IS_VALID)) return -EINVAL; if ((transform & ~kAllTransformBits) != 0) return -EINVAL; return native_window_set_buffers_transform(window, transform); }
libs/nativewindow/Android.bp +4 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,10 @@ cc_library { clang: true, cppflags: [ "-std=c++1z" ], srcs: [ "AHardwareBuffer.cpp", "ANativeWindow.cpp", Loading
libs/nativewindow/include/android/native_window.h +32 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,25 @@ enum { WINDOW_FORMAT_RGB_565 = AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM, }; /** * Transforms that can be applied to buffers as they are displayed to a window. * * Supported transforms are any combination of horizontal mirror, vertical * mirror, and clockwise 90 degree rotation, in that order. Rotations of 180 * and 270 degrees are made up of those basic transforms. */ enum ANativeWindowTransform { ANATIVEWINDOW_TRANSFORM_IDENTITY = 0x00, ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL = 0x01, ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL = 0x02, ANATIVEWINDOW_TRANSFORM_ROTATE_90 = 0x04, ANATIVEWINDOW_TRANSFORM_ROTATE_180 = ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL | ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL, ANATIVEWINDOW_TRANSFORM_ROTATE_270 = ANATIVEWINDOW_TRANSFORM_ROTATE_180 | ANATIVEWINDOW_TRANSFORM_ROTATE_90, }; struct ANativeWindow; /** * {@link ANativeWindow} is opaque type that provides access to a native window. Loading Loading @@ -147,6 +166,19 @@ int32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffe */ int32_t ANativeWindow_unlockAndPost(ANativeWindow* window); #if __ANDROID_API__ >= __ANDROID_API_O__ /** * Set a transform that will be applied to future buffers posted to the window. * * @param transform combination of {@link ANativeWindowTransform} flags * @return 0 if successful * @return -EINVAL if @param transform is invalid */ int32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transform); #endif // __ANDROID_API__ >= __ANDROID_API_O__ #ifdef __cplusplus }; #endif Loading
libs/nativewindow/libnativewindow.map.txt +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ LIBNATIVEWINDOW { ANativeWindow_lock; ANativeWindow_release; ANativeWindow_setBuffersGeometry; ANativeWindow_setBuffersTransform; ANativeWindow_unlockAndPost; local: *; Loading