当前位置:   article > 正文

字节跳动nlp算法工程师面试问题及答案,Camera Framework 架构了解下,关于网络优化你必须要知道的重点

字节跳动nlp算法工程师面试问题及答案,Camera Framework 架构了解下,关于网络优化你必须要知道的重点

// 获取 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移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

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

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

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

其实要轻松掌握很简单,要点就两个:

  1. 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
  2. 多练。 (视频优势是互动感强,容易集中注意力)

你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

阿里P7Android高级教程

下面资料部分截图,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。

附送高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、近期面试跳槽、自身职业规划迷茫的朋友们。

Android核心高级技术PDF资料,BAT大厂面试真题解析;

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

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)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/419757
推荐阅读
  

闽ICP备14008679号