|
1 /* |
|
2 * Copyright (C) 2011 The Android Open Source Project |
|
3 * |
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
|
5 * you may not use this file except in compliance with the License. |
|
6 * You may obtain a copy of the License at |
|
7 * |
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
|
9 * |
|
10 * Unless required by applicable law or agreed to in writing, software |
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
13 * See the License for the specific language governing permissions and |
|
14 * limitations under the License. |
|
15 */ |
|
16 |
|
17 #ifndef SYSTEM_CORE_INCLUDE_ANDROID_WINDOW_H |
|
18 #define SYSTEM_CORE_INCLUDE_ANDROID_WINDOW_H |
|
19 |
|
20 #include <stdint.h> |
|
21 #include <sys/cdefs.h> |
|
22 #include <system/graphics.h> |
|
23 #include <cutils/native_handle.h> |
|
24 |
|
25 __BEGIN_DECLS |
|
26 |
|
27 /*****************************************************************************/ |
|
28 |
|
29 #define ANDROID_NATIVE_MAKE_CONSTANT(a,b,c,d) \ |
|
30 (((unsigned)(a)<<24)|((unsigned)(b)<<16)|((unsigned)(c)<<8)|(unsigned)(d)) |
|
31 |
|
32 #define ANDROID_NATIVE_WINDOW_MAGIC \ |
|
33 ANDROID_NATIVE_MAKE_CONSTANT('_','w','n','d') |
|
34 |
|
35 #define ANDROID_NATIVE_BUFFER_MAGIC \ |
|
36 ANDROID_NATIVE_MAKE_CONSTANT('_','b','f','r') |
|
37 |
|
38 // --------------------------------------------------------------------------- |
|
39 |
|
40 typedef const native_handle_t* buffer_handle_t; |
|
41 |
|
42 // --------------------------------------------------------------------------- |
|
43 |
|
44 typedef struct android_native_rect_t |
|
45 { |
|
46 int32_t left; |
|
47 int32_t top; |
|
48 int32_t right; |
|
49 int32_t bottom; |
|
50 } android_native_rect_t; |
|
51 |
|
52 // --------------------------------------------------------------------------- |
|
53 |
|
54 typedef struct android_native_base_t |
|
55 { |
|
56 /* a magic value defined by the actual EGL native type */ |
|
57 int magic; |
|
58 |
|
59 /* the sizeof() of the actual EGL native type */ |
|
60 int version; |
|
61 |
|
62 void* reserved[4]; |
|
63 |
|
64 /* reference-counting interface */ |
|
65 void (*incRef)(struct android_native_base_t* base); |
|
66 void (*decRef)(struct android_native_base_t* base); |
|
67 } android_native_base_t; |
|
68 |
|
69 typedef struct ANativeWindowBuffer |
|
70 { |
|
71 #ifdef __cplusplus |
|
72 ANativeWindowBuffer() { |
|
73 common.magic = ANDROID_NATIVE_BUFFER_MAGIC; |
|
74 common.version = sizeof(ANativeWindowBuffer); |
|
75 memset(common.reserved, 0, sizeof(common.reserved)); |
|
76 } |
|
77 |
|
78 // Implement the methods that sp<ANativeWindowBuffer> expects so that it |
|
79 // can be used to automatically refcount ANativeWindowBuffer's. |
|
80 void incStrong(const void* id) const { |
|
81 common.incRef(const_cast<android_native_base_t*>(&common)); |
|
82 } |
|
83 void decStrong(const void* id) const { |
|
84 common.decRef(const_cast<android_native_base_t*>(&common)); |
|
85 } |
|
86 #endif |
|
87 |
|
88 struct android_native_base_t common; |
|
89 |
|
90 int width; |
|
91 int height; |
|
92 int stride; |
|
93 int format; |
|
94 int usage; |
|
95 |
|
96 void* reserved[2]; |
|
97 |
|
98 buffer_handle_t handle; |
|
99 |
|
100 void* reserved_proc[8]; |
|
101 } ANativeWindowBuffer_t; |
|
102 |
|
103 // Old typedef for backwards compatibility. |
|
104 typedef ANativeWindowBuffer_t android_native_buffer_t; |
|
105 |
|
106 // --------------------------------------------------------------------------- |
|
107 |
|
108 /* attributes queriable with query() */ |
|
109 enum { |
|
110 NATIVE_WINDOW_WIDTH = 0, |
|
111 NATIVE_WINDOW_HEIGHT = 1, |
|
112 NATIVE_WINDOW_FORMAT = 2, |
|
113 |
|
114 /* The minimum number of buffers that must remain un-dequeued after a buffer |
|
115 * has been queued. This value applies only if set_buffer_count was used to |
|
116 * override the number of buffers and if a buffer has since been queued. |
|
117 * Users of the set_buffer_count ANativeWindow method should query this |
|
118 * value before calling set_buffer_count. If it is necessary to have N |
|
119 * buffers simultaneously dequeued as part of the steady-state operation, |
|
120 * and this query returns M then N+M buffers should be requested via |
|
121 * native_window_set_buffer_count. |
|
122 * |
|
123 * Note that this value does NOT apply until a single buffer has been |
|
124 * queued. In particular this means that it is possible to: |
|
125 * |
|
126 * 1. Query M = min undequeued buffers |
|
127 * 2. Set the buffer count to N + M |
|
128 * 3. Dequeue all N + M buffers |
|
129 * 4. Cancel M buffers |
|
130 * 5. Queue, dequeue, queue, dequeue, ad infinitum |
|
131 */ |
|
132 NATIVE_WINDOW_MIN_UNDEQUEUED_BUFFERS = 3, |
|
133 |
|
134 /* Check whether queueBuffer operations on the ANativeWindow send the buffer |
|
135 * to the window compositor. The query sets the returned 'value' argument |
|
136 * to 1 if the ANativeWindow DOES send queued buffers directly to the window |
|
137 * compositor and 0 if the buffers do not go directly to the window |
|
138 * compositor. |
|
139 * |
|
140 * This can be used to determine whether protected buffer content should be |
|
141 * sent to the ANativeWindow. Note, however, that a result of 1 does NOT |
|
142 * indicate that queued buffers will be protected from applications or users |
|
143 * capturing their contents. If that behavior is desired then some other |
|
144 * mechanism (e.g. the GRALLOC_USAGE_PROTECTED flag) should be used in |
|
145 * conjunction with this query. |
|
146 */ |
|
147 NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER = 4, |
|
148 |
|
149 /* Get the concrete type of a ANativeWindow. See below for the list of |
|
150 * possible return values. |
|
151 * |
|
152 * This query should not be used outside the Android framework and will |
|
153 * likely be removed in the near future. |
|
154 */ |
|
155 NATIVE_WINDOW_CONCRETE_TYPE = 5, |
|
156 |
|
157 |
|
158 /* |
|
159 * Default width and height of the ANativeWindow, these are the dimensions |
|
160 * of the window irrespective of the NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS |
|
161 * call. |
|
162 */ |
|
163 NATIVE_WINDOW_DEFAULT_WIDTH = 6, |
|
164 NATIVE_WINDOW_DEFAULT_HEIGHT = 7, |
|
165 |
|
166 /* |
|
167 * transformation that will most-likely be applied to buffers. This is only |
|
168 * a hint, the actual transformation applied might be different. |
|
169 * |
|
170 * INTENDED USE: |
|
171 * |
|
172 * The transform hint can be used by a producer, for instance the GLES |
|
173 * driver, to pre-rotate the rendering such that the final transformation |
|
174 * in the composer is identity. This can be very useful when used in |
|
175 * conjunction with the h/w composer HAL, in situations where it |
|
176 * cannot handle arbitrary rotations. |
|
177 * |
|
178 * 1. Before dequeuing a buffer, the GL driver (or any other ANW client) |
|
179 * queries the ANW for NATIVE_WINDOW_TRANSFORM_HINT. |
|
180 * |
|
181 * 2. The GL driver overrides the width and height of the ANW to |
|
182 * account for NATIVE_WINDOW_TRANSFORM_HINT. This is done by querying |
|
183 * NATIVE_WINDOW_DEFAULT_{WIDTH | HEIGHT}, swapping the dimensions |
|
184 * according to NATIVE_WINDOW_TRANSFORM_HINT and calling |
|
185 * native_window_set_buffers_dimensions(). |
|
186 * |
|
187 * 3. The GL driver dequeues a buffer of the new pre-rotated size. |
|
188 * |
|
189 * 4. The GL driver renders to the buffer such that the image is |
|
190 * already transformed, that is applying NATIVE_WINDOW_TRANSFORM_HINT |
|
191 * to the rendering. |
|
192 * |
|
193 * 5. The GL driver calls native_window_set_transform to apply |
|
194 * inverse transformation to the buffer it just rendered. |
|
195 * In order to do this, the GL driver needs |
|
196 * to calculate the inverse of NATIVE_WINDOW_TRANSFORM_HINT, this is |
|
197 * done easily: |
|
198 * |
|
199 * int hintTransform, inverseTransform; |
|
200 * query(..., NATIVE_WINDOW_TRANSFORM_HINT, &hintTransform); |
|
201 * inverseTransform = hintTransform; |
|
202 * if (hintTransform & HAL_TRANSFORM_ROT_90) |
|
203 * inverseTransform ^= HAL_TRANSFORM_ROT_180; |
|
204 * |
|
205 * |
|
206 * 6. The GL driver queues the pre-transformed buffer. |
|
207 * |
|
208 * 7. The composer combines the buffer transform with the display |
|
209 * transform. If the buffer transform happens to cancel out the |
|
210 * display transform then no rotation is needed. |
|
211 * |
|
212 */ |
|
213 NATIVE_WINDOW_TRANSFORM_HINT = 8, |
|
214 }; |
|
215 |
|
216 /* valid operations for the (*perform)() hook */ |
|
217 enum { |
|
218 NATIVE_WINDOW_SET_USAGE = 0, |
|
219 NATIVE_WINDOW_CONNECT = 1, /* deprecated */ |
|
220 NATIVE_WINDOW_DISCONNECT = 2, /* deprecated */ |
|
221 NATIVE_WINDOW_SET_CROP = 3, |
|
222 NATIVE_WINDOW_SET_BUFFER_COUNT = 4, |
|
223 NATIVE_WINDOW_SET_BUFFERS_GEOMETRY = 5, /* deprecated */ |
|
224 NATIVE_WINDOW_SET_BUFFERS_TRANSFORM = 6, |
|
225 NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP = 7, |
|
226 NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS = 8, |
|
227 NATIVE_WINDOW_SET_BUFFERS_FORMAT = 9, |
|
228 NATIVE_WINDOW_SET_SCALING_MODE = 10, |
|
229 NATIVE_WINDOW_LOCK = 11, /* private */ |
|
230 NATIVE_WINDOW_UNLOCK_AND_POST = 12, /* private */ |
|
231 NATIVE_WINDOW_API_CONNECT = 13, /* private */ |
|
232 NATIVE_WINDOW_API_DISCONNECT = 14, /* private */ |
|
233 }; |
|
234 |
|
235 /* parameter for NATIVE_WINDOW_[API_][DIS]CONNECT */ |
|
236 enum { |
|
237 /* Buffers will be queued by EGL via eglSwapBuffers after being filled using |
|
238 * OpenGL ES. |
|
239 */ |
|
240 NATIVE_WINDOW_API_EGL = 1, |
|
241 |
|
242 /* Buffers will be queued after being filled using the CPU |
|
243 */ |
|
244 NATIVE_WINDOW_API_CPU = 2, |
|
245 |
|
246 /* Buffers will be queued by Stagefright after being filled by a video |
|
247 * decoder. The video decoder can either be a software or hardware decoder. |
|
248 */ |
|
249 NATIVE_WINDOW_API_MEDIA = 3, |
|
250 |
|
251 /* Buffers will be queued by the the camera HAL. |
|
252 */ |
|
253 NATIVE_WINDOW_API_CAMERA = 4, |
|
254 }; |
|
255 |
|
256 /* parameter for NATIVE_WINDOW_SET_BUFFERS_TRANSFORM */ |
|
257 enum { |
|
258 /* flip source image horizontally */ |
|
259 NATIVE_WINDOW_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H , |
|
260 /* flip source image vertically */ |
|
261 NATIVE_WINDOW_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V, |
|
262 /* rotate source image 90 degrees clock-wise */ |
|
263 NATIVE_WINDOW_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90, |
|
264 /* rotate source image 180 degrees */ |
|
265 NATIVE_WINDOW_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180, |
|
266 /* rotate source image 270 degrees clock-wise */ |
|
267 NATIVE_WINDOW_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270, |
|
268 }; |
|
269 |
|
270 /* parameter for NATIVE_WINDOW_SET_SCALING_MODE */ |
|
271 enum { |
|
272 /* the window content is not updated (frozen) until a buffer of |
|
273 * the window size is received (enqueued) |
|
274 */ |
|
275 NATIVE_WINDOW_SCALING_MODE_FREEZE = 0, |
|
276 /* the buffer is scaled in both dimensions to match the window size */ |
|
277 NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW = 1, |
|
278 }; |
|
279 |
|
280 /* values returned by the NATIVE_WINDOW_CONCRETE_TYPE query */ |
|
281 enum { |
|
282 NATIVE_WINDOW_FRAMEBUFFER = 0, /* FramebufferNativeWindow */ |
|
283 NATIVE_WINDOW_SURFACE = 1, /* Surface */ |
|
284 NATIVE_WINDOW_SURFACE_TEXTURE_CLIENT = 2, /* SurfaceTextureClient */ |
|
285 }; |
|
286 |
|
287 /* parameter for NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP |
|
288 * |
|
289 * Special timestamp value to indicate that timestamps should be auto-generated |
|
290 * by the native window when queueBuffer is called. This is equal to INT64_MIN, |
|
291 * defined directly to avoid problems with C99/C++ inclusion of stdint.h. |
|
292 */ |
|
293 static const int64_t NATIVE_WINDOW_TIMESTAMP_AUTO = (-9223372036854775807LL-1); |
|
294 |
|
295 struct ANativeWindow |
|
296 { |
|
297 #ifdef __cplusplus |
|
298 ANativeWindow() |
|
299 : flags(0), minSwapInterval(0), maxSwapInterval(0), xdpi(0), ydpi(0) |
|
300 { |
|
301 common.magic = ANDROID_NATIVE_WINDOW_MAGIC; |
|
302 common.version = sizeof(ANativeWindow); |
|
303 memset(common.reserved, 0, sizeof(common.reserved)); |
|
304 } |
|
305 |
|
306 /* Implement the methods that sp<ANativeWindow> expects so that it |
|
307 can be used to automatically refcount ANativeWindow's. */ |
|
308 void incStrong(const void* id) const { |
|
309 common.incRef(const_cast<android_native_base_t*>(&common)); |
|
310 } |
|
311 void decStrong(const void* id) const { |
|
312 common.decRef(const_cast<android_native_base_t*>(&common)); |
|
313 } |
|
314 #endif |
|
315 |
|
316 struct android_native_base_t common; |
|
317 |
|
318 /* flags describing some attributes of this surface or its updater */ |
|
319 const uint32_t flags; |
|
320 |
|
321 /* min swap interval supported by this updated */ |
|
322 const int minSwapInterval; |
|
323 |
|
324 /* max swap interval supported by this updated */ |
|
325 const int maxSwapInterval; |
|
326 |
|
327 /* horizontal and vertical resolution in DPI */ |
|
328 const float xdpi; |
|
329 const float ydpi; |
|
330 |
|
331 /* Some storage reserved for the OEM's driver. */ |
|
332 intptr_t oem[4]; |
|
333 |
|
334 /* |
|
335 * Set the swap interval for this surface. |
|
336 * |
|
337 * Returns 0 on success or -errno on error. |
|
338 */ |
|
339 int (*setSwapInterval)(struct ANativeWindow* window, |
|
340 int interval); |
|
341 |
|
342 /* |
|
343 * Hook called by EGL to acquire a buffer. After this call, the buffer |
|
344 * is not locked, so its content cannot be modified. This call may block if |
|
345 * no buffers are available. |
|
346 * |
|
347 * The window holds a reference to the buffer between dequeueBuffer and |
|
348 * either queueBuffer or cancelBuffer, so clients only need their own |
|
349 * reference if they might use the buffer after queueing or canceling it. |
|
350 * Holding a reference to a buffer after queueing or canceling it is only |
|
351 * allowed if a specific buffer count has been set. |
|
352 * |
|
353 * Returns 0 on success or -errno on error. |
|
354 */ |
|
355 int (*dequeueBuffer)(struct ANativeWindow* window, |
|
356 struct ANativeWindowBuffer** buffer); |
|
357 |
|
358 /* |
|
359 * hook called by EGL to lock a buffer. This MUST be called before modifying |
|
360 * the content of a buffer. The buffer must have been acquired with |
|
361 * dequeueBuffer first. |
|
362 * |
|
363 * Returns 0 on success or -errno on error. |
|
364 */ |
|
365 int (*lockBuffer)(struct ANativeWindow* window, |
|
366 struct ANativeWindowBuffer* buffer); |
|
367 /* |
|
368 * Hook called by EGL when modifications to the render buffer are done. |
|
369 * This unlocks and post the buffer. |
|
370 * |
|
371 * The window holds a reference to the buffer between dequeueBuffer and |
|
372 * either queueBuffer or cancelBuffer, so clients only need their own |
|
373 * reference if they might use the buffer after queueing or canceling it. |
|
374 * Holding a reference to a buffer after queueing or canceling it is only |
|
375 * allowed if a specific buffer count has been set. |
|
376 * |
|
377 * Buffers MUST be queued in the same order than they were dequeued. |
|
378 * |
|
379 * Returns 0 on success or -errno on error. |
|
380 */ |
|
381 int (*queueBuffer)(struct ANativeWindow* window, |
|
382 struct ANativeWindowBuffer* buffer); |
|
383 |
|
384 /* |
|
385 * hook used to retrieve information about the native window. |
|
386 * |
|
387 * Returns 0 on success or -errno on error. |
|
388 */ |
|
389 int (*query)(const struct ANativeWindow* window, |
|
390 int what, int* value); |
|
391 |
|
392 /* |
|
393 * hook used to perform various operations on the surface. |
|
394 * (*perform)() is a generic mechanism to add functionality to |
|
395 * ANativeWindow while keeping backward binary compatibility. |
|
396 * |
|
397 * DO NOT CALL THIS HOOK DIRECTLY. Instead, use the helper functions |
|
398 * defined below. |
|
399 * |
|
400 * (*perform)() returns -ENOENT if the 'what' parameter is not supported |
|
401 * by the surface's implementation. |
|
402 * |
|
403 * The valid operations are: |
|
404 * NATIVE_WINDOW_SET_USAGE |
|
405 * NATIVE_WINDOW_CONNECT (deprecated) |
|
406 * NATIVE_WINDOW_DISCONNECT (deprecated) |
|
407 * NATIVE_WINDOW_SET_CROP |
|
408 * NATIVE_WINDOW_SET_BUFFER_COUNT |
|
409 * NATIVE_WINDOW_SET_BUFFERS_GEOMETRY (deprecated) |
|
410 * NATIVE_WINDOW_SET_BUFFERS_TRANSFORM |
|
411 * NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP |
|
412 * NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS |
|
413 * NATIVE_WINDOW_SET_BUFFERS_FORMAT |
|
414 * NATIVE_WINDOW_SET_SCALING_MODE |
|
415 * NATIVE_WINDOW_LOCK (private) |
|
416 * NATIVE_WINDOW_UNLOCK_AND_POST (private) |
|
417 * NATIVE_WINDOW_API_CONNECT (private) |
|
418 * NATIVE_WINDOW_API_DISCONNECT (private) |
|
419 * |
|
420 */ |
|
421 |
|
422 int (*perform)(struct ANativeWindow* window, |
|
423 int operation, ... ); |
|
424 |
|
425 /* |
|
426 * Hook used to cancel a buffer that has been dequeued. |
|
427 * No synchronization is performed between dequeue() and cancel(), so |
|
428 * either external synchronization is needed, or these functions must be |
|
429 * called from the same thread. |
|
430 * |
|
431 * The window holds a reference to the buffer between dequeueBuffer and |
|
432 * either queueBuffer or cancelBuffer, so clients only need their own |
|
433 * reference if they might use the buffer after queueing or canceling it. |
|
434 * Holding a reference to a buffer after queueing or canceling it is only |
|
435 * allowed if a specific buffer count has been set. |
|
436 */ |
|
437 int (*cancelBuffer)(struct ANativeWindow* window, |
|
438 struct ANativeWindowBuffer* buffer); |
|
439 |
|
440 |
|
441 void* reserved_proc[2]; |
|
442 }; |
|
443 |
|
444 /* Backwards compatibility: use ANativeWindow (struct ANativeWindow in C). |
|
445 * android_native_window_t is deprecated. |
|
446 */ |
|
447 typedef struct ANativeWindow ANativeWindow; |
|
448 typedef struct ANativeWindow android_native_window_t; |
|
449 |
|
450 /* |
|
451 * native_window_set_usage(..., usage) |
|
452 * Sets the intended usage flags for the next buffers |
|
453 * acquired with (*lockBuffer)() and on. |
|
454 * By default (if this function is never called), a usage of |
|
455 * GRALLOC_USAGE_HW_RENDER | GRALLOC_USAGE_HW_TEXTURE |
|
456 * is assumed. |
|
457 * Calling this function will usually cause following buffers to be |
|
458 * reallocated. |
|
459 */ |
|
460 |
|
461 static inline int native_window_set_usage( |
|
462 struct ANativeWindow* window, int usage) |
|
463 { |
|
464 return window->perform(window, NATIVE_WINDOW_SET_USAGE, usage); |
|
465 } |
|
466 |
|
467 /* deprecated. Always returns 0. Don't call. */ |
|
468 static inline int native_window_connect( |
|
469 struct ANativeWindow* window, int api) { |
|
470 return 0; |
|
471 } |
|
472 |
|
473 /* deprecated. Always returns 0. Don't call. */ |
|
474 static inline int native_window_disconnect( |
|
475 struct ANativeWindow* window, int api) { |
|
476 return 0; |
|
477 } |
|
478 |
|
479 /* |
|
480 * native_window_set_crop(..., crop) |
|
481 * Sets which region of the next queued buffers needs to be considered. |
|
482 * A buffer's crop region is scaled to match the surface's size. |
|
483 * |
|
484 * The specified crop region applies to all buffers queued after it is called. |
|
485 * |
|
486 * if 'crop' is NULL, subsequently queued buffers won't be cropped. |
|
487 * |
|
488 * An error is returned if for instance the crop region is invalid, |
|
489 * out of the buffer's bound or if the window is invalid. |
|
490 */ |
|
491 static inline int native_window_set_crop( |
|
492 struct ANativeWindow* window, |
|
493 android_native_rect_t const * crop) |
|
494 { |
|
495 return window->perform(window, NATIVE_WINDOW_SET_CROP, crop); |
|
496 } |
|
497 |
|
498 /* |
|
499 * native_window_set_buffer_count(..., count) |
|
500 * Sets the number of buffers associated with this native window. |
|
501 */ |
|
502 static inline int native_window_set_buffer_count( |
|
503 struct ANativeWindow* window, |
|
504 size_t bufferCount) |
|
505 { |
|
506 return window->perform(window, NATIVE_WINDOW_SET_BUFFER_COUNT, bufferCount); |
|
507 } |
|
508 |
|
509 /* |
|
510 * native_window_set_buffers_geometry(..., int w, int h, int format) |
|
511 * All buffers dequeued after this call will have the dimensions and format |
|
512 * specified. A successful call to this function has the same effect as calling |
|
513 * native_window_set_buffers_size and native_window_set_buffers_format. |
|
514 * |
|
515 * XXX: This function is deprecated. The native_window_set_buffers_dimensions |
|
516 * and native_window_set_buffers_format functions should be used instead. |
|
517 */ |
|
518 static inline int native_window_set_buffers_geometry( |
|
519 struct ANativeWindow* window, |
|
520 int w, int h, int format) |
|
521 { |
|
522 return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_GEOMETRY, |
|
523 w, h, format); |
|
524 } |
|
525 |
|
526 /* |
|
527 * native_window_set_buffers_dimensions(..., int w, int h) |
|
528 * All buffers dequeued after this call will have the dimensions specified. |
|
529 * In particular, all buffers will have a fixed-size, independent form the |
|
530 * native-window size. They will be scaled according to the scaling mode |
|
531 * (see native_window_set_scaling_mode) upon window composition. |
|
532 * |
|
533 * If w and h are 0, the normal behavior is restored. That is, dequeued buffers |
|
534 * following this call will be sized to match the window's size. |
|
535 * |
|
536 * Calling this function will reset the window crop to a NULL value, which |
|
537 * disables cropping of the buffers. |
|
538 */ |
|
539 static inline int native_window_set_buffers_dimensions( |
|
540 struct ANativeWindow* window, |
|
541 int w, int h) |
|
542 { |
|
543 return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_DIMENSIONS, |
|
544 w, h); |
|
545 } |
|
546 |
|
547 /* |
|
548 * native_window_set_buffers_format(..., int format) |
|
549 * All buffers dequeued after this call will have the format specified. |
|
550 * |
|
551 * If the specified format is 0, the default buffer format will be used. |
|
552 */ |
|
553 static inline int native_window_set_buffers_format( |
|
554 struct ANativeWindow* window, |
|
555 int format) |
|
556 { |
|
557 return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_FORMAT, format); |
|
558 } |
|
559 |
|
560 /* |
|
561 * native_window_set_buffers_transform(..., int transform) |
|
562 * All buffers queued after this call will be displayed transformed according |
|
563 * to the transform parameter specified. |
|
564 */ |
|
565 static inline int native_window_set_buffers_transform( |
|
566 struct ANativeWindow* window, |
|
567 int transform) |
|
568 { |
|
569 return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_TRANSFORM, |
|
570 transform); |
|
571 } |
|
572 |
|
573 /* |
|
574 * native_window_set_buffers_timestamp(..., int64_t timestamp) |
|
575 * All buffers queued after this call will be associated with the timestamp |
|
576 * parameter specified. If the timestamp is set to NATIVE_WINDOW_TIMESTAMP_AUTO |
|
577 * (the default), timestamps will be generated automatically when queueBuffer is |
|
578 * called. The timestamp is measured in nanoseconds, and is normally monotonically |
|
579 * increasing. The timestamp should be unaffected by time-of-day adjustments, |
|
580 * and for a camera should be strictly monotonic but for a media player may be |
|
581 * reset when the position is set. |
|
582 */ |
|
583 static inline int native_window_set_buffers_timestamp( |
|
584 struct ANativeWindow* window, |
|
585 int64_t timestamp) |
|
586 { |
|
587 return window->perform(window, NATIVE_WINDOW_SET_BUFFERS_TIMESTAMP, |
|
588 timestamp); |
|
589 } |
|
590 |
|
591 /* |
|
592 * native_window_set_scaling_mode(..., int mode) |
|
593 * All buffers queued after this call will be associated with the scaling mode |
|
594 * specified. |
|
595 */ |
|
596 static inline int native_window_set_scaling_mode( |
|
597 struct ANativeWindow* window, |
|
598 int mode) |
|
599 { |
|
600 return window->perform(window, NATIVE_WINDOW_SET_SCALING_MODE, |
|
601 mode); |
|
602 } |
|
603 |
|
604 |
|
605 /* |
|
606 * native_window_api_connect(..., int api) |
|
607 * connects an API to this window. only one API can be connected at a time. |
|
608 * Returns -EINVAL if for some reason the window cannot be connected, which |
|
609 * can happen if it's connected to some other API. |
|
610 */ |
|
611 static inline int native_window_api_connect( |
|
612 struct ANativeWindow* window, int api) |
|
613 { |
|
614 return window->perform(window, NATIVE_WINDOW_API_CONNECT, api); |
|
615 } |
|
616 |
|
617 /* |
|
618 * native_window_api_disconnect(..., int api) |
|
619 * disconnect the API from this window. |
|
620 * An error is returned if for instance the window wasn't connected in the |
|
621 * first place. |
|
622 */ |
|
623 static inline int native_window_api_disconnect( |
|
624 struct ANativeWindow* window, int api) |
|
625 { |
|
626 return window->perform(window, NATIVE_WINDOW_API_DISCONNECT, api); |
|
627 } |
|
628 |
|
629 |
|
630 __END_DECLS |
|
631 |
|
632 #endif /* SYSTEM_CORE_INCLUDE_ANDROID_WINDOW_H */ |