Android帧缓冲区(Frame Buffer)硬件抽象层(HAL)模块Gralloc的实现原理分析(3)
16lz
2021-01-26
结构体gralloc_module_t定义在文件hardware/libhardware/include/hardware/gralloc.h中,它主要是定义了四个用来操作图形缓冲区的成员函数,如下所示:
- typedefstructgralloc_module_t{
- ......
- int(*registerBuffer)(structgralloc_module_tconst*module,
- buffer_handle_thandle);
- int(*unregisterBuffer)(structgralloc_module_tconst*module,
- buffer_handle_thandle);
- int(*lock)(structgralloc_module_tconst*module,
- buffer_handle_thandle,intusage,
- intl,intt,intw,inth,
- void**vaddr);
- int(*unlock)(structgralloc_module_tconst*module,
- buffer_handle_thandle);
- ......
- }
- structprivate_module_t{
- gralloc_module_tbase;
- private_handle_t*framebuffer;
- uint32_tflags;
- uint32_tnumBuffers;
- uint32_tbufferMask;
- pthread_mutex_tlock;
- buffer_handle_tcurrentBuffer;
- intpmem_master;
- void*pmem_master_base;
- structfb_var_screeninfoinfo;
- structfb_fix_screeninfofinfo;
- floatxdpi;
- floatydpi;
- floatfps;
- };
- typedefconstnative_handle*buffer_handle_t;
- typedefstruct
- {
- intversion;/*sizeof(native_handle_t)*/
- intnumFds;/*numberoffile-descriptorsat&data[0]*/
- intnumInts;/*numberofintsat&data[numFds]*/
- intdata[0];/*numFds+numIntsints*/
- }native_handle_t;
- #ifdef__cplusplus
- structprivate_handle_t:publicnative_handle{
- #else
- structprivate_handle_t{
- structnative_handlenativeHandle;
- #endif
- enum{
- PRIV_FLAGS_FRAMEBUFFER=0x00000001
- };
- //file-descriptors
- intfd;
- //ints
- intmagic;
- intflags;
- intsize;
- intoffset;
- //FIXME:theattributesbelowshouldbeout-of-line
- intbase;
- intpid;
- #ifdef__cplusplus
- staticconstintsNumInts=6;
- staticconstintsNumFds=1;
- staticconstintsMagic=0x3141592;
- private_handle_t(intfd,intsize,intflags):
- fd(fd),magic(sMagic),flags(flags),size(size),offset(0),
- base(0),pid(getpid())
- {
- version=sizeof(native_handle);
- numInts=sNumInts;
- numFds=sNumFds;
- }
- ~private_handle_t(){
- magic=0;
- }
- staticintvalidate(constnative_handle*h){
- constprivate_handle_t*hnd=(constprivate_handle_t*)h;
- if(!h||h->version!=sizeof(native_handle)||
- h->numInts!=sNumInts||h->numFds!=sNumFds||
- hnd->magic!=sMagic)
- {
- LOGE("invalidgrallochandle(at%p)",h);
- return-EINVAL;
- }
- return0;
- }
- #endif
- };
更多相关文章
- chromium for android Browser进程结构分析
- Android应用程序级变量(全局变量)
- android sudio 快捷键
- 《Android(安卓)高性能编程》—— @IntDef 注解,减缓枚举的使用
- Windos下Android(ADT Bundle)配置NDK的两种方法------ADT、Cygwin
- 使用Kotlin开发Android(安卓)扩展函数(Extensions)
- 自定义控件二: Paint Canvar 画几何图形
- Android十八章:Realm-in-android
- 【5.30】android开发环境的搭建