AIDL Hal 开发笔记3---- stable-c HAL 实例分析

目录


stable-c HAL 实例分析

在 HIDL HAL 中 聊过 Same-Process HALs,这类 hal 的调用对性能要求高,一般直接链接,不适用跨进程的方式来调用。

在 AIDL HAL 中,与之对应的是 stable-c HAL。stable-c HAL 就是一个对外接口稳定的 so 库。

接着我们来看一个源码中的 stable-c HAL,hardware/interfaces/graphics/mapper

这里只是给出一个框架,具体需要芯片厂商来做实现。

其中最重要的就是hardware/interfaces/graphics/mapper/stable-c/implutils/include/android/hardware/graphics/mapper/utils/IMapperProvider.h,其中的IMapperV5Impl就是 stable-c HAL 的对外接口:

structIMapperV5Impl{staticconstautoversion=AIMAPPER_VERSION_5;virtual~IMapperV5Impl()=default;virtual AIMapper_ErrorimportBuffer(constnative_handle_t*_Nonnull handle,buffer_handle_t_Nullable*_Nonnull outBufferHandle)=0;virtual AIMapper_ErrorfreeBuffer(buffer_handle_t_Nonnull buffer)=0;virtual AIMapper_ErrorgetTransportSize(buffer_handle_t_Nonnull buffer,uint32_t*_Nonnull outNumFds,uint32_t*_Nonnull outNumInts)=0;virtual AIMapper_Errorlock(buffer_handle_t_Nonnull buffer,uint64_tcpuUsage,ARect accessRegion,intacquireFence,void*_Nullable*_Nonnull outData)=0;virtual AIMapper_Errorunlock(buffer_handle_t_Nonnull buffer,int*_Nonnull releaseFence)=0;virtual AIMapper_ErrorflushLockedBuffer(buffer_handle_t_Nonnull buffer)=0;virtual AIMapper_ErrorrereadLockedBuffer(buffer_handle_t_Nonnull buffer)=0;virtualint32_tgetMetadata(buffer_handle_t_Nonnull buffer,AIMapper_MetadataType metadataType,void*_Nullable destBuffer,size_tdestBufferSize)=0;virtualint32_tgetStandardMetadata(buffer_handle_t_Nonnull buffer,int64_tstandardMetadataType,void*_Nullable destBuffer,size_tdestBufferSize)=0;virtual AIMapper_ErrorsetMetadata(buffer_handle_t_Nonnull buffer,AIMapper_MetadataType metadataType,constvoid*_Nonnull metadata,size_tmetadataSize)=0;virtual AIMapper_ErrorsetStandardMetadata(buffer_handle_t_Nonnull buffer,int64_tstandardMetadataType,constvoid*_Nonnull metadata,size_tmetadataSize)=0;virtual AIMapper_ErrorlistSupportedMetadataTypes(constAIMapper_MetadataTypeDescription*_Nullable*_Nonnull outDescriptionList,size_t*_Nonnull outNumberOfDescriptions)=0;virtual AIMapper_ErrordumpBuffer(buffer_handle_t_Nonnull bufferHandle,AIMapper_DumpBufferCallback _Nonnull dumpBufferCallback,void*_Null_unspecified context)=0;virtual AIMapper_ErrordumpAllBuffers(AIMapper_BeginDumpBufferCallback _Nonnull beginDumpBufferCallback,AIMapper_DumpBufferCallback _Nonnull dumpBufferCallback,void*_Null_unspecified context)=0;virtual AIMapper_ErrorgetReservedRegion(buffer_handle_t_Nonnull buffer,void*_Nullable*_Nonnull outReservedRegion,uint64_t*_Nonnull outReservedSize)=0;};

Google 给出了一个模拟器的实现/external/minigbm/cros_gralloc/mapper_stablec

external/minigbm/cros_gralloc/mapper_stablec/Mapper.cpp中实现了一个 CrosGrallocMapperV5 类继承自 IMapperV5Impl,实现了所有的对外接口。

另外,定义了两个对外的入口符号:

extern"C"uint32_tANDROID_HAL_MAPPER_VERSION=AIMAPPER_VERSION_5;extern"C"AIMapper_ErrorAIMapper_loadIMapper(AIMapper*_Nullable*_Nonnull outImplementation){staticvendor::mapper::IMapperProvider<CrosGrallocMapperV5>provider;returnprovider.load(outImplementation);}

使用 mapper hal 的程序可以通过 AIMapper_loadIMapper 获取AIMapper指针,AIMapper内部的函数最终都会调用到 CrosGrallocMapperV5 类中的具体实现中。

这里两个符号都使用 extern “C” 修饰,也就是, c 和 cpp 程序都可以使用这两个符号来使用 mapper 模块。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1168920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIDL Hal 开发笔记4----驱动开发

目录一、编写Linux 内核驱动1.1 编写驱动1.2 将模块编译进内核二、Native 程序测试驱动程序三、权限配置驱动开发 一、编写Linux 内核驱动 1.1 编写驱动 Linux 驱动实际就是一个 Linux 内核模块。 首先&#xff0c;我们需要理解什么是内核模块&#xff1f;简单来说&#x…

基于PLC的卷扬机控制系统

三、卷扬机控制系统 &#xff08;一&#xff09;卷扬机的基本结构 如图3-1所示&#xff0c;卷扬机是由一个电机通过卷筒来带动左右两个小车上下行的工业机器。在工作过程中&#xff0c;使用一个电机同时拖动两个小车&#xff0c;使左右两个小车交替运行&#xff0c;当左车&…

基于51单片机的出租车计价器

3出租车计价器硬件设计 硬件是一个电子器具能否顺利运行的重要保障&#xff0c;它是软件的物质基础和载体。本系统的硬件设计主要包含K24C02记忆存储模块&#xff0c;用于存储数据&#xff1b;DS1302时钟模块&#xff0c;为计价器计时&#xff1b;A44E霍尔传感器电路&#xff0…

收藏级指南:Agentic RAG 彻底升级传统RAG,打造能干活的AI数字同事

Agentic RAG作为传统RAG的颠覆性升级方案&#xff0c;核心是将静态的“检索-生成”流程&#xff0c;重构为智能体驱动的动态自适应工作流。传统RAG仅能完成单次问答的闭环&#xff0c;而Agentic RAG凭借推理规划、工具调用、自我修正的核心能力&#xff0c;可承接复杂任务落地。…

QML基本元素

元素可以被分为可视化元素与非可视化元素。一个可视化元素&#xff08;例如矩形框Rectangle&#xff09;有着几何形状并且可以在屏幕上显示。一个非可视化元素&#xff08;例如计时器Timer&#xff09;提供了常用的功能&#xff0c;通常用于操作可视化元素。现在我们将专注于几…

交直流可编程电源(技术资料) 直流电源是直流输出0-30V 5A TL494 线路; 交流电压...

交直流可编程电源(技术资料&#xff09; 直流电源是直流输出0-30V 5A TL494 线路&#xff1b; 交流电压是10-120HZ可变频&#xff0c;0-30V幅度可调&#xff0c;5A输出&#xff1b; 变频交流电源部分是MEGA8DDS芯片D类数字功放做的。 电路原理: 经典的TL494开关电源线路 开关电…

DevSecOps时代测试工具的进化论:从功能验证到全链路质量保障

DevSecOps时代测试工具的进化论&#xff1a;从功能验证到全链路质量保障 在数字化转型加速的今天&#xff0c;软件开发周期持续缩短&#xff0c;安全威胁日益复杂&#xff0c;传统的"开发-测试-部署"线性流程已难以应对当下挑战。随着DevSecOps理念的深入实践&#x…

收藏级!大厂后端面试全流程复盘+大模型从入门到实战学习礼包

对于计算机专业应届毕业生而言&#xff0c;每年初秋的互联网大厂校招季&#xff0c;既是机遇与挑战交织的关键窗口期&#xff0c;更是检验四年专业积淀与技术能力的“终极实战场”。作为去年成功斩获字节跳动、阿里巴巴等多家头部大厂后端开发Offer的亲历者&#xff0c;同时也是…

【Java毕设全套源码+文档】基于springboot的公务员考试管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

基于Arduino的物流分拣控制系统设计

摘 要 为了提高当前物流分拣系统的工作效率和分拣正确率&#xff0c;满足市场对该行业的智能化需求&#xff0c;改善快递行业的经济性&#xff0c;本项目利用机械臂作为分拣工具&#xff0c;抓取物品并送到指定位置&#xff1b;利用光电对管作为扫描识别仪器&#xff0c;检测…

本土DevOps领军者Gitee:如何重塑中国企业研发效能新范式

本土DevOps领军者Gitee&#xff1a;如何重塑中国企业研发效能新范式 在数字化转型进入深水区的当下&#xff0c;研发效能已成为决定企业竞争力的关键变量。根据IDC最新报告&#xff0c;到2025年&#xff0c;采用成熟DevOps实践的企业将比同行实现50%以上的交付速度优势。这一背…

【Java毕设全套源码+文档】基于springboot的新闻发布会管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

收藏!AI焦虑别慌,程序员为啥要学大模型?零基础系统入门指南

近来技术圈的“AI焦虑”持续蔓延&#xff0c;“大模型”“AI替代程序员”这类话题反复霸占热搜与技术社群&#xff0c;不少从业者陷入莫名的恐慌与迷茫。 相信很多程序员都有这样的疑问&#xff1a;在AI浪潮席卷各行各业的当下&#xff0c;到底该不该主动掌握AI大模型相关能力&…

【Java毕设源码分享】基于springboot+vue的水果在线销售系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

listmap数据变驼峰

/*** listmap数据_变驼峰** param list* return*/public static List<Map<String, Object>> convertListToCamelCase(List<Map<String, Object>> list) {List<Map<String, Object>> data new ArrayList<>();if (null list || list…

量产HLW8032串口通讯芯片的三相电参数采集系统项目资料 1主芯片采用STM32F407

量产HLW8032串口通讯芯片的三相电参数采集系统项目资料 1主芯片采用STM32F407 2嵌入式软件使用UCOS2操作系统 3通过3个独立串口实时采集三路三相电参数数据&#xff08;通过HLW8032&#xff09; 4具备TFT液晶显示接口&#xff0c;实时显示三相电参数数据 5为了采集电参数更加精…

Java后端开发学习路线,零基础入门到精通,收藏这篇就够了

此思维导图是从codeSheep那里而来 文章目录 java后端开发学习路线 编程基础 java语言 语法基础JVM并发/多线程 数据结构和算法 数据结构算法 计算机网络数据库/SQL操作系统设计模式 研发工具应用框架 后端 spring全家桶服务器软件中间件分布式/微服务 微服务发现/注册网关服务…

Maven 4 终于快来了,新特性很香!

大家好&#xff0c;我是 Guide&#xff01;在 Java 生态中&#xff0c;Maven 绝对是大家每天都要打交道的“老朋友”。 InterviewGuide 这个开源 AI 项目中&#xff0c;我使用了 Gradle。不过&#xff0c;根据大家的反馈来看还是更愿意使用 Maven 一些。 目前&#xff08;2026…

AntDesign Table sorter 为什么点击第三次取消了,还是有参数发出?可设置sortDirections解决

在 Ant Design 的 Table 组件中&#xff0c;排序默认的行为是&#xff1a;点击一次为升序&#xff08;ascend&#xff09;&#xff0c;点击二次为降序&#xff08;descend&#xff09;&#xff0c;点击三次则取消排序&#xff08;undefined&#xff09;。这个行为是由 sorter 属…

AI驱动的11款论文写作工具,提供LaTeX格式智能排版与内容优化功能。

工具对比排名 工具名称 核心优势 支持LaTeX 适用场景 aibiye AIGC率降个位数&#xff0c;兼容知网规则 是 AI痕迹强处理 aicheck 学术改写优化&#xff0c;语义保留佳 是 格式统一化 askpaper 降重降AI一体&#xff0c;20分钟快速响应 是 初稿优化 秒篇 人类特…