16f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian/* 26f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * Copyright (C) 2008 The Android Open Source Project 36f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * 46f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 56f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * you may not use this file except in compliance with the License. 66f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * You may obtain a copy of the License at 76f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * 86f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 96f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * 106f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * Unless required by applicable law or agreed to in writing, software 116f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 126f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * See the License for the specific language governing permissions and 146f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian * limitations under the License. 156f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian */ 166f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 176f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#ifndef ANDROID_UI_PRIVATE_SW_GRALLOC_HANDLE_H 186f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#define ANDROID_UI_PRIVATE_SW_GRALLOC_HANDLE_H 196f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 206f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <stdint.h> 216f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <limits.h> 226f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <sys/cdefs.h> 236f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <hardware/gralloc.h> 246f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <errno.h> 256f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 266f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#include <cutils/native_handle.h> 276f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 286f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopiannamespace android { 296f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 306f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian/*****************************************************************************/ 316f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 326f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopianstruct sw_gralloc_handle_t : public native_handle 336f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian{ 346f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian // file-descriptors 356f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian int fd; 366f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian // ints 376f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian int magic; 386f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian int size; 396f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian int base; 406f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian int prot; 416f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian int pid; 426f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 436f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian static const int sNumInts = 5; 446f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian static const int sNumFds = 1; 456f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian static const int sMagic = '_sgh'; 466f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 476f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian sw_gralloc_handle_t() : 486f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian fd(-1), magic(sMagic), size(0), base(0), prot(0), pid(getpid()) 496f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian { 506f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian version = sizeof(native_handle); 516f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian numInts = sNumInts; 526f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian numFds = sNumFds; 536f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian } 546f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian ~sw_gralloc_handle_t() { 556f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian magic = 0; 566f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian } 576f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 586f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian static int validate(const native_handle* h) { 596f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian const sw_gralloc_handle_t* hnd = (const sw_gralloc_handle_t*)h; 606f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian if (!h || h->version != sizeof(native_handle) || 616f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian h->numInts != sNumInts || h->numFds != sNumFds || 626f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian hnd->magic != sMagic) 636f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian { 646f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian return -EINVAL; 656f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian } 666f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian return 0; 676f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian } 686f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 696f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian static status_t alloc(uint32_t w, uint32_t h, int format, 706f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian int usage, buffer_handle_t* handle, int32_t* stride); 716f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian static status_t free(sw_gralloc_handle_t* hnd); 726f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian static status_t registerBuffer(sw_gralloc_handle_t* hnd); 736f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian static status_t unregisterBuffer(sw_gralloc_handle_t* hnd); 746f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian static status_t lock(sw_gralloc_handle_t* hnd, int usage, 756f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian int l, int t, int w, int h, void** vaddr); 766f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian static status_t unlock(sw_gralloc_handle_t* hnd); 776f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian}; 786f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 796f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian/*****************************************************************************/ 806f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 816f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian}; // namespace android 826f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian 836f5f5a095a5a4d42fc656cf8c1e6d0f67594f88dMathias Agopian#endif /* ANDROID_UI_PRIVATE_SW_GRALLOC_HANDLE_H */ 84