Android系统的HAL——Mapper.cpp

该文件中的几个主要函数是gralloc_module_t结构函数指针的具体实现。

struct private_module_t HAL_MODULE_INFO_SYM = {
    base: {
        common: {
            tag: HARDWARE_MODULE_TAG,
            version_major: 1,
            version_minor: 0,
            id: GRALLOC_HARDWARE_MODULE_ID,
            name: "Graphics Memory Allocator Module",
            author: "The Android Open Source Project",
            methods: &gralloc_module_methods
        },
        registerBuffer: gralloc_register_buffer,
        unregisterBuffer: gralloc_unregister_buffer,
        lock: gralloc_lock,
        unlock: gralloc_unlock,

    },
    framebuffer: 0,
    flags: 0,
    numBuffers: 0,
    bufferMask: 0,
    lock: PTHREAD_MUTEX_INITIALIZER,
    currentBuffer: 0,
    pmem_master: -1,
    pmem_master_base: 0
};

1、int gralloc_register_buffer(gralloc_module_t const* module,
        buffer_handle_t handle)
1)建立一个新的private_handle_t对象
2)如果不是本进程对象,赋初值

2、int gralloc_unregister_buffer(gralloc_module_t const* module,
        buffer_handle_t handle)
1)validate判断handle是否合法
2)call gralloc_unmap(module, handle)

3、static int gralloc_unmap(gralloc_module_t const* module,
        buffer_handle_t handle)
1)获取base和size
2)PMEM_HACK because pmem cannot mmap at an offset
3)munmap(base, size)

4、int gralloc_lock(gralloc_module_t const* module,
        buffer_handle_t handle, int usage,
        int l, int t, int w, int h,
        void** vaddr)
1)validate检查
2)如果已经被lock-->error
3)用android_atomic_cmpxchg将new_value写入lockState
4)如果需要map-->gralloc_map(module, handle, vaddr)
5)*vaddr = (void*)hnd->base

5、static int gralloc_map(gralloc_module_t const* module,
        buffer_handle_t handle,
        void** vaddr)
1)PMEM_HACK
2)void* mappedAddress = mmap(0, size,
                PROT_READ|PROT_WRITE, MAP_SHARED, hnd->fd, 0);
3)hnd->base = intptr_t(mappedAddress) + hnd->offset
4)*vaddr = (void*)hnd->base

6、int gralloc_unlock(gralloc_module_t const* module,
        buffer_handle_t handle)
1)将lockState跟新至unlock态

7、int terminateBuffer(gralloc_module_t const* module,
        private_handle_t* hnd)
1)if locked -->error
2)if mapped -->unmap
3)本文件没有调用

8、MSM7K添加的一个函数
int gralloc_perform(struct gralloc_module_t const* module,
        int operation, ... )
1)参数不定,通过va宏获取,估计为operation,fd,size,offset,base,handle
2)根据参数配置private_handle_t* hnd
3)Only for Video and Camera


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值