跨平台YUV硬件编码拍照方法、系统、智能终端及介质与流程

摘要: 本发明涉及移动终端图像处理,尤其涉及的是一种跨平台yuv硬件编码拍照方法、系统、智能终端及存储介质。背景技术:1、随着移动终端技术的持续演进,用户对拍照功能的性...
跨平台YUV硬件编码拍照方法、系统、智能终端及介质与流程

本发明涉及移动终端图像处理,尤其涉及的是一种跨平台yuv硬件编码拍照方法、系统、智能终端及存储介质。

背景技术:

1、随着移动终端技术的持续演进,用户对拍照功能的性能要求显著提升。当前android平台的相机拍照流程中,原始yuv图像数据需经算法处理后转换为jpeg格式。传统方案存在多重技术瓶颈:应用层采用软件编码库进行cpu处理时,高分辨率图像场景下编码效率低下,导致用户操作响应迟滞;而硬件jpeg编码器虽具备性能优势,却因android系统进程隔离机制难以被应用层直接调用。相机应用与硬件抽象层服务分属独立进程空间,硬件编码器仅能在服务进程内运行,应用进程无法跨越进程边界访问底层硬件资源。

2、同时,系统安全策略严格限制进程间通信,建立可靠数据通道需突破selinux访问控制约束。不同芯片平台的硬件编码器在接口规范、缓冲区管理及旋转处理机制上存在本质差异,例如部分平台需依赖移动显示处理器完成图像旋转后再编码,而其他平台则通过编码器原生参数实现旋转,这种碎片化特性使统一接口封装难以实现跨平台复用。此外,高分辨率yuv图像数据体量庞大,进程间传输若采用常规拷贝方式将产生显著开销,严重削弱硬件编码的性能增益。现有流程中图像算法处理与编码转换在主线程串行执行,叠加美颜滤镜等算法时处理时长累积,造成拍照操作阻塞,连续拍摄体验受限,算法扩展能力受到根本制约。上述问题共同导致硬件编码性能无法充分发挥,用户面临操作延迟与功能受限的双重困境。

3、因此,现有技术还有待于改进和发展。

技术实现思路

1、本发明要解决的技术问题在于,针对上述现有技术的缺陷,提供一种跨平台yuv硬件编码拍照方法、系统、智能终端及存储介质,本发明提供了一种在android平台上通过应用层调用hal层硬件编码器实现yuv到jpeg高效转换的跨平台拍照方法及系统;本发明可以通过跨平台抽象层来屏蔽底层硬件差异,可以构建高效、可移植的硬件编码通道。具有减少进程间数据传输开销,提升硬件编码效率,降低拍照延迟,实现跨平台兼容。

2、本发明解决问题所采用的技术方案如下:

3、一种跨平台yuv硬件编码拍照方法,其中,包括:

4、在android相机应用层,当检测到用户操作指令触发拍照时,获取相机硬件抽象层生成的原始yuv图像数据;

5、所述应用层通过抽象命名空间unix域套接字与相机硬件抽象层服务进程之间预先建立的ipc通道,以文件描述符memfd共享内存结合文件描述符传递机制,将所述yuv图像数据零拷贝发送至相机硬件抽象层服务进程;

6、所述相机硬件抽象层服务进程通过其内部设置的平台抽象层调用平台硬件jpeg编码器;

7、所述平台硬件jpeg编码器对所述yuv图像数据进行编码转换,生成jpeg图像数据,并将所述jpeg图像数据通过memfd共享内存回传至所述应用层。

8、所述的跨平台yuv硬件编码拍照方法,其中,所述在android相机应用层,当检测到用户操作指令触发拍照时,获取相机hal层生成的原始yuv图像数据的步骤之前包括:

9、预先在android相机应用层与相机硬件抽象层服务进程之间,通过抽象命名空间的unix域套接字建立ipc进程间通信通道,用于采用memfd文件描述符共享内存结合scm_rights文件描述符传递机制,实现yuv图像数据的零拷贝跨进程传输;

10、以及预先在相机硬件抽象层服务进程内部设置平台抽象层,其中,所述平台抽象层定义统一的缓冲区管理和编码操作接口,不同芯片平台的硬件jpeg编码器通过实现所述统一接口完成平台适配;

11、所述平台抽象层将硬件jpeg编码器的操作抽象为以下函数接口:缓冲区分配、缓冲区释放、缓冲区属性查询、缓存同步、格式转换、编码能力查询以及编码执行。

12、所述的跨平台yuv硬件编码拍照方法,其中,将所述yuv图像数据零拷贝发送至相机硬件抽象层服务进程的步骤之前,还包括:在应用层对所述yuv图像数据执行图像处理算法操作的步骤,所述图像处理算法包括美颜滤镜、图像增强中的至少一种;

13、所述图像处理算法在后台异步执行,相机应用层在算法处理过程中持续响应用户的拍照操作,算法处理与拍照流程并行执行;

14、所述ipc通道采用抽象命名空间的unix域套接字,并通过memfd共享内存机制在所述应用层与相机硬件抽象层服务进程之间传递图像数据。

15、所述的跨平台yuv硬件编码拍照方法,其中,所述相机硬件抽象层服务进程通过linux内核内存管理组件(ion)缓冲池缓存已分配的硬件编码缓冲区,在首次编码前通过预热协议预先分配并缓存所述linux内核内存管理组件(ion)缓冲区,后续编码请求直接复用已缓存的缓冲区。

16、所述的跨平台yuv硬件编码拍照方法,其中,其还包括步骤:

17、当需要旋转时,mtk平台采用两阶段编码方式,先通过移动显示处理器mdp硬件旋转yuv数据,再通过硬件jpeg编码器编码;展锐平台和高通平台通过硬件jpeg编码器原生支持的旋转参数一次完成旋转编码;

18、编码监听模块以共享库形式加载于相机hal服务进程中,通过共享库构造函数自动启动监听线程,无需修改相机hal服务的源代码。

19、所述的跨平台yuv硬件编码拍照方法,其中,所述ipc通道支持多种数据传递模式:通过文件描述符memfd共享内存传递yuv字节数组数据;通过scm_rights文件描述符直接传递相机image的dma-buf文件描述符;以及通过预热模式预先分配linux内核内存管理组件(ion)缓冲池而不执行实际编码。

20、所述的跨平台yuv硬件编码拍照方法,其中,其还包括步骤:

21、构建基于时隙的环形缓冲区管理结构,用于将缓冲池划分为固定数量的连续时隙,每个时隙预绑定一完整的ion缓冲区(包含源yuv缓冲区、目标jpeg缓冲区及平台特定的旋转缓冲区),形成逻辑上的环形队列;各时隙独立管理其缓冲区的占用状态(空闲、填充中、编码中、回传中),连续拍摄的图像帧按时间顺序循环占用不同时隙,从物理上隔离相邻帧的缓冲区资源,消除多帧并发时的资源冲突;

22、在环形缓冲区内设置高水位线与低水位线监控机制;实时监测单位时间内的编码请求密度,当检测到高频连拍模式且空闲时隙数量低于低水位线时,自动触发扩展协议,从系统ion缓冲区内存中申请额外缓冲区组注入预备队列;当拍摄频率降低且空闲时隙超过高水位线时,逐步释放多余缓冲区至低水位线水平,动态平衡内存占用与并发处理能力;

23、建立相邻拍摄帧之间的缓冲区继承关系,实现零释放复用;将前一帧完成硬件编码后,其占用的ion缓冲区组不立即回收到通用池或释放,而是直接进入热待机状态,通过引用计数机制保持内存映射有效,优先分配给下一帧编码请求;仅在缓冲区尺寸不匹配或拍摄间隔超过阈值时才触发真正的释放与重新分配;

24、引入硬件编码完成信号驱动的缓冲区状态机;当硬件编码器完成jpeg压缩并触发中断时,立即将对应时隙的缓冲区状态从编码中迁移至可复用,使其可被后续帧立即占用;而jpeg数据回传至应用层的操作则使用独立的临时映射缓冲区或直接在原缓冲区建立只读映射进行异步传输;

25、通过时隙化环形结构从空间维度隔离多帧资源,通过双水位线机制从时间维度动态适配流量波动,通过帧间继承协议消除不必要的内存分配开销,通过异步状态迁移压缩资源占用周期;四者协同作用,使得在连续高速连拍场景下,以恒定的低延迟为每帧编码请求分配就绪的缓冲区资源。

26、一种跨平台yuv硬件编码拍照系统,其中,所述系统包括:

27、应用层编码接口模块,用于在android相机应用层提供硬件jpeg编码的java接口,通过jni加载本地编码库并与相机硬件抽象层服务进程建立ipc连接;

28、ipc通信模块,用于在应用层与相机硬件抽象层服务进程之间通过unix域套接字和共享内存传递图像数据;

29、平台抽象层模块,设置于相机硬件抽象层服务进程中,用于定义统一的硬件编码操作接口,并适配不同芯片平台的硬件jpeg编码器实现;

30、硬件编码执行模块,用于调用平台硬件jpeg编码器完成yuv到jpeg的编码转换;

31、算法管线管理模块,用于在应用层管理图像处理算法节点,支持算法的异步执行和叠加处理,所述算法管线管理模块与所述应用层编码接口模块配合,在算法处理完成后触发硬件编码;

32、所述跨平台yuv硬件编码拍照系统采用上述任一项所述跨平台yuv硬件编码拍照方法实现拍照处理。

33、一种智能终端,其中,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于执行上述中任意一项所述的方法。

34、一种计算机可读存储介质,其中,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述中任意一项所述的方法。

35、本发明的有益效果、本发明提供了一种跨平台yuv硬件编码拍照方法、系统、智能终端及存储介质;通过应用层与硬件抽象层服务进程之间建立零拷贝ipc通道直接传输yuv数据至硬件编码器,避免数据拷贝开销,实现高效跨平台编码,具有减少进程间数据传输开销,提升硬件编码效率,降低拍照延迟,实现跨平台兼容。

36、本发明通过在应用层与相机hal服务进程之间建立高效的ipc通道,利用平台硬件jpeg编码器完成yuv到jpeg的编码转换,同时采用模块化的平台抽象层设计实现跨平台复用,并通过异步算法管线使算法处理不再阻塞拍照流程。并且本发明还具有如下优点:

37、1)、编码性能大幅提升。通过直接调用平台硬件jpeg编码器,避免了cpu软件编码的性能瓶颈。实测数据显示:在mtk6789平台上,完整拍照流程从软件编码的约950毫秒缩短至硬件编码的约600毫秒,提升约37%;在展锐t615平台上,从软件编码的3.5-4秒大幅缩短至硬件编码的600-800毫秒,提升幅度超过75%,性能改善极为显著。

38、2)、跨平台可移植性强。本发明通过模块化的平台抽象层设计,将应用层代码、jni通信层、ipc协议等完全与平台解耦。移植到新平台时,只需在平台抽象层实现12个标准函数接口,无需修改应用层任何代码。目前已成功在mtk和展锐平台上验证实现,高通平台可采用相同的平台适配方式接入。

39、3)、算法异步化提升拍照体验。本发明将图像算法处理改为后台异步执行,相机应用可以在后台处理算法的同时持续响应用户的拍照操作。算法处理不再阻塞拍照流程,可叠加更多图像处理算法(如美颜、滤镜、水印等)而不会影响拍照速度,使照片效果更好。

40、4)、零代码侵入集成。本发明的hal层监听模块以共享库形式加载于相机hal服务进程中,通过共享库构造函数自动启动监听线程,集成时仅需在编译脚本中增加一行共享库依赖,无需修改相机hal服务的源代码或init配置文件。

41、5)、智能缓冲池管理。通过ion缓冲池预热机制,在首次编码前预先分配并缓存硬件编码所需的ion缓冲区,后续编码请求直接复用已缓存缓冲区,避免每次编码时重新分配ion内存的开销(约25毫秒),显著提升连续编码性能。

42、此外,本发明还取得了以下意想不到的技术效果:

43、一),在展锐t615平台上,通过平台感知的缓冲池策略——即根据平台是否原生支持旋转来决定是否分配旋转缓冲区——使预热时间从预估的约476毫秒大幅降低至约80毫秒,内存占用从约47mb降低至约32mb,这一优化效果远超简单的缓冲区缓存所带来的收益。

44、二),通过scm_rights直接传递相机image对象的dma-buf文件描述符,省去了客户端约23mb的内存拷贝操作(约节省42毫秒),使得跨进程传递大尺寸图像数据的开销接近于进程内直接操作的水平,这一效果在传统的数据拷贝方案中是无法实现的。

45、三),共享库构造函数自动启动监听线程的零代码侵入集成方案,使得本发明可以完全不改任何现有源代码的前提下集成到相机hal服务进程中,大大降低了跨平台移植和版本维护的成本,这一集成方式在现有相机hal架构中尚未见报道。