2 * Copyright 2011 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #ifndef __GRALLOC_CB_H__
18 #define __GRALLOC_CB_H__
20 #include <hardware/hardware.h>
21 #include <hardware/gralloc.h>
22 #include <cutils/native_handle.h>
24 #define BUFFER_HANDLE_MAGIC ((int)0xabfabfab)
25 #define CB_HANDLE_NUM_INTS(nfds) (int)((sizeof(cb_handle_t) - (nfds)*sizeof(int)) / sizeof(int))
28 // Our buffer handle structure
30 struct cb_handle_t : public native_handle {
32 cb_handle_t(int p_fd, int p_ashmemSize, int p_usage,
33 int p_width, int p_height, int p_frameworkFormat,
34 int p_format, int p_glFormat, int p_glType) :
36 magic(BUFFER_HANDLE_MAGIC),
40 frameworkFormat(p_frameworkFormat),
44 ashmemSize(p_ashmemSize),
54 version = sizeof(native_handle);
56 numInts = CB_HANDLE_NUM_INTS(numFds);
63 void setFd(int p_fd) {
71 numInts = CB_HANDLE_NUM_INTS(numFds);
74 static bool validate(const cb_handle_t* hnd) {
76 hnd->version == sizeof(native_handle) &&
77 hnd->magic == BUFFER_HANDLE_MAGIC &&
78 hnd->numInts == CB_HANDLE_NUM_INTS(hnd->numFds));
82 return (0 != (usage & GRALLOC_USAGE_HW_FB));
86 int fd; // ashmem fd (-1 of ashmem region did not allocated, i.e. no SW access needed)
89 int magic; // magic number in order to validate a pointer to be a cb_handle_t
90 int usage; // usage bits the buffer was created with
91 int width; // buffer width
92 int height; // buffer height
93 int frameworkFormat; // format requested by the Android framework
94 int format; // real internal pixel format format
95 int glFormat; // OpenGL format enum used for host h/w color buffer
96 int glType; // OpenGL type enum used when uploading to host
97 int ashmemSize; // ashmem region size for the buffer (0 unless is HW_FB buffer or
98 // s/w access is needed)
100 intptr_t ashmemBase; // CPU address of the mapped ashmem region
101 uint64_t padding; // enforce same size on 32-bit/64-bit
102 } __attribute__((aligned(8)));
104 int ashmemBasePid; // process id which mapped the ashmem region
105 int mappedPid; // process id which succeeded gralloc_register call
106 int lockedLeft; // region of buffer locked for s/w write
114 #endif //__GRALLOC_CB_H__