struct private_module_t;
struct private_handle_t;
+typedef int ion_user_handle_t;
struct private_module_t {
gralloc_module_t base;
- private_handle_t* framebuffer;
+ struct private_handle_t* framebuffer;
uint32_t flags;
uint32_t numBuffers;
uint32_t bufferMask;
pthread_mutex_t lock;
+ unsigned int refcount;
buffer_handle_t currentBuffer;
int ionfd;
struct native_handle nativeHandle;
#endif
+// set if using video encoding colorspace
+#define GRALLOC_USAGE_PRIVATE_CHROMA (GRALLOC_USAGE_PRIVATE_0)
+
enum {
PRIV_FLAGS_FRAMEBUFFER = 0x00000001,
PRIV_FLAGS_USES_UMP = 0x00000002,
int height;
int stride;
int vstride;
+ int gamut;
+ int chroma;
// FIXME: the attributes below should be out-of-line
void *base;
+ void *base1;
+ void *base2;
+ ion_user_handle_t handle;
+ ion_user_handle_t handle1;
+ ion_user_handle_t handle2;
#ifdef __cplusplus
static const int sNumFds = 3;
- static const int sNumInts = 10;
+ static const int sNumInts = 17;
static const int sMagic = 0x3141592;
private_handle_t(int fd, int size, int flags, int w,
int h, int format, int stride, int vstride) :
- fd(fd), magic(sMagic), flags(flags), size(size),
+ fd(fd), fd1(-1), fd2(-1), magic(sMagic), flags(flags), size(size),
offset(0), format(format), width(w), height(h), stride(stride),
- vstride(vstride), base(0)
+ vstride(vstride), gamut(0), chroma(0), base(0), handle(0), handle1(0),
+ handle2(0)
{
version = sizeof(native_handle);
- numInts = sNumInts;
- numFds = sNumFds;
- fd1 = 0;
- fd2 = 0;
+ numInts = sNumInts + 2;
+ numFds = sNumFds - 2;
+ }
+
+ private_handle_t(int fd, int fd1, int size, int flags, int w,
+ int h, int format, int stride, int vstride) :
+ fd(fd), fd1(fd1), fd2(-1), magic(sMagic), flags(flags), size(size),
+ offset(0), format(format), width(w), height(h), stride(stride),
+ vstride(vstride), gamut(0), chroma(0), base(0), base1(0), base2(0),
+ handle(0), handle1(0), handle2(0)
+ {
+ version = sizeof(native_handle);
+ numInts = sNumInts + 1;
+ numFds = sNumFds - 1;
}
private_handle_t(int fd, int fd1, int fd2, int size, int flags, int w,
int h, int format, int stride, int vstride) :
fd(fd), fd1(fd1), fd2(fd2), magic(sMagic), flags(flags), size(size),
offset(0), format(format), width(w), height(h), stride(stride),
- vstride(vstride), base(0)
+ vstride(vstride), gamut(0), chroma(0), base(0), base1(0), base2(0),
+ handle(0), handle1(0), handle2(0)
{
version = sizeof(native_handle);
numInts = sNumInts;
static int validate(const native_handle* h) {
const private_handle_t* hnd = (const private_handle_t*)h;
if (!h || h->version != sizeof(native_handle) ||
- h->numInts != sNumInts || h->numFds != sNumFds ||
- hnd->magic != sMagic)
+ hnd->numInts + hnd->numFds != sNumInts + sNumFds ||
+ hnd->magic != sMagic)
{
ALOGE("invalid gralloc handle (at %p)", reinterpret_cast<void *>(const_cast<native_handle *>(h)));
return -EINVAL;