Camera 学习概览,2024年最新vivoandroid面试

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文


位于frameworks/av/services/camera/libcameraservice/CameraService.cpp下的相机服务是与 HAL 进行互动的实际代码。

HAL


硬件抽象层定义了由相机服务调用、且您必须实现以确保相机硬件正常运行的标准接口。

3.HAL 层实现

=====================================================================

HAL 位于相机驱动程序和更高级别的 Android 框架之间,它定义您必须实现的接口,以便应用可以正确地操作相机硬件。从 Android 8.0 开始,相机 HAL 接口是 Project Treble 的一部分,相应的 HIDL 接口在 hardware/interfaces/camera 中定义。

典型的绑定式 HAL 必须实现以下 HIDL 接口:

参考 HIDL 实现适用于 CameraProvider.cppCameraDevice.cpp 和 CameraDeviceSession.cpp。该实现封装了仍在使用旧版 API 的旧 HAL。从 Android 8.0 开始,相机 HAL 实现必须使用 HIDL API;不支持使用旧版接口。

要详细了解 Treble 和 HAL 开发,请参阅 Treble 资源

4.旧版HAL 组件架构及实现

===========================================================================

此部分介绍了旧版 HAL 组件的架构以及如何实现 HAL。搭载 Android 8.0 或更高版本的设备上的相机 HAL 实现必须改用 HIDL API(如上所述)。

旧版HAL 框架


下列图表和列表说明了旧版相机 HAL 组件:

图 1. 相机架构

app 框架


应用代码位于应用框架级别,它利用 android.hardware.Camera API 与相机硬件进行交互。在内部,此代码会调用相应的 JNI 粘合类,以访问与相机互动的原生代码。

JNI


与 android.hardware.Camera 关联的 JNI 代码位于 frameworks/base/core/jni/android_hardware_Camera.cpp 中。此代码会调用较低级别的原生代码以获取对实体相机的访问权限,并返回用于在框架级别创建 android.hardware.Camera 对象的数据。

Native 框架


在 frameworks/av/camera/Camera.cpp 中定义的原生框架可提供相当于 android.hardware.Camera 类的原生类。此类会调用 IPC binder 代理,以获取对相机服务的访问权限。

Binder IPC 代理


PC binder 代理用于促进跨越进程边界的通信。调用相机服务的 3 个相机 binder 类位于 frameworks/av/camera 目录中。ICameraService 是相机服务的接口,ICamera 是已打开的特定相机设备的接口,ICameraClient 是指回应用框架的设备接口。

CameraService


位于 frameworks/av/services/camera/libcameraservice/CameraService.cpp下的相机服务是与 HAL 进行互动的实际代码。

HAL


硬件抽象层定义了由相机服务调用、且您必须实现以确保相机硬件正常运行的标准接口。

kernel 驱动


相机的驱动程序可与实际相机硬件以及您的 HAL 实现进行互动。相机和驱动程序必须支持 YV12 和 NV21 图像格式,以便在显示和视频录制时支持预览相机图像。

旧版HAL 实现


HAL 位于相机驱动程序和更高级别的 Android 框架之间,它定义您必须实现的接口,以便应用可以正确地操作相机硬件。HAL 接口在 hardware/libhardware/include/hardware/camera.h 和 hardware/libhardware/include/hardware/camera_common.h 标头文件中定义。

camera_common.h 定义 camera_module;这是一个标准结构,可用于获取有关相机的一般信息,例如相机 ID 和所有相机通用的属性(例如,摄像头是前置还是后置)。

camera.h 包含与 android.hardware.Camera 对应的代码。此标头文件会声明一个 camera_device 结构,该结构又反过来包含一个带函数指针(可实现 HAL 接口)的 camera_device_ops 结构。有关开发者可以设置的相机参数的文档,请参阅 frameworks/av/include/camera/CameraParameters.h。通过 HAL 中的 int (*set_parameters)(struct camera_device *, const char *parms) 来设置这些参数以及指向的函数。

有关 HAL 实现的示例,请参阅 hardware/ti/omap4xxx/camera 中的 Galaxy Nexus HAL 实现。

配置 Camera 共享库


设置 Android 编译系统,以将 HAL 实现正确打包到共享库中,并通过创建 Android.mk 文件将其复制到相应位置:

1.创建一个 device/<company_name>/<device_name>/camera 目录以包含您库的源文件。

2.创建一个 Android.mk 文件来编译共享库。确保 Makefile 包含以下行:


LOCAL_MODULE := camera.<device_name>

LOCAL_MODULE_RELATIVE_PATH := hw



您的库必须命名为camera.<device_name>(自动附加 .so),以便 Android 可以正确加载库。例如,请参阅 hardware/ti/omap4xxx/Android.mk 中的 Galaxy Nexus 相机的 Makefile。

3.使用您设备的 Makefile 复制frameworks/native/data/etc 目录中的必要功能 XML 文件,以指定您的设备具有相机功能。例如,要指定您的设备具有相机闪光灯并可自动对焦,请在您设备的 <device>/<company_name>/<device_name>/device.mk Makefile中添加以下行:


PRODUCT_COPY_FILES := \ ...



PRODUCT_COPY_FILES += \

frameworks/native/data/etc/android.hardware.camera.flash-autofocus.xml:system/etc/permissions/android.hardware.camera.flash-autofocus.xml \



尾声

在我的博客上很多朋友都在给我留言,需要一些系统的面试高频题目。之前说过我的复习范围无非是个人技术博客还有整理的笔记,考虑到笔记是手写版不利于保存,所以打算重新整理并放到网上,时间原因这里先列出面试问题,题解详见:


展示学习笔记

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-elxy5uJI-1713469549377)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值