// 获取 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工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
阿里p7android高级教程
下面资料部分截图,诚意满满:特别适合有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、安卓逆向、云计算
发表评论