• 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