Android相机性能提高50%

文章目录

  • 应用举例(可以不看这一part,直接跳过看具体怎么做):
    • Snapchat 通过 Camera2 Extensions API 将新相机功能的集成速度提高了 50%**
    • Camera2 扩展 API 可以访问高级功能
    • 更多设备上的更多机会
  • 正文:开始使用
    • 扩展架构
    • 测试相机设备的 Camera2 Extensions API 兼容性
    • 使用 Camera2 Extensions API 创建 CameraExtensionSession
    • 更多api

应用举例(可以不看这一part,直接跳过看具体怎么做):

Snapchat 通过 Camera2 Extensions API 将新相机功能的集成速度提高了 50%**

在这里插入图片描述

Camera2 扩展 API 可以访问高级功能

Snapchat 团队希望针对不断扩大的 Android 设备选择来优化该应用程序,因为他们知道许多 OEM 厂商都通过各自的相机技术来区分其设备。由于 Snapchat 是一款主要与设备相机配合使用的视觉应用程序,因此团队优化了该应用程序,以充分利用每个设备的独特硬件。

“我们希望利用每个 OEM 的软件来增强 Android 上的 Snapchat 体验,”Snapchat 的软件工程师 Ye Tian 说道。“这将有助于该应用程序获得与设备本机相机提供的质量相当的更高质量的快照。”
在这里插入图片描述

最初的目标是提高应用程序的弱光功能,但最终却带来了更多的结果。Snapchat 团队致力于寻找新的方法来提高应用程序的相机功能,实现夜间模式、人像模式、脸部修饰、点击对焦、变焦等功能。

“我们与 Google Pixel 的合作为与其他 OEM 厂商的合作铺平了道路,只需很少的代码更改即可在其设备中实现夜间模式和超级夜间模式,”Ye 说道。“Camera2 扩展 API 灵活且广泛。Snapchat 现在可以使用它按需构建成熟的应用程序,而不会对性能和稳定性产生负面影响。”

通过 Camera2 Extension API 的实现使 Snapchat 开发人员可以轻松地将更多相机功能添加到应用程序中。通过使用 Android 相机 API 提供的扩展,Snapchat 集成新相机功能的速度比过去使用的典型行业标准方法快了 50%。

在这里插入图片描述

更多设备上的更多机会

Snapchat 团队很高兴使用 Camera2 Extensions API 为其用户提供更具凝聚力的体验。得益于 API 中提供的扩展,开发人员可以轻松地在使用 Android 平台的一系列制造商设备上改进应用程序的相机,而且速度比以前快得多。

“我喜欢Android平台的多样性,并利用每个手机制造商设备的独特优势,”叶说。“它帮助我们将他们的尖端创新引入 Snapchat 应用程序,让 Snapchat 用户更好地捕捉他们的生活瞬间。”

Snapchat 团队期待与更多 OEM 厂商合作,利用 Camera2 Extensions API 进一步提高应用程序跨设备的处理能力。他们还期待使用新的 API 来提高应用程序的向后兼容性,这将使更多用户从扩展中受益。

我建议使用 Camera2 扩展 API。它提供了广泛的功能和稳定的性能,以提高开发人员交付功能的速度。”叶说。

正文:开始使用

Camera2 提供了一个 Extensions API,用于访问设备制造商在各种 Android 设备上实现的扩展。如需查看支持的扩展模式列表,请参阅相机扩展。

如需查看支持扩展的设备列表,请参阅支持的设备。

扩展架构

下图显示了相机扩展程序架构。
请添加图片描述

Camera2 应用可以通过 Camera2 API 使用扩展。Camera2 API 提供了查询可用扩展、配置扩展相机会话以及与相机扩展 OEM 库通信的方法。这样,您的应用就可以使用夜间、HDR、自动、焦外成像或脸部照片修复等扩展程序。

测试相机设备的 Camera2 Extensions API 兼容性

以下代码段会检查设备是否支持 Camera2 Extensions API。并非所有设备都支持扩展,或者设备可能支持一部分扩展。该代码段会返回支持相机扩展的兼容相机 ID 的列表。

private fun getExtensionCameraIds(cameraManager: CameraManager): List =if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {cameraManager.cameraIdList.filter { cameraId ->val characteristics = cameraManager.getCameraCharacteristics(cameraId)val extensionCharacteristics =cameraManager.getCameraExtensionCharacteristics(cameraId)val capabilities =characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES)extensionCharacteristics.supportedExtensions.isNotEmpty() &&capabilities?.contains(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE) ?: false}} else emptyList()

使用 Camera2 Extensions API 创建 CameraExtensionSession

与兼容的设备搭配使用时,Camera2 Extensions API 可让您访问某些相机扩展。以下代码段举例说明了如何创建 CameraExtensionSession,以便为现有 Camera2 应用使用夜间拍摄模式。

private val captureCallbacks = object : CameraExtensionSession.ExtensionCaptureCallback() {// Implement Capture Callbacks
}
private val extensionSessionStateCallback = object : CameraExtensionSession.StateCallback() {override fun onConfigured(session: CameraExtensionSession) {cameraExtensionSession = sessiontry {val captureRequest =cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).apply {addTarget(previewSurface)}.build()session.setRepeatingRequest(captureRequest,Dispatchers.IO.asExecutor(),captureCallbacks)} catch (e: CameraAccessException) {Snackbar.make(previewView,"Failed to preview capture request",Snackbar.LENGTH_SHORT).show()requireActivity().finish()}}override fun onClosed(session: CameraExtensionSession) {super.onClosed(session)cameraDevice.close()}override fun onConfigureFailed(session: CameraExtensionSession) {Snackbar.make(previewView,"Failed to start camera extension preview",Snackbar.LENGTH_SHORT).show()requireActivity().finish()}
}private fun startExtensionSession() {val outputConfig = arrayListOf(OutputConfiguration(stillImageReader.surface),OutputConfiguration(previewSurface))val extensionConfiguration = ExtensionSessionConfiguration(CameraExtensionCharacteristics.EXTENSION_NIGHT,outputConfig,Dispatchers.IO.asExecutor(),extensionSessionStateCallback)cameraDevice.createExtensionSession(extensionConfiguration)
}

更多api

按照以上操作,一个基本的获取能力就完成了,如果想要查看更多api。参考 Camera2 Extensions API 示例。

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

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

相关文章

hdlbits系列verilog解答(Exams/m2014 q4h)-44

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路: 二、verilog源码 module top_module (input in,output out);assign out in;endmodule三、仿真结果 转载请注明出处!

Vatee万腾科技新高峰:Vatee前瞻性创新的数字化之力

Vatee万腾科技,一家以前瞻性创新为核心驱动力的数字化引领者,正迈向新的高峰。其在科技领域的卓越表现不仅体现在技术实力上,更展现在对未来的深刻洞察和独到思考上。 在Vatee的科技舞台上,前瞻性创新如一道独特的光芒&#xff0c…

【Linux】yum -- 软件包管理器

目录 一、Linux中是如何安装软件的 1.1 安装的方法 1.2 安装的本质(基本理解) 二、软件包 2.1 软件包的概念 2.2 为什么要有软件包 三、yum--软件包管理器 3.1 yum的概念 3.2 yum的使用 3.2.1 搜索一个软件 3.2.2 安装一个软件 3.2.3 卸载一个软件 3.3 yum源更新 …

Node.js入门指南(三)

目录 Node.js 模块化 介绍 模块暴露数据 导入模块 导入模块的基本流程 CommonJS 规范 包管理工具 介绍 npm cnpm yarn nvm的使用 我们上一篇文章介绍了Node.js中的http模块,这篇文章主要介绍Node.js的模块化,包管理工具以及nvm的使用。 Node…

Joint Cross-Modal and Unimodal Features for RGB-D Salient Object Detection

提出的模型 the outputs H i m _i^m im​ from the unimodal RGB or depth branch in MFFM FFM means ‘Feature Fusion Module’ 作者未提供代码

优秀软件设计特征与原则

1.摘要 一款软件产品好不好用, 除了拥有丰富的功能和人性化的界面设计之外, 还有其深厚的底层基础, 而设计模式和算法是构建这个底层基础的基石。好的设计模式能够让产品开发快速迭代且稳定可靠, 迅速抢占市场先机;而好的算法能够让产品具有核心价值, 例如字节跳动…

GPS 定位信息获取(北斗星通 GPS)

GPS 定位信息获取(1) 首先回顾北斗星通 GPS 数据获取(1)~(5) gps_pub.cpp 将接收到的串口数据转化为GPS的经纬度信息gps_path.cpp 将经纬度信息转化为全局坐标系下的XY值,以第一个GPS经纬度为…

【初始前后端交互+原生Ajax+Fetch+axios+同源策略+解决跨域】

初始前后端交互原生AjaxFetchaxios同源策略解决跨域 1 初识前后端交互2 原生Ajax2.1 Ajax基础2.2 Ajax案例2.3 ajax请求方式 3 Fetch3.1 fetch基础3.2 fetch案例 4 axios4.1 axios基础4.2 axios使用4.2.1 axios拦截器4.2.2 axios中断器 5 同源策略6 解决跨域6.1 jsonp6.2 其他技…

搭配:基于OpenCV的边缘检测实战

引言 计算机中的目标检测与人类识别物体的方式相似。作为人类,我们可以分辨出狗的形象,因为狗的特征是独特的。尾巴、形状、鼻子、舌头等特征综合在一起,帮助我们把狗和牛区分开来。 同样,计算机能够通过检测与估计物体的结构和性…

Linux 常见命令篇

history 获取执行的指令记录 语法格式: history [参数] 常用参数: -a 写入命令记录 -c 清空命令记录 -d 删除指定序号的命令记录 -n 读取命令记录 -r 读取命令记录到缓冲区 -s 将指定的命令添加到缓冲区 -w 将缓冲区信息写入到历史文件 history#获取最近的三条…

C#关键字、特性基础及扩展合集(持续更新)

一、基础 Ⅰ 关键字 1、record record(记录),编译器会在后台创建一个类。支持类似于结构的值定义,但被实现为一个类,方便创建不可变类型,成员在初始化后不能再被改变 (C#9新增) …

Hologres性能优化指南1:行存,列存,行列共存

在Hologres中支持行存、列存和行列共存三种存储格式&#xff0c;不同的存储格式适用于不同的场景。 在建表时通过设置orientation属性指定表的存储格式&#xff1a; BEGIN; CREATE TABLE <table_name> (...); call set_table_property(<table_name>, orientation,…

Centos上安装Docker和DockerCompose

安装Docker Docker可以运行在MAC&#xff0c;Windows&#xff0c;CtenOS,UBUNTU等操作系统上。目前主流的版本有Docker CE和Docker EE&#xff0c;CE是免费的开源Docker版本&#xff0c;适用于开发人员和小型团队&#xff0c;EE是适用于企业的容器化解决方案。它基于Docker CE…

2023-11-24 LeetCode每日一题(统计和小于目标的下标对数目)

2023-11-24每日一题 一、题目编号 2824. 统计和小于目标的下标对数目二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 target &#xff0c;请你返回满足 0 < i < j < n 且 nums[i] nums[j] < targe…

开源的文本编辑器Notepad++ 8.6.0版本在Windows系统上的下载与安装配置

目录 前言一、Notepad 安装二、使用配置总结 前言 Notepad 是一款简单而强大的文本编辑工具&#xff0c;通常用于快速创建和编辑文本文件。以下是 Notepad 工具的详细介绍。注&#xff1a;文末附有下载链接&#xff01; 主要特点&#xff1a; ——简洁易用&#xff1a; Note…

蓝桥杯物联网竞赛_STM32L071_4_按键控制

原理图&#xff1a; 当按键S1按下PC14接GND&#xff0c;为低电平 CubMX配置: Keil配置&#xff1a; main函数&#xff1a; while (1){/* USER CODE END WHILE */OLED_ShowString(32, 0, "hello", 16);if(Function_KEY_S1Check() 1){ OLED_ShowString(16, 2, &quo…

FANUC机器人到达某个点位时,为什么不显示@符号?

FANUC机器人到达某个点位时,为什么不显示@符号? 该功能由变量$MNDSP_POSCF = 0(不显示)/1(显示)/2(光标移动该行显示) 控制,该变量设置为不同的值,则启用对应的功能。 如下图所示,为该变量设置不同的值时的对比, 其他常用的系统变量可参考以下内容: 在R寄存器指定速度…

什么是AWS CodeWhisperer?

AWS CodeWhisperer https://aws.amazon.com/cn/codewhisperer/ CodeWhisperer 经过数十亿行代码的训练&#xff0c;可以根据您的评论和现有代码实时生成从代码片段到全函数的代码建议。 ✔ 为您量身定制的实时 AI 代码生成器 ✔ 支持热门编程语言和 IDE ✔ 针对 AWS 服务的优…

java设计模式学习之【工厂模式】

文章目录 引言工厂方法模式简介定义与用途&#xff1a;实现方式&#xff1a; 使用场景优势与劣势工厂模式在spring中的应用电费计算示例&#xff08;简单工厂模式&#xff09;改善为方法工厂模式代码地址 引言 在软件开发的世界中&#xff0c;对象的创建可能是一个复杂且重复的…

网安融合新进展:Check Point+七云网络联合研发,加固大型企业边缘、分支侧安全

AI 爆火、万物互联&#xff0c;底层需要更灵活的网络设施提供支撑。据国际分析机构 Gartner 预测&#xff0c;到 2024 年&#xff0c;SD-WAN&#xff08;软件定义的广域网&#xff09;使用率将达到 60%。不过边缘和终端兴起&#xff0c;未经过数据中心的流量也在成为新的安全风…