赞
踩
// 获取 vendor tag
VendorTagDescriptor getCameraVendorTagDescriptor();
VendorTagDescriptorCache getCameraVendorTagCache();
// camera api 1 获取参数信息
String getLegacyParameters(intcameraId);
constintAPI_VERSION_1 = 1;
constintAPI_VERSION_2 = 2;
// 指定 id 支持的 API 版本
booleansupportsCameraApi(StringcameraId, intapiVersion);
// 指定 id 设置手电筒模式
voidsetTorchMode(StringcameraId, boolean enabled,
IBinder clientBinder);
// 服务端向系统打印系统消息
constintEVENT_NONE = 0;
constintEVENT_USER_SWITCHED = 1;
oneway voidnotifySystemEvent(int eventId,in int[] args);
}
_// 2.ICameraServiceListener.aidl_interfaceICameraServiceListener
{
constintSTATUS_NOT_PRESENT = 0;
constintSTATUS_PRESENT = 1;
constintSTATUS_ENUMERATING = 2;
constintSTATUS_NOT_AVAILABLE = -2;
constintSTATUS_UNKNOWN = -1;
// 相机设备状态变化事件
oneway voidonStatusChanged(int status,String cameraId);
constintTORCH_STATUS_NOT_AVAILABLE = 0;
constintTORCH_STATUS_AVAILABLE_OFF = 1;
constintTORCH_STATUS_AVAILABLE_ON = 2;
constintTORCH_STATUS_UNKNOWN = -1;
// 手电筒状态变化事件
oneway voidonTorchStatusChanged(int status,String cameraId);
}
七、 ICameraServiceProxy.aidl 文件
CameraServiceProxy
服务是在 Java
层注册的
interfaceICameraServiceProxy
{
// CameraService 向代理服务发送消息,通知用户更新
onewayvoidpingForUserUpdate();
constintCAMERA_STATE_OPEN = 0;
constintCAMERA_STATE_ACTIVE = 1;
constintCAMERA_STATE_IDLE = 2;
constintCAMERA_STATE_CLOSED = 3;
constintCAMERA_FACING_BACK = 0;
constintCAMERA_FACING_FRONT = 1;
constintCAMERA_FACING_EXTERNAL = 2;
// CameraService 向代理服务发送消息,通知相机设备状态更新
onewayvoidnotifyCameraState(String cameraId, int facing,
intnewCameraState, String clientName);
}
八、 ICamera 相关
Camera API1 才会使用到,分为 ICamera.aidl, ICameraClient.aidl
它们的代码是手动实现的,参考:CameraClient.h/cpp, Camera.h/cpp
九、ICameraDevice 相关
Camera API2 才会使用到,分为客户端向服务端的请求 ICameraDeviceUser.aidl 和服务端发给客户端的回调 ICameraDeviceCallbacks.aidl 。
表示相机设备具备的能力,能够提供的函数;这两个 AIDL 是在 CameraDeviceClient 中实现对应功能的
// 1.ICameraDeviceUser.aidl interfaceICameraDeviceUser
{
voiddisconnect();
constintNO_IN_FLIGHT_REPEATING_FRAMES = -1;
// 向设备提交捕获请求
SubmitInfo submitRequest(inCaptureRequest request, boolean streaming);
SubmitInfo submitRequestList(inCaptureRequest[] requestList,
boolean streaming);
// 取消置顶 id 的重复请求,并返回上次请求的帧 id
longcancelRequest(intrequestId);
constintNORMAL_MODE = 0;
constintCONSTRAINED_HIGH_SPEED_MODE = 1;
constintVENDOR_MODE_START = 0x8000;
// 在流处理前执行配置请求
voidbeginConfigure();
// 根据指定输出配置,创建流
intcreateStream(inOutputConfiguration outputConfiguration);
voidendConfigure(intoperatingMode);
voiddeleteStream(intstreamId);
// 创建输入流,返回流 id
intcreateInputStream(int width, int height, int format);
// 返回输入流的 Surface
Surface getInputSurface();
// Keep in sync withpublic API in
//frameworks/base/core/java/android/hardware/camera2/CameraDevice.java
constintTEMPLATE_PREVIEW = 1;
constintTEMPLATE_STILL_CAPTURE = 2;
constintTEMPLATE_RECORD = 3;
constintTEMPLATE_VIDEO_SNAPSHOT = 4;
constintTEMPLATE_ZERO_SHUTTER_LAG = 5;
constintTEMPLATE_MANUAL = 6;
// 根据模板创建默认请求,返回相机参数信息
CameraMetadataNative createDefaultRequest(inttemplateId);
// 获取相机参数信息
CameraMetadataNative getCameraInfo();
voidwaitUntilIdle();
longflush();
voidprepare(intstreamId);
voidtearDown(intstreamId);
voidprepare2(int maxCount,intstreamId);
voidfinalizeOutputConfigurations(int streamId,
in OutputConfigurationoutputConfiguration);
}
_// 2.ICameraDeviceCallbacks.aidl_interfaceICameraDeviceCallbacks
{
…
oneway voidonDeviceError(interrorCode,
in CaptureResultExtrasresultExtras);
oneway voidonDeviceIdle();
oneway voidonCaptureStarted(inCaptureResultExtras resultExtras,
longtimestamp);
oneway voidonResultReceived(inCameraMetadataNative result,
inCaptureResultExtras resultExtras);
oneway voidonPrepared(intstreamId);
// 重复请求引起的错误回调
oneway voidonRepeatingRequestError(in longlastFrameNumber,
in intrepeatingRequestId);
oneway voidonRequestQueueEmpty();
}
十、Services 目录下的文件介绍
frameworks/av/services/camera/libcameraservice
AOSP 中这个目录下是 87 个文件,而 Qcom 的基线中增加了 27 个文件,分别为 api1/qticlient2 目录下的 25 个文件,以及 QTICamera2Client.cpp, QTICamera2Client.h 两个文件。
.
├—— Android.mk
├—— api1
│ ├—— client2
│ └—— qticlient2
├—— api2
├—— CameraFlashlight.cpp
├—— CameraFlashlight.h
├—— CameraService.cpp
├—— CameraService.h
├—— common
├—— device1
├—— device3
├—— gui
├—— MODULE_LICENSE_APACHE2
├—— NOTICE
├—— tests
└—— utils
从目录结构上可以看出,API1/2
和 HAL1/3
就是在这一层体现的。
十一、 API1/API2
APP Java 客户端调用服务端方法时,Camera API1/2 接口对应功能都是在 CameraService 中实现的,而这里的 API1/2 目录对应的就是对上层不同版本接口的处理
api1
├—— Camera2Client.cpp
├—— Camera2Client.h
├—— CameraClient.cpp
├—— CameraClient.h
├—— client2
│ ├—— CallbackProcessor.cpp
│ ├—— CallbackProcessor.h
│ ├—— Camera2Heap.h
│ ├—— CaptureSequencer.cpp
│ ├—— CaptureSequencer.h
│ ├—— FrameProcessor.cpp
│ ├—— FrameProcessor.h
│ ├—— JpegCompressor.cpp
│ ├—— JpegCompressor.h
│ ├—— JpegProcessor.cpp
│ ├—— JpegProcessor.h
│ ├—— Parameters.cpp
│ ├—— Parameters.h
│ ├—— StreamingProcessor.cpp
│ ├—— StreamingProcessor.h
│ ├—— ZslProcessor.cpp
│ └—— ZslProcessor.h
├—— QTICamera2Client.cpp
├—— QTICamera2Client.h
└—— qticlient2
├—— CallbackProcessor.cpp
├—— CallbackProcessor.h
├—— Camera2Heap.h
├—— CaptureSequencer.cpp
├—— CaptureSequencer.h
├—— FrameProcessor.cpp
├—— FrameProcessor.h
├—— JpegCompressor.cpp
├—— JpegCompressor.h
├—— JpegProcessor.cpp
├—— JpegProcessor.h
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
其实要轻松掌握很简单,要点就两个:
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
下面资料部分截图,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。
附送高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、近期面试跳槽、自身职业规划迷茫的朋友们。
Android核心高级技术PDF资料,BAT大厂面试真题解析;
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
roid核心高级技术PDF资料,BAT大厂面试真题解析;**
[外链图片转存中…(img-oMPxtfRa-1712305591444)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。