自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(429)
  • 收藏
  • 关注

原创 AE、Lottie、JSON简单介绍

Adobe After Effects 是一款由 Adobe Systems 公司推出的视频后期制作软件。它可以用于制作视频特效、动画、视频合成等。该软件支持各种格式的视频和音频文件,并具有丰富的特效和工具,可以帮助用户创建高质量的视频作品。Adobe After Effects是市面上最为常见和受欢迎的视频特效软件之一,而且非常适合专业的影视后期制作。它可以创建高质量的视觉特效和动图,以及电影、电视节目、电视动画和网页视频等方面进行制作。

2024-07-04 15:16:32 726

原创 C++11/14/17/20新特性

其它容器中,std::forward_list中的emplace_after、emplace_front函数,std::map/std::multimap中的emplace、emplace_hint函数,std::set/std::multiset中的emplace、emplace_hint,std::stack中的emplace函数,等emplace相似函数操作也均是构造而不是拷贝元素。在这个示例中,我们创建了一个std::reference_wrapper对象ref_a,它包含对整数a的引用。

2024-05-13 19:35:40 932

原创 JAVA JNI

JNI全称为Java Native Interface. 它可以简单理解为是本地方法的接口,即允许在Java虚拟机里面的Java代码可以和如C,C++等其他底层语言进行交互(即可互相调用)。一般情况下,当你无法用纯Java来实现需求的时候,就需要使用JNI来用底层语言编写的本地方法来满足这些该需求。例如以下的几种场景可能需要用到JNI:Java库无法提供基于平台系统相关特性的功能,如平台特有的功能或接口等。已经用其他语言写好的库,需要用Java调用,而不想重现编码,而想直接复用它们。

2024-05-13 19:30:23 774

原创 alsa&tinyalsa

ALSA(Advanced Linux Sound Architecture)是一个开源项目,涵盖了用户空间和内核空间对音频设备的操作接口,通过应用层使用alsalib可以实现对音频设备的控制TinyAlsa是android推出的一个精简的ALSA库,当然alsa-driver这块没有改动alsa包含:1、内核 alsa-driver 2.用户空间 alsa-lib(android使用的TinyAlsa)

2024-05-13 19:25:48 838

原创 Linux进程间通信_socket(套接字)

socket是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。传输层实现端到端的通信,因此,每一个传输层连接有两个端点。那么,传输层连接的端点是什么呢?不是主机,不是主机的IP地址,不是应用进程,也不是传输层的协议端口。传输层连接的端点叫做套接字(socket)。根据RFC793的定义:端口号拼接到IP地址就构成了套接字。

2024-05-13 19:14:19 1018

原创 Android13 wificond getScanResults流程分析

发送消息部分,与请求开始扫描的调用差不多,都会走到NetlinkManager::SendMessageAndGetResponses()中去,后者负责通过继续调用,最终发送nl80211消息到内核,这里就不赘述了;

2024-05-13 19:11:49 216

原创 Android13 wificond scan流程分析

可见,ScanUtils::Scan大部分逻辑还是参数的处理、封装,最后整合到名为trigger_scan的一个NL80211Packet结构体中,并通过netlink_manager_->SendMessageAndGetAckOrError发送出去;隐藏网络扫描数量有限制,最大为max_num_scan_ssids(通过NL80211_ATTR_MAX_NUM_SCAN_SSIDS属性获取)处理完数据后,将参数传入scan_utils_->Scan的函数调用中,继续后面的逻辑;

2024-05-13 19:10:20 217

原创 Android wificond

wificond是Android 8.0 开始增加的组件,wifi的scan、scan_results是通过wificond去跟kernel通信,wificond是一个独立的进程,代码位于system/connectivity/wificond中,wificond进程通过标准的nl80211命令与Wi-Fi驱动程序进行通信。

2024-05-13 19:07:51 731

原创 Android13 AudioHAL Device::setParameters流程分析

6、reset_a2dp_enc_config_params:重置a2dp enc配置参数。7、reset_a2dp_dec_config_params:重置a2dp dec配置参数。4、audio_extn_a2dp_set_parameters:a2dp设置参数。2、audio_extn_hfp_set_parameters:hfp设置参数。6、audio_extn_usb_remove_device:usb移除设备。3、audio_extn_ma_set_parameters:ma设置参数。

2024-05-12 21:30:32 997

原创 Android AudioHAL

AudioHAL的上层为AudioFlinger,AudioHAL下层为TiniAlsa(Android下一个简约的Alsa版本)。AudioHAL分为两部分:一部分为各种音频设备,每种音频设备由一个独立的库文件实现:如audio.a2dp.default.so(管理蓝牙a2dp音频),audio.usb.default.so(管理usb外接的音频),audio.primary.default.so(管理设备上的大部分音频)。

2024-05-12 21:20:21 916

原创 Android HWC

HWC(hwcomposer)是Android中进行窗口(Layer)合成和显示的HAL层模块,其实现是特定于设备的,而且通常由显示设备制造商 (OEM)完成,为SurfaceFlinger服务提供硬件支持。SurfaceFlinger可以使用OpenGL ES合成Layer,这需要占用并消耗GPU资源。大多数GPU都没有针对图层合成进行优化,当SurfaceFlinger通过GPU合成图层时,应用程序无法使用GPU进行自己的渲染。而HWC通过硬件设备进行图层合成,可以减轻GPU的合成压力。

2024-05-12 21:17:13 913

原创 Android 易混概念解析

当客户端调用服务端的某个方法时,实际上是通过Bp类创建一个Binder对象,并将该对象发送到服务端,服务端根据该对象的标识符识别客户端的请求,并处理相应的业务逻辑。Message是承载任务的载体,在Handler机制中贯穿始终,Handler则是对外公开的API,负责发送Message和处理任务的回调,是Message的生产者,Message负责管理待处理Message的入队和出队,是Messae的容器,Looper负责轮循MessageQueue,保持线程持续运行任务,是Message的消费者。

2024-05-12 21:14:11 718

原创 Android EvsHal

2、调用service(EvsEnumerator)的notifyDeviceStatusChange方法,通知设备状态变化。一个IEvsCamera对象即代表一个Camera,主要接口为捕获图像。1、调用addCaptureDevice方法,添加采集设备。EVS显示对象,可控制显示状态,并处理图像的实际呈现效果。客户端实现接口以接收异步传输的video frame。

2024-05-12 21:11:34 721

原创 Android EvsDeiver

service.cpp文件路径:packages/services/Car/cpp/evs/sampleDriver/aidl/src/service.cppservice.cpp函数:二、EvsDeiver相关类ConfigManagerConfigManager文件路径:packages/services/Car/cpp/evs/sampleDriver/aidl/src/ConfigManager.cpppackages/services/Car/cpp/evs/sampleDriver

2024-05-12 21:02:20 772

原创 Android EvsManager

service.cpp文件路径:packages/services/Car/cpp/evs/manager/aidl/src/service.cppservice.cpp函数:二、EvsManager相关类VirtualCameraThis class represents an EVS camera to the client application.此类表示客户端应用程序的 EVS 相机。VirtualCamera文件路径:packages/services/Car/cpp/evs/man

2024-05-12 11:54:43 657

原创 Android EvsApp

此类可用于从 IEvsCamera 实现接收相机图像。它将保留最新的图像缓冲区,返回较旧的图像缓冲区。主力类的抽象基类,用于处理 EVS 应用程序每种模式的用户交互和显示。将所有可用摄像机的视图合并到一个重新投影的自上而下的视图中。将视图从单个指定的摄像机直接渲染到完整显示。将视图从单个指定的摄像机直接渲染到完整显示。此类运行 EVS 应用程序的主更新循环。

2024-05-12 11:43:48 905

原创 Android Camera

Android的Camera系统包括手机的Camera系统(Camera2)和车机的Camera系统(EVS:exterior view system),车载和手机的Camera系统是两套不一样的架构,手机Camera系统最终生成符合人眼感官的图像,需要考虑多样化的场景,如美颜、夜景提亮、降噪、虚化等;而车载Camera系统AIS(Automotive Imaging System)的图像大部分是给自动驾驶等机器识别使用,更多考虑的是远距离传输、多摄像头图像处理等场景。

2024-05-12 11:39:40 781

原创 Android Vehicle

HalServiceBase是一个抽象类,它定义了HalService的架构,它的具体实现类包括ClusterHalService、DiagnosticHalService、EvsHalService、InputHalService、PowerHalService、PropertyHalService、TimeHalService、UserHalService、VmsHalService。VehicleHal是车辆 HAL的抽象。此类处理与本机 HAL 的接口,并对接收的数据进行基本解析。

2024-05-12 11:36:00 771

原创 Android13 CarEvsManager startVideoStream流程分析

上面方法主要处理如下:1、调用mHalWrapper(EvsHalWrapper)的connectToHalServiceIfNecessary方法,连接HalService。2、调用mHalWrapper(EvsHalWrapper)的openCamera方法,打开Camera。

2024-05-12 11:27:53 841

原创 Android CarEvs

一种服务,用于跨 HAL 边界侦听扩展视图系统,并通过 {@link android.car.evs.CarEvsManager} 向 Android 中的系统客户端公开数据。GPU 支持的 SurfaceView,用于呈现由 {@link CarEvsBufferDescriptor} 描述的硬件缓冲区。用于 CarEvsBufferDescriptor 的 GLES20 SurfaceView 渲染器。可更新的汽车服务使用的 EvaHalWrapper 实现。

2024-05-12 11:20:29 846

原创 Android13 InputHalService onHalEvents流程分析

在Vehicle章节,我们分析了Vehicle事件分发流程,在VehicleHal的onPropertyEvent中调用调用各个HalService的onHalEvents,如PowerHalService、PropertyHalService、InputHalService,之后由不同HalService继续对PropertyEvent进行处理。调用listener(InputListener)的onKeyEvent方法,

2024-05-12 11:12:55 343

原创 Android13 CarInputManager requestInputEventCapture流程分析

【代码】Android13 CarInputManager requestInputEventCapture流程分析。

2024-05-12 11:09:11 267

原创 Android13 CarInput

int requestInputEventCapture(int targetDisplayType, int[] inputTypes, int requestFlags, Executor executor, CarInputCaptureCallback callback):注册按键监听事件。void onKeyEvents(@DisplayTypeEnum int targetDisplayType, @NonNull List keyEvents):捕获了KEY事件。

2024-05-12 11:07:37 805

原创 Android13 CarPowerManagementService onApPowerStateChange流程分析

如下为CarPower上电的流程图:下面我们从代码角度分析:在CPMS的init方法中会调用onApPowerStateChange(CpmsState.WAIT_FOR_VHAL, CarPowerManager.STATE_WAIT_FOR_VHAL); 设置ApPowerState为STATE_WAIT_FOR_VHAL:在onApPowerStateChange中调用PowerHandler 的handlePowerStateChange方法:在handlePowerStateChang

2024-05-12 11:05:35 258

原创 Android13 CarPowerManager setListener流程分析

当CPMS启动后会向VHAL设置电源状态监听,当VHAL收到电源状态更新就会通过监听函数通知CPMS,然后CMPS会根据APP设置的电源状态变化监听调用APP的回调接口,到此从VHAL到APP的电源状态更新就建立起来了。

2024-05-12 11:03:08 202

原创 Android13 CarPowerManagementService启动流程分析

在CarPowerManagementService中init调用PowerHalService的setListener设置事件侦听器以接收车辆的电源事件。

2024-05-12 11:02:03 186

原创 Android CarPower

在Android Automotive OS (AAOS)中,CarPower负责车载电源的原理,它一面同libsusped交互控制AP(应用处理器,也就是Soc)的电源状态,一方面通过VehicleHAL与MCU通信接收和发送电源相关指令。

2024-05-12 10:59:52 897

原创 Android CarProperty

在Android Automotive OS (AAOS)中,绝大部分与车辆硬件功能相关联的属性,如空调, 车舱功能, 车辆传感器等都是通过CarProperty来读取或者设置的,其中CarPropertyService作为CarService的子服务,负责调用HAL层(VehicleHAL)实现具体功能,而CarPropertyManager作为客户端接口由各个APP调用,如下为CarPropertyManager的Block图:CarPropertyManager是Android Automotive

2024-05-12 10:53:27 943

原创 Android CarDucking

CarDucking用来处理声音的淡入和淡出,在CarAudioFocus处理中会被调用。

2024-05-12 10:42:56 303

原创 Android13 CarZonesAudioFocus onAudioFocusAbandon回调处理流程分析

上面方法进行如下处理:调用CarAudioFocus的onAudioFocusAbandon方法,进行音频焦点仲裁。调用notifyFocusCallback方法,进行Ducking处理。

2024-05-12 10:40:05 746

原创 Android13 CarAudioFocus onAudioFocusRequest回调处理流程分析

上面方法进行如下处理:调用getAudioZoneIdForAudioFocusInfo方法获取zoneId。调用CarAudioFocus的onAudioFocusRequest方法,进行音频焦点仲裁。调用notifyFocusCallback方法,进行Ducking处理。

2024-05-12 10:32:39 830

原创 Android CarAudioFocus

在汽车音频中,音频焦点(Audio Focus)的处理和手机有所不同, 在具体介绍 AAOS中汽车音频焦点的实现之前, 需要了解一下Android的音频焦点机制,Android 引入音频焦点机制的主要目的是协调多个应用同时播放音频时产生的声音竞争的问题, 从而避免系统中有多个应用同时发声, 而导致声音混杂,影响用户体验.

2024-05-12 10:15:16 636

原创 Android CarAudioZone

在汽车领域,围绕多个用户同时与平台互动并且每个用户都希望使用单独媒体的需求,出现了一系列新的用例。例如,后座上的乘客在后座显示屏上观看 YouTube 视频时,司机可以在驾驶舱中播放音乐。多可用区音频允许不同的音频源通过车辆的不同可用区同时进行播放,从而实现此功能。Android 10 中的多可用区音频使原始设备制造商 (OEM) 能够将音频配置为不同的可用区。每个可用区由车辆内的一组设备组成,并且有各自的音量组、用于上下文的路由配置以及焦点管理。

2024-05-12 10:06:19 724

原创 Android13 CarAudioManager setVolumeGroupMute流程分析

以上方法调用了如下方法:调用CarVolumeGroup的setMute方法调用callbackGroupMuteChanged方法调用CarVolumeGroupMuting的carMuteChanged方法。

2024-05-12 09:44:23 418

原创 Android13 CarAudioManager setGroupVolume流程分析

这个流程比较长,我们分段理解和分析,首先是从CarAudioManager到IAudioPolicyService,这个阶段的流程图如下:调用了mService.setGroupVolume方法,mService的定义为“private final ICarAudio mService;上面方法主要处理如下:调用callbackGroupVolumeChange调用getCarVolumeGroupLocked取得VolumeGroup。

2024-05-12 09:38:37 869

原创 Android GroupVolume

汽车音频中新增了音量组的概念. 所谓音量组,就是将不同用途的声音进行归纳,按组对相关的音量进行控制,在进一步解释音量组的概念之前,先了解一下音频上下文(Audio Context)和音频属性(Audio Attribute)两个概念。Android中的每段声音都由相应的应用和声音生成的原因来识别, 然后Android设备会使用这些信息来确认如何呈现声音。音频上下文音频属性对象MUSICMEDIANAVIGATIONCALLRINGTONEALARMALARMUNKNOWNUNKNOWN。

2024-05-12 09:28:41 880

原创 Android13 CarAudioManager getZoneIdForUid流程分析

【代码】Android13 CarAudioManager getZoneIdForUid流程分析。

2024-05-12 09:24:35 196

原创 Android13 CarAudioManager setZoneIdForUid流程分析

调用ICarAudio的setZoneIdForUid方法,ICarAudio是一个接口,由CarAudioService实现,因此会调用CarAudioService的setZoneIdForUid方法。

2024-05-12 09:22:40 163

原创 Android13 CarAudioManager setFadeTowardFront流程分析

2、调用AudioControlWrapper的setFadeTowardFront方法,由于AudioControlWrapper是一个接口,而AudioControlWrapperAidl实现AudioControlWrapper接口,因此会调用到AudioControlWrapperAidl的AudioControlWrapper方法。调用IAudioControl的setFadeTowardFront方法,IAudioControl是一个接口,实际调用的是AudioControl HAL。

2024-05-12 09:20:44 177

原创 Android3 CarAudioService初始化流程分析

调用CarAudioDynamicRouting的setupAudioDynamicRouting方法,CarAudioDynamicRouting在Android Automotive OS系统中用于动态控制车载音频的路由。调用CarAudioPowerListener的newCarAudioPowerListener方法,创建CarAudioPowerListener对象。调用CarAudioPowerListener的startListeningForPolicyChanges方法。

2024-05-12 09:16:50 606

Android Media-使用VideoView播放SD卡中的视频

Android Media-使用VideoView播放SD卡中的视频

2024-05-02

Android Media-使用MediaPlayer播放SD卡中的音频

Android Media-使用MediaPlayer播放SD卡中的音频

2024-05-02

Android AIDL基础-利用AIDL实现客户端向服务端传递Listener接口

Android AIDL基础-利用AIDL实现客户端向服务端传递Listener接口

2024-05-02

Android AIDL基础-利用AIDL实现客户端向服务端传递基本类型

Android AIDL基础-利用AIDL实现客户端向服务端传递基本类型

2024-05-02

Android图像介绍-Bitmap常用操作

Android图像介绍-Bitmap常用操作

2024-05-02

Android图像介绍-利用bitmap加载图片文件并表示

Android图像介绍-利用bitmap加载图片文件并表示

2024-05-02

Android图像介绍-Drawable

Android图像介绍-Drawable

2024-05-02

Android动画介绍-属性动画(2)

Android动画介绍-属性动画(2)

2024-05-02

Android绘画介绍-图片描画

Android绘画介绍-图片描画

2024-05-02

Android绘图介绍-复杂图形描画

Android绘图介绍-复杂图形描画

2024-05-02

Android绘图介绍-复杂图形描画

Android绘图介绍-复杂图形描画

2024-05-02

Android绘图介绍-基本图形描画

Android绘图介绍-基本图形描画

2024-05-02

Android JNI基础-利用JNI实现JAVA调用C++代码

Android JNI基础-利用JNI实现JAVA调用C++代码

2024-05-02

Android多屏显示-StartActivity

Android多屏显示-StartActivity

2024-05-02

Android多屏显示-Presentation

Android多屏显示-Presentation

2024-05-02

Android动画介绍-总结

Android动画介绍-总结

2024-05-02

Android动画介绍-估值器

Android动画介绍-估值器

2024-05-02

Android动画介绍-插值器

Android动画介绍-插值器

2024-05-02

Android动画介绍-帧动画

Android动画介绍-帧动画

2024-05-02

Android动画介绍-补间动画(2)

Android动画介绍-补间动画(2)

2024-05-02

Android动画介绍-补间动画(1)

Android动画介绍-补间动画(1)

2024-05-02

Android动画介绍-属性动画(1)

XML+JAVA方式

2024-05-02

Android动画介绍-属性动画(1)

JAVA方式

2024-05-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除