• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef __GRALLOC_CB_H__
2 #define __GRALLOC_CB_H__
3 
4 #include <hardware/hardware.h>
5 #include <hardware/gralloc.h>
6 #include <cutils/native_handle.h>
7 
8 #define BUFFER_HANDLE_MAGIC ((int)0xabfabfab)
9 #define CB_HANDLE_NUM_INTS(nfds) (int)((sizeof(cb_handle_t) - (nfds)*sizeof(int)) / sizeof(int))
10 
11 //
12 // Our buffer handle structure
13 //
14 struct cb_handle_t : public native_handle {
15 
cb_handle_tcb_handle_t16     cb_handle_t(int p_fd, int p_ashmemSize, int p_usage,
17                 int p_width, int p_height,
18                 int p_glFormat, int p_glType) :
19         fd(p_fd),
20         magic(BUFFER_HANDLE_MAGIC),
21         usage(p_usage),
22         width(p_width),
23         height(p_height),
24         glFormat(p_glFormat),
25         glType(p_glType),
26         ashmemSize(p_ashmemSize),
27         ashmemBase(NULL),
28         ashmemBasePid(0),
29         mappedPid(0),
30         lockedLeft(0),
31         lockedTop(0),
32         lockedWidth(0),
33         lockedHeight(0),
34         hostHandle(0)
35     {
36         version = sizeof(native_handle);
37         numFds = 0;
38         numInts = CB_HANDLE_NUM_INTS(numFds);
39     }
40 
~cb_handle_tcb_handle_t41     ~cb_handle_t() {
42         magic = 0;
43     }
44 
setFdcb_handle_t45     void setFd(int p_fd) {
46         if (p_fd >= 0) {
47             numFds = 1;
48         }
49         else {
50             numFds = 0;
51         }
52         fd = p_fd;
53         numInts = CB_HANDLE_NUM_INTS(numFds);
54     }
55 
validatecb_handle_t56     static bool validate(cb_handle_t * hnd) {
57         return (hnd &&
58                 hnd->version == sizeof(native_handle) &&
59                 hnd->magic == BUFFER_HANDLE_MAGIC &&
60                 hnd->numInts == CB_HANDLE_NUM_INTS(hnd->numFds));
61     }
62 
canBePostedcb_handle_t63     bool canBePosted() {
64         return (0 != (usage & GRALLOC_USAGE_HW_FB));
65     }
66 
67     // file-descriptors
68     int fd;  // ashmem fd (-1 of ashmem region did not allocated, i.e. no SW access needed)
69 
70     // ints
71     int magic;              // magic number in order to validate a pointer to be a cb_handle_t
72     int usage;              // usage bits the buffer was created with
73     int width;              // buffer width
74     int height;             // buffer height
75     int glFormat;           // OpenGL format enum used for host h/w color buffer
76     int glType;             // OpenGL type enum used when uploading to host
77     int ashmemSize;         // ashmem region size for the buffer (0 unless is HW_FB buffer or
78                             //                                    s/w access is needed)
79     int ashmemBase;         // CPU address of the mapped ashmem region
80     int ashmemBasePid;      // process id which mapped the ashmem region
81     int mappedPid;          // process id which succeeded gralloc_register call
82     int lockedLeft;         // region of buffer locked for s/w write
83     int lockedTop;
84     int lockedWidth;
85     int lockedHeight;
86     uint32_t hostHandle;
87 };
88 
89 
90 #endif //__GRALLOC_CB_H__
91