native_window.h revision 3aea0e37b08cb09e65de21642aa60c698a3c8d12
1e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/* 2e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Copyright (C) 2010 The Android Open Source Project 3e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 4e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * you may not use this file except in compliance with the License. 6e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * You may obtain a copy of the License at 7e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 8e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 10e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Unless required by applicable law or agreed to in writing, software 11e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * See the License for the specific language governing permissions and 14e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * limitations under the License. 15e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 16e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 17bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/** 18bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * @addtogroup NativeActivity Native Activity 19bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * @{ 20bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine */ 21bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine 22bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/** 23bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * @file native_window.h 243aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * @brief API for accessing a native window. 25bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine */ 26bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine 27e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifndef ANDROID_NATIVE_WINDOW_H 28e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#define ANDROID_NATIVE_WINDOW_H 29e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 30494ed550f5aea1332984fb9f0f11036fc58bd716Dan Albert#include <sys/cdefs.h> 31494ed550f5aea1332984fb9f0f11036fc58bd716Dan Albert 32c7e8daecb66a4875e16b03cf744fdd9ab867aa4fCraig Donner#include <android/hardware_buffer.h> 33e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#include <android/rect.h> 34e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 35e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifdef __cplusplus 36e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianextern "C" { 37e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif 38e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 39bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/** 40c7e8daecb66a4875e16b03cf744fdd9ab867aa4fCraig Donner * Legacy window pixel format names, kept for backwards compatibility. 41c7e8daecb66a4875e16b03cf744fdd9ab867aa4fCraig Donner * New code and APIs should use AHARDWAREBUFFER_FORMAT_*. 42e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 43e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianenum { 44ff415149dc5a83a4eb5960daf2cb2c310ef89847Romain Guy // NOTE: these values must match the values from graphics/common/x.x/types.hal 45ff415149dc5a83a4eb5960daf2cb2c310ef89847Romain Guy 46bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine /** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Alpha: 8 bits. **/ 47c7e8daecb66a4875e16b03cf744fdd9ab867aa4fCraig Donner WINDOW_FORMAT_RGBA_8888 = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM, 48bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine /** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Unused: 8 bits. **/ 49c7e8daecb66a4875e16b03cf744fdd9ab867aa4fCraig Donner WINDOW_FORMAT_RGBX_8888 = AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM, 50bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine /** Red: 5 bits, Green: 6 bits, Blue: 5 bits. **/ 51c7e8daecb66a4875e16b03cf744fdd9ab867aa4fCraig Donner WINDOW_FORMAT_RGB_565 = AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM, 52e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian}; 53e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 5409932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall/** 5509932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall * Transforms that can be applied to buffers as they are displayed to a window. 5609932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall * 5709932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall * Supported transforms are any combination of horizontal mirror, vertical 5809932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall * mirror, and clockwise 90 degree rotation, in that order. Rotations of 180 5909932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall * and 270 degrees are made up of those basic transforms. 6009932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall */ 6109932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hallenum ANativeWindowTransform { 6209932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall ANATIVEWINDOW_TRANSFORM_IDENTITY = 0x00, 6309932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL = 0x01, 6409932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL = 0x02, 6509932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall ANATIVEWINDOW_TRANSFORM_ROTATE_90 = 0x04, 6609932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall 6709932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall ANATIVEWINDOW_TRANSFORM_ROTATE_180 = ANATIVEWINDOW_TRANSFORM_MIRROR_HORIZONTAL | 6809932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall ANATIVEWINDOW_TRANSFORM_MIRROR_VERTICAL, 6909932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall ANATIVEWINDOW_TRANSFORM_ROTATE_270 = ANATIVEWINDOW_TRANSFORM_ROTATE_180 | 7009932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall ANATIVEWINDOW_TRANSFORM_ROTATE_90, 7109932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall}; 7209932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall 73e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianstruct ANativeWindow; 74bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/** 753aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * Opaque type that provides access to a native window. 76bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * 773aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * A pointer can be obtained using {@link ANativeWindow_fromSurface()}. 78bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine */ 79e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef struct ANativeWindow ANativeWindow; 80e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 81bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/** 823aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * Struct that represents a windows buffer. 83bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * 843aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * A pointer can be obtained using {@link ANativeWindow_lock()}. 85bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine */ 86e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef struct ANativeWindow_Buffer { 87e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // The number of pixels that are show horizontally. 88e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t width; 89e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 90e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // The number of pixels that are shown vertically. 91e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t height; 92e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 93e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // The number of *pixels* that a line in the buffer takes in 943aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong // memory. This may be >= width. 95e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t stride; 96e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 973aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong // The format of the buffer. One of AHARDWAREBUFFER_FORMAT_* 98e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t format; 99e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 100e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // The actual bits. 101e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian void* bits; 102bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine 103e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian // Do not touch. 104e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian uint32_t reserved[6]; 105e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian} ANativeWindow_Buffer; 106e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 107e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/** 1083aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * Acquire a reference on the given {@link ANativeWindow} object. This prevents the object 109e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * from being deleted until the reference is removed. 110e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 111e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianvoid ANativeWindow_acquire(ANativeWindow* window); 112e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 113e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/** 1143aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * Remove a reference that was previously acquired with {@link ANativeWindow_acquire()}. 115e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 116e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianvoid ANativeWindow_release(ANativeWindow* window); 117e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 118bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/** 1193aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * Return the current width in pixels of the window surface. 1203aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * 1213aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * \return negative value on error. 122e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 123e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_getWidth(ANativeWindow* window); 124e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 125bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/** 1263aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * Return the current height in pixels of the window surface. 1273aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * 1283aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * \return a negative value on error. 129e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 130e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_getHeight(ANativeWindow* window); 131e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 132bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/** 1333aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * Return the current pixel format (AHARDWAREBUFFER_FORMAT_*) of the window surface. 1343aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * 1353aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * \return a negative value on error. 136e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 137e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_getFormat(ANativeWindow* window); 138e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 139bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/** 140e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Change the format and size of the window buffers. 141e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 142e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * The width and height control the number of pixels in the buffers, not the 1433aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * dimensions of the window on screen. If these are different than the 1443aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * window's physical size, then its buffer will be scaled to match that size 1453aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * when compositing it to the screen. The width and height must be either both zero 1463aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * or both non-zero. 147e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 148e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * For all of these parameters, if 0 is supplied then the window's base 149e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * value will come back in force. 150e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * 1513aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * \param width width of the buffers in pixels. 1523aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * \param height height of the buffers in pixels. 1533aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * \param format one of AHARDWAREBUFFER_FORMAT_* constants. 1543aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * \return 0 for success, or a negative value on error. 155e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 156e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window, 157e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian int32_t width, int32_t height, int32_t format); 158e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 159e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/** 160e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Lock the window's next drawing surface for writing. 161e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * inOutDirtyBounds is used as an in/out parameter, upon entering the 162e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * function, it contains the dirty region, that is, the region the caller 163e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * intends to redraw. When the function returns, inOutDirtyBounds is updated 164e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * with the actual area the caller needs to redraw -- this region is often 1653aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * extended by {@link ANativeWindow_lock}. 1663aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * 1673aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * \return 0 for success, or a negative value on error. 168e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 169e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer, 170e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian ARect* inOutDirtyBounds); 171e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 172e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/** 173e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Unlock the window's drawing surface after previously locking it, 174e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * posting the new buffer to the display. 1753aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * 1763aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * \return 0 for success, or a negative value on error. 177e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */ 178e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_unlockAndPost(ANativeWindow* window); 179e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 18009932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall#if __ANDROID_API__ >= __ANDROID_API_O__ 18109932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall 18209932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall/** 18309932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall * Set a transform that will be applied to future buffers posted to the window. 18409932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall * 1853aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * \param transform combination of {@link ANativeWindowTransform} flags 1863aea0e37b08cb09e65de21642aa60c698a3c8d12Quddus Chong * \return 0 for success, or -EINVAL if \p transform is invalid 18709932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall */ 18809932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hallint32_t ANativeWindow_setBuffersTransform(ANativeWindow* window, int32_t transform); 18909932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall 19009932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall#endif // __ANDROID_API__ >= __ANDROID_API_O__ 19109932eceb2fcec029edc6aaa0e2bca0591613281Jesse Hall 192e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifdef __cplusplus 193e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian}; 194e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif 195e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian 196e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif // ANDROID_NATIVE_WINDOW_H 197bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine 198bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/** @} */ 199