从handle得到GraphicBuffer

先定义一个宏:

cpp 复制代码
#ifndef container_of
#define container_of(ptr, type, member) \
    (type *)((char*)(ptr) - offsetof(type, member))
#endif

然后:

cpp 复制代码
ANativeWindowBuffer *anwBuffer = container_of(buffer, ANativeWindowBuffer, handle);

其中buffer的类型是:

cpp 复制代码
buffer_handle_t *buffer;

得到ANativeWindowBuffer以后:

cpp 复制代码
sp<GraphicBuffer> GraphicBuffer::from(ANativeWindowBuffer* anwb) {
    return static_cast<GraphicBuffer *>(anwb);
}
相关推荐
kymjs张涛8 小时前
OpenClaw 学习小组:初识
android·linux·人工智能
范特西林11 小时前
实战演练——从零实现一个高性能 Binder 服务
android
范特西林12 小时前
代码的生成:AIDL 编译器与 Parcel 的序列化艺术
android
范特西林12 小时前
深入内核:Binder 驱动的内存管理与事务调度
android
范特西林13 小时前
解剖麻雀:Binder 通信的整体架构全景图
android
范特西林13 小时前
破冰之旅:为什么 Android 选择了 Binder?
android
奔跑中的蜗牛66614 小时前
一次播放器架构升级:Android 直播间 ANR 下降 60%
android
测试工坊16 小时前
Android 视频播放卡顿检测——帧率之外的第二战场
android
Kapaseker18 小时前
一杯美式深入理解 data class
android·kotlin
鹏多多18 小时前
Flutter使用screenshot进行截屏和截长图以及分享保存的全流程指南
android·前端·flutter