先解释一些概念,然后带着思考去解读
1.CameraService。
2.Camera
3.BnCameraClient
4.BnCamera
5.Client
不得不说的是android对于binder的使用,真是出神入化。废话不说,明白了以上对象后,对于camera框架的理解就会上一个档次。网上很多人,都是抄来抄去,真正去看代码的时候,发现纸上得来终觉浅,觉知此事要躬行。
下面依次解释:
1.CameraService
Camera的服务端,是一个BnCameraService,同时还是一个BinderService。代码就不贴了,自行看吧。看到Bn两个字母,大家的第一印象肯定是onTransact接口。而事实也是如此:
class BnCameraService: public BnInterface<ICameraService>
{
public:
virtual status_t onTransact( uint32_t code,
const Parcel& data,
Parcel* reply,
uint32_t flags = 0);
};
2.Camera
继承于BnCameraClient.大家又看到一个Bn。很是纳闷,那么是不是也是个服务端呢。答案也是肯定的。
class Camera : public BnCameraClient, public IBinder::DeathRecipient
class BnCameraClient: public BnInterface<ICameraClient>
{
public:
virtual status_t onTransact( uint32_t code,
const Parcel& data,
Parcel* reply,
uint32_t flags = 0);
};
既然都是服务端,那么客户端在哪里呢。下面继续。
3. BnCameraClient
这个不说了,上面已经讲了,是个服务端
4.BnCamera
同样是服务端:
class BnCamera: public BnInterface<ICamera>
{
public:
virtual status_t onTransact( uint32_t code,
const Parcel& data,
Parcel* reply,
uint32_t flags = 0);
};
5.Client
同样是服务端:
class Client : public BnCamera
那么客户端在哪里?为什么全是服务端?
其实这些都是服务端,同时又是客户端。Binder是一个单向通信的东西,要想实现双向通信,那么自己也必须是一个服务端。这就是为什么全是服务端了。网上介绍说CameraService是一个sevice,Camera这个就是一个client,这是不对的。
这两个都是service,又是client。这样才能支持双向通信。
使用流程如下:首先要new一个Camera对象,这个对象实际上是个Manager,负责对camera进行一些管理。
然后通过connect方法,获得到一个ICamera的对象,这个对象在服务端就是Client。于此同时,由于自己是一个BnCameraClient,注意是Bn,可以通过binder传过去,那么传过去之后是什么呢。是ICameraClient.这样服务端和客户端都得到了一个对方的句柄,从而建立了双向通信的渠道。下面这个图说明了这个思想:
- 大小: 12.7 KB
分享到:
相关推荐
### 高通平台Camera框架分析 #### 一、Camera子系统的层次结构与系统结构 **Camera子系统**作为Android系统中的关键组成部分,不仅负责视频数据的获取与存储,还涉及图像处理、视频编解码等多项任务。从整体上看,...
Camera 框架的简介 Camera 框架是 Android 系统中的一个重要组件,它提供了拍照和录制视频的功能。下面是 Camera 框架的详细介绍: Camera 概述 Android 的 Camera 包含取景器(viewfinder)和拍照的功能。目前 ...
### Android_Camera框架详解 #### 一、框架概览 Android_Camera框架是Android系统中负责处理摄像头功能的核心组件,它不仅支持预览(viewfinder),还能够实现拍照等基本操作。框架设计精巧,分为客户端与服务器两...
android_Camera框架分析
camera框架流程.drawio
高通平台camera层代码初始化的框架流程图,对于ISP工程师等了解camera的运行流程有帮助
Android 多媒体开发 Camera 框架 Android 多媒体开发中的 Camera 框架是一种 client/service 架构,主要包括两个进程:client 进程和 service 进程。client 进程主要包括 Java 代码和 native c/c++ 代码,而 ...
Android Camera 框架分析 Android 的 Camera 系统是一个复杂的系统,包括取景(preview)和拍摄照片(take picture)的功能。 Camera 框架分析可以分为两个部分:Camera 构架分析和 Camera 工作流程概述。 一、...
Android Camera框架是Android系统中用于处理相机功能的核心组件。它的设计基于客户端-服务器模型,利用Android的Binder机制实现进程间通信。以下是对Android Camera框架的详细分析: 一、Camera构架分析 1. **...
Android Camera框架是一个复杂而关键的组件,它负责设备的摄影和预览功能。该框架基于Android的进程间通信(IPC)机制Binder构建,将Camera服务和客户端应用分隔在两个不同的进程中,确保了系统的稳定性和安全性。...
### Android Camera框架详解 #### 一、总体架构与工作原理 Android Camera框架作为一个重要的多媒体组件,在Android设备上扮演着至关重要的角色。它不仅为开发者提供了一套完整的API用于摄像头功能的开发,还确保...
### Android 最新Camera框架 #### 一、Android最新Camera整体框架概述 在深入探讨之前,我们需要明确Android相机系统的核心组成部分及其交互方式。Android相机系统主要包括三个关键进程:应用(App)进程、摄像头...
Android Camera框架是Android系统中用于处理相机功能的核心组件,其设计包括客户端和服务器两大部分,基于Android的Binder机制实现进程间通信。下面是关于Android Camera框架的详细分析: 一、Camera架构 1. **库...
Android Camera框架分析 Android相机框架是一个复杂而精细的系统,它允许应用层的Java App与硬件驱动进行交互,实现拍照、录像等相机功能。整个框架分为多个层次,从上至下依次是: 1. **应用层 (Java App)**:这...
高通camera chi-cdk feature2框架介绍 高通Camera Chi-CDK Feature2框架是一个专门为高通camera设计的框架,旨在提高camera应用程序的性能和效率。在本文中,我们将详细介绍Feature2框架的架构、组件、工作流程和...
理解Android框架下Camera的设计与实现,对于开发高效且用户体验良好的拍照应用至关重要。 首先,Android Camera API分为两个主要版本:Camera1(旧版API)和Camera2(新版API)。Camera1是早期Android版本中的接口...
"js camera _框架 服务"这部分描述可能意味着该框架包含JavaScript(js)实现的摄像头功能,并且它与服务相关,可能是为了在Windows服务环境下处理图像或者视频流。 描述中提到的"windows 服务框架 设计 代码",...
专栏主要记录Camera开发相关内容,包含Camera、Camera2、CameraX以及USB(UVC)摄像头。 和大家一起快速入门Camera开发工作,为后期的视频编解码、拍照、录像、推流等打好基础工作。
【Android Camera系统移植初探】 在Android系统移植过程中,Camera模块的移植是一项关键任务,因为每个设备的摄像头硬件可能都有所不同。以下是在进行Camera系统移植时需要关注的主要工作内容: 1. **硬件驱动适配...