第19讲 icameraservice.aidl详解 -凯发k8手机登录

本讲是android camera native framework专题的第19讲,我们介绍icameraservice.aidl详解。

更多资源:

资源 描述
在线课程
知识星球 星球名称:深入浅出android camera 星球id: 17296815
wechat 极客笔记圈

icameraservice类图

icameraservice.aidl产生的java或c 代码,相关类图如下所示:

icameraservice类图

调用端获取icameraservice对象

java端获取icameraservice.stub.proxy对象

ibinder cameraservicebinder = servicemanager.getservice("media.camera");
icameraservice cameraservice = icameraservice.stub.asinterface(cameraservicebinder);

c 端获取bpcameraservice对象:

sp binder = sm->getservice(string16("media.camera"));
mcameraservice = interface_cast(binder);

其中(详细流程请参考视频讲解):

  • interface_cast会返回bpcameraservice的实例,
  • 从servicemanager获取到的binder是bncameraservice的实例。

相关代码: /frameworks/native/include/binder/iinterface.h

icameraservice.aidl接口详解

function description
int getnumberofcameras(int type); 获取当前平台支持多少颗camera
camerainfo getcamerainfo(int cameraid); 获取某颗camera的基本信息(facing和orientation),api2不使用该api
icamera connect(icameraclient client, int cameraid, string oppackagename, int clientuid, int clientpid, int targetsdkversion); open某颗camera,获取到icamera 实例,api2不使用该api
icameradeviceuser connectdevice(icameradevicecallbacks callbacks, string cameraid, string oppackagename, @nullable string featureid, int clientuid, int oomscoreoffset, int targetsdkversion); open某颗camera,获取到icameradeviceuser实例
camerastatus[] addlistener(icameraservicelistener listener); 注册listener,监听cameraservice状态变化
concurrentcameraidcombination[] getconcurrentcameraids(); 获取可以并发访问的camera id组合
boolean isconcurrentsessionconfigurationsupported( in cameraidandsessionconfiguration[] sessions, int targetsdkversion); 判断给定的并发sessionconfiguration是否支持
void removelistener(icameraservicelistener listener); 删除listener,取消监听cameraservice状态变化
camerametadatanative getcameracharacteristics(string cameraid, int targetsdkversion); 获取指定camera的静态camerametadata
vendortagdescriptor getcameravendortagdescriptor(); 获取vendortagdescriptor,在camerametadatanative解析vendor tag时需要用到
vendortagdescriptorcache getcameravendortagcache(); 获取vendortagdescriptorcache,其中存放不同vendorid的vendortagdescriptor,在camerametadatanative解析vendor tag时需要用到
string getlegacyparameters(int cameraid); android不支持hal1之后,该api不会被调用了
boolean supportscameraapi(string cameraid, int apiversion); 判断当前平台是否支持hal3
boolean ishiddenphysicalcamera(string cameraid); 判断指定的camera是否是隐藏的physical camera,针对隐藏的physical camera,camcorderprofile可能不可用,因此使用stream configuration map来获取最大录像size(mandatorystreamcombination)。
icamerainjectionsession injectcamera(string packagename, string internalcamid, string externalcamid, in icamerainjectioncallback camerainjectioncallback); 注入外部camera来取代内部camera,同一颗camera id可以在internal或external camera间切换。
void settorchmode(string cameraid, boolean enabled, ibinder clientbinder); 控制手电筒模式的on/off
void turnontorchwithstrengthlevel(string cameraid, int strengthlevel, ibinder clientbinder); 调整手电筒的强度
int gettorchstrengthlevel(string cameraid); 获取当前手电筒模式的强度。
oneway void notifysystemevent(int eventid, in int[] args); 向cameraservice通知一些系统事件(多用户切换、usb设备插拔事件),cameraserviceproxy调用
oneway void notifydisplayconfigurationchange(); 向cameraservice通知display窗口配置发生变化,cameraserviceproxy调用
oneway void notifydevicestatechange(long newstate); 向cameraservice通知设备状态发生变化(如发生折叠,前镜头/后镜头被挡住),cameraserviceproxy调用

camera课程

python教程

java教程

web教程

数据库教程

图形图像教程

办公软件教程

linux教程

计算机教程

大数据教程

开发工具教程

网站地图