自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jackzhouyu的专栏

Linux学习

  • 博客(221)
  • 资源 (12)
  • 问答 (1)
  • 收藏
  • 关注

转载 I2S和PCM协议记录

slot槽的概念是针对DIN/DOUT数据引脚上的,一个slot表示一个通道的一帧数据,比如5.1通道数据,其采样Bit时24,那么一个槽slot就代表5.1通道其中一个通道的24bit的数据;看了上面的I2S介绍后,WCLK可能只能发送2通道的数据,设计之初也是这样的,但随着音频立体声的扩展,如5.1、7.1等多个通道数据扩展后,I2S也引入TDM时分复用技术,扩展到多通道数据的收发;在WCLK信号有效后,BCLK的第二个周期的上升沿数据位有效,数据位先MSB高位Bit,后低位LSB的Bit。

2024-08-14 17:59:06 21

原创 Provider(6) - Reformat和ClampBufferProvider

ReformatBufferProvider就是用于转换输入和输出的数据format不一致,比如输入是float、输出是int32_t;ClampFloatBufferProvider则是将float类型的音频数据其能量限制在[-3dB,3dB]中。

2024-07-20 12:53:48 398

原创 Provider(5) - AdjustChannelsBufferProvider

adjust Channels更新是为了满足dst的channels配置,强行进行映射和填充,没有去确认dst和src的通道是不是对应,举个其实现的例子就明白了:|1|2|1|2| ===>>> |1|2|3|4|1|2|3|4| 3、4通道填充0|1|2|3|4| ==>>> |1|2|1|2|…|3|4|3|4|,多余的3、4通道拼接到数据末尾。

2024-07-20 12:53:00 449

原创 Provider(4) - RemixBufferProvider

Remix顾名思义,在音乐作品中代指重新编排歌曲,这里将对音频数据进行重新编排,也就是其数据的组合位置等,与上一边文章DownmixerBufferProvider区别的是,支持mix后的channel是多通道,而不仅限于channel_left和channel_right。

2024-07-20 12:52:01 665

原创 Provider(3)-Mix之DownmixerBufferProvider

看完后是不是觉得很简单,复杂的是如何和effect的downmix库建立连接,真正做downmix的也就是按照几个策略来做,DOWNMIX_TYPE_STRIP和DOWNMIX_TYPE_FOLD;找出音频数据源中,每个channel位置的数据,按照mix的策略进行加法即可。

2024-07-20 12:49:33 1008

原创 Provider(2)- SourceAudioBufferProvider

从Source源端出来的数据,通常是来自于应用层,但没有与应用层直接连接,通过MonoPipe相关类连接,其SourceAudioBufferProvider和MonoPipe相关类的包含关系图如下:如上图,SourceAudioBufferProvider持有MonoPipeReader,依次持有audio_utils_reader,而audio_utils_fifo是一个队列fifo的管理类,应用侧逻辑通过audio_utils_writer往fifo队列写数据,而audio_utils_reader

2024-07-13 17:55:13 819

原创 Provider(1)- 什么是AudioBufferProvider

顾名思义,Audio音频数据缓冲提供,就是提供音频数据的缓冲类,而且这个AudioBufferProvider派生出许多子类,每个子类有不同的用途,至关重要;那它在Android哪个地方使用呢?在PlaybackTread中,接收应用层传递而来的数据,那为什么要专门用这么多Provider类来处理呢?而不只是简单的转发,将应用层的数据转发到PlaybackThread就行了;No、No、No!

2024-07-13 17:52:46 840

原创 音频Balance源码总结

顾名思义,Balance及平衡,平衡也就是涉及多方,音频左右甚至四通道,调节所有通道的音量比,使用户在空间内听到各个通道的音频大小不一,好似置身于真实环境中;博主分析的Balance源码在。

2024-06-27 19:02:30 1150

原创 音频可视化算法demo

音频可视化

2024-02-01 10:42:14 467

原创 谨慎使用android.view.SurfaceView.setVisibility方法

原因就是此方法会导致native的内存暴增,前提条件你使用surfaceview去绘制一些复杂的3D图形,绘制复杂、业务复杂的场景;setVisibility方法会调用surfaceView的updateSurface,而此方法内部就可能会分配大量的native内存。

2023-12-01 11:54:20 545

原创 如何从日志中快速定位Android系统重启?

同样的userId为u0,且为它启动了2次,明显就重启了;可以查看两个时间点的日志确定重启原因。一般来说系统重启都是zygot被干掉了,发送了9就是kill信号,杀掉孵化进程自然就重启了。

2023-10-26 10:24:53 489

原创 音频编码类型及对应的封装文件

如下表格。

2023-08-22 16:13:08 1391

原创 矩阵定理复习记录

也就是对A*y的矩阵,求偏导y,结果为A的转置矩阵;若A是一个对称矩阵,也就是。这部分的推导过程可参考。

2023-08-10 17:34:13 424

原创 AOSP构建、编译基础理解

参考这篇文章,写的比较好,我就不狗尾续貂了!

2023-05-19 14:21:51 1590 4

原创 音频焦点使用及原理

因为实际上就是通过这种流程触发的,假如我们第一个音乐App申请焦点成功后,在播放音乐music,此时它的FocusRequestor位于FocusStack栈顶,此时若有电话接入,电话App应用会申请音频焦点,电话App会位于FocusStack的栈顶,而music的app在电话App的下面,就会触发对于音乐App失去焦点的回调,当然还有其他焦点触发变化的情况,此处解释就是上述流程图的。这里主要分析上节的2和3步骤,申请焦点与焦点回调两个过程,在framework中是如何运作的?

2023-05-06 14:56:23 2490

原创 Android Audio音量设置原理流程分析

在改变音量时或插入耳机设备时,防止音量突变过大,对人耳造成伤害;如手机上music的音量设置到最大值,当我们插上耳机戴上时,如果音量仍不变保持最大输出,听力可能会受损,这时这个安全音量设备就其作用了,插入耳机时音量值变为安全音量值,保护我们的听力。以上代码关键理解点在于return这句,srcRange代表srcStream可调整的音量等级范围,假如[1, 10],同理dstRange,有可能是[10, 20],如传入的srcStream的index音量等级是5,对应到dstStream是都少呢?

2023-04-11 20:43:44 5374 1

原创 MediaPlayer框架总结

在GenericSource中,FileSource是与本地音视频文件直接连接的一个类,而MediaExtractor则是不同类型音频的解析类,如wav、mp3、midi等多达十多个的解析解析类,不同的音频文件会创建不同Extractor类,但是他们都集成MediaExtractor,拥有统一的操作API接口,而这些Extractor类使用类似链式的模式,最后都指向FileSourece,逐级解析音频,拿到文件里面的metaData元数据以及音频数据。暂用一幅图总结,待后续有时间了在细细补充;

2023-03-24 10:17:07 388

原创 记录Android Audio学习中的疑问

本文记录博主学习Audio时的问题

2023-03-08 18:40:47 1083

原创 Android Studio自带模拟器卡死问题解决

Studio自带的模拟器很方便,不用安装其他的插件即可运行,但是经常会莫名其妙的点不动、卡死,把它杀掉后、重启Android Studio还是一样的结果;

2023-02-20 09:36:46 3078 5

原创 记录一次内存调优实战

adb monkey压力测试App的拍照功能,发现内存持续升高,GC后仍缓慢持续升高,基于此,分析其背后的原理!

2023-02-07 11:13:00 294

原创 Android trace文件分析小技巧

网上有很多trace文件分析博客,但是都是解释anr发生得原因,没有指导anr文件如何着手分析?本篇文章就是讲trace文件怎么切入?

2022-10-24 11:02:10 3572 4

原创 widget使用setImageViewBitmap方法设置bug分析

在widget里面,Imageview设置bitmap时,通常可以使用更新ImageView,使用此方法容易引起以下问题:从以上错误日志分析大致意思就是,AppCompatImageView不能在RemoteViews里面使用setImageBitmap这个方法可是why?remoteViews明明提供了setImageViewBitmap,现在又说不能用method实质就是ImageView的setImageBitmap方法,klass.getName()理论上应该返回的是ImageView,因为

2022-06-22 22:11:01 988

原创 Android Audio混音实践篇

Android Audio混音实践篇简介本篇文章主要介绍Android Audio模块的MixerThread混音业务如何实现的?建议在阅读这篇文章之间先阅读混音理论基础篇,并且在分析源码之前:头脑里构想一个大致的混音过程,多路音频AudioTrack叠加在一起进行混音,多路音频混音的是数据对象是pcm数据,它如何叠加,混音后的音量又是如何处理?首先回忆一下单路AudioTrack的音频播放流程,如下:应用层创建AudioTrack,并配置播放音频的模式mode、采样率、format以及usag

2022-04-27 21:07:07 9229 23

原创 混音理论篇

混音基础理论篇什么是声音声音是由物体震动,从而对周围空气产生的一种挤压压力,形成的声音效果。可以在脑海中想象一下水波纹的效果图。并且声音在传输时需要介质,无介质如真空是无法传递声音的,由于声音从音源出来会经过各种反射如墙面,各种反射声音经过叠加混音后传入人耳,才是我们听到的声音,所以大部分情况下我们听到的都是混音,除混音外也有可能同一音源经过墙面反射后先后到达我们的耳朵,但当两次声音间隔小于0.1s时人耳是无法感知的。声音的基本属性从上图声波示图中,知道波有频率、振幅和波形等特性,频率代表音阶

2022-03-05 22:06:22 3753 2

原创 Android Audio播放音频之数据传递

AudioTrack之数据传递简介接上一篇AudioTrack播放音频之建立通道找到了通道的唯一句柄值output,这个output实质就是在AudioFlinger创建PlaybackThread后,以key-value形式上保存(output, PlaybackThread)的key值,通过output就可以找到播放音频将从哪个PlaybackThread线程传递数据,这个线程相当于一个中间角色,应用层进程将音频数据以匿名共享内存方式传递给PlaybackThread,而PlaybackThrea

2022-02-10 20:05:26 8525 4

原创 Audio播放音频 --- 建立播放通道

Audio播放音频 — 建立播放通道简介虽然文章标题是《建立播放通道》,其实播放通道早在AudioPolicyManager解析configuration配置文件时,openoutput业务逻辑就已经把输出通道打开并建立好了,而播放音频流程就是根据音频属性Attribute来决定使用哪个输出通道output而已,但是这个流程业务相对openoutput更加复杂,也涉及更多的音频专业知识;并且播放音频不只是选择输出通道,还涉及往这个输出通道灌音频数据,传送到设备去播放;本篇文章只涉及输出通道的选择,音频

2022-01-12 20:06:36 7988 5

原创 Audio解析strategy配置文件

Audio解析strategy配置文件简介audio_policy_configuration配置文件配置了音频Audio的设备、数据流信息,而strategy相关配置文件则配置某种streamType的音频使用哪种音量曲线,如voice_call和music他们的音量曲线是不一样,后者这种关系叫做strategy策略.默认解析路径在/vendor/etc/audio_policy_engine_configuration.xml下,如果找不到可以去:char* POLICY_USAGE_LIBRA

2021-12-30 20:42:59 3952

原创 音频Open Output业务逻辑

open output顾名思义,你可以理解为打开一条输出通道,这条通道上跑着一定格式、采样率等特定的数据,通道的终点是一个音频设备,用于播放;所以这个open output业务就是初始化这条通道,为这个通道建立各种所需功能等。

2021-12-24 20:38:07 3835

原创 AudioFlinger、AudioPolicyService和AudioPolicyManager之间的关系?

AudioFlinger和AudioPolicyService属于binder服务,而AudioPolicyManager是AudioPolicyService服务进程下的一个独立功能模块,该模块可以由厂家自行实现(但必须遵循aosp的接口定义),最后提供so库,由AudioPolicyService服务load进来调用即可。

2021-12-22 20:40:49 5874 2

原创 audio_policy_configuration.xml文件解析

audio_policy_configuration.xml文件解析简介audio音频数据从一个源走到一个目的都是需要根据配置文件来决定,所以理解configuration配置文件中各个标签项转化为c++实体类的及各成员至关重要,本文先直接给出各标签和对应实体类的结果,后再简单分析其解析过程audio_policy_configuration.xml文件对应C++实体类configuration文件(audio_policy_configuration的缩写)为音频audio的设备、流以及路由等配

2021-12-16 20:26:18 9703

原创 枚举对比转换思路

枚举对比转换思路需求分析在Android系统开发中,我们经常会有这样的需求:a. 首先,我们会在代码中定义许多配置类型,如定义音频输出设备,耳机、扬声器、蓝牙音箱等等,你会想到用枚举,如下:enum audio_device_t { AUDIO_DEVICE_OUT_EARPIECE, AUDIO_DEVICE_OUT_SPEAKER, ....};b. 其次,我们在使用时会配置我们的输出设备,你可以在代码或者xml配置文件中配置,通常我们使用时,不一定和定义enum类

2021-12-16 20:23:29 1879

原创 JetPack Compose理解

每次点击该按钮时,调用方都会更新 clicks 的值。Compose 会再次调用 lambda 与 Text 函数以显示新值;此过程称为“重组”。不依赖于该值的其他函数不会进行重组。重组过程组合只能通过初始组合生成且只能通过重组进行更新。重组是修改组合的唯一方式。重组通常由对 State 对象的更改触发。Compose 会跟踪这些操作,并运行组合中读取该特定 State 的所有可组合项以及这些操作调用的无法跳过的所有可组合项。在重组期间,可组合项调用的可组合项与上个组合期间调用的可组合项不同,Com

2021-09-17 09:04:58 1076

原创 Android开发工具视频Android 12(S)准备

Android开发工具视频Android 12(S)准备适配步骤下载最新的Android studio工具,点我到官网下载最新的吧!最新版的studio规定jdk使用必须至少11,所以请移步下载jdk吧,我用的是jdk16,点我跳转下载jdkwrapper文件夹下面的gradle.properties里面的gradle地址建议用7以上,如下:https\://services.gradle.org/distributions/gradle7.0.0-bin.zip同时,也建议根

2021-08-28 11:35:26 2719 1

原创 Android studio打包so动态链接库没有符号表问题

什么时符号表?动态链接库so文件结构是由一个个Section段构成,一般来说在文件最后会附件一个符号表段,描述其他段对应的函数、变量等符号,当so执行错误时,就会打印so有函数、变量等具体的堆栈符号信息,而不是一堆二进制数据;当然,这附加的符号表并不是执行必须的,可以去除掉,而且一般也是去除掉!否则so库size会特别大为什么Android studio生成的so不带符号表起初查询了网上的资料都是在cmakelist里面去:set(CMAKE_BUILD_TYPE DEBUG)set(CMAKE

2021-08-16 19:12:49 5020

原创 多媒体文章阅读记录

多媒体文章阅读记录mpeg2-ts 从TS到PAT和PMTwifi p2pRTSP协议学习笔记

2021-03-31 10:48:43 228

原创 Android权限浅析

Android权限浅析权限,是对想要操作文件或者设备的使用者的约束;使用者拥有某个文件的操作权限方可对齐操作,反之则无法操作文件!浅谈Linux的权限如上图,是Linux系统中的一个JCamera文件夹,d表示一个文件夹,r可读,w可写,x表示可以执行;这三位是固定顺序,假如其中某一项为‘-’,则表示不拥有此项权限;drwxr-xr-x : 表示jackzhous文件拥有者UID,具有可读可写可执行的权限,用户组staff有可读和可执行权限,其他用户有可读和可执行权限;在Linux系统底层对读写

2020-12-23 12:28:36 308

原创 android内存管理机制与优化

android内存管理机制与优化心得简介android使用Dvalik/ART虚拟机来对应用管理,其使用专门的垃圾回收机制来管理堆上的内存,程序员无需自己去释放分配的内存;虽然减轻了我们许多的工作量,但是当我们开发的时候分配内存不合理,也很容易造成内存管理不当,如内存抖动、内存泄漏和内存碎片,所以我们也要弄明白虚拟机是如何管理内存,然后我们在去针对性的优化内存管理机制android内存采用...

2020-12-11 12:30:19 468

原创 Android OTA使用及原理浅析

Android OTA使用及原理浅析OTA(over the air)通过无线网络下载、删除更新等操作,完成业务操作;在Android系统方面,使用OTA可以解决系统升级,而其差分包会增量更新系统,具有占比流量小,适用于Android端;制作OTA升级包OTA包分区全量包和差分包;全量包包含编译整个系统后的所有内容,差分包则是在两个全量包基础上,对比产生的差分包;假如你有两个全量包Full A和Full B,此时设备上的系统是A版本,你之多的差分包C = Full B - Full A,则可以使用O

2020-12-11 11:59:09 2838

原创 Android 8.1高通msm8950平台Camera HAL层架构

Android 8.1 Camera架构及API解释基础使用先看看基础适用,然后以此为例逐步展开获取camera service服务CameraManager service = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);打开相机,并传入回调service.openCamera(cameraId, stateCallback, handler);private CaptureRequest.Builder

2020-12-04 17:51:22 1618 1

原创 解析高通vendor层mct框架

解析qcom mct module凡越底层的代码,更能体现代码的精髓所在 — 数据结构 + 算法模型,所以在研究其代码时,可以先重点关注其数据结构,能更好的帮助我们解析其背后的原理逻辑!今天来分析一下高通的camera vendor下与camera hal相关的部分,mct模块,mct算是其中一个基础模块,其他所有的sensor、isp、imagelib等都会使用mct,所以对它的理解至关重要,更能帮助我们理解其他模块基础数据结构体mct_module_tmct_module_t是mct的重要模块

2020-12-04 16:16:57 5168 1

audio_policy_configuration.xml

android 音频设备配置文件

2021-12-22

AMS注释源码(ActivityManagerService)

ams注释源码,startActivity相关逻辑已添加注释!快速帮助你理解AMS的处理逻辑,该资源配合我的博客Android进阶 — ActivityManagerService模块分析(https://blog.csdn.net/jackzhouyu/article/details/109021412)

2020-10-15

mv-file移动文件脚本

shell脚本,移动命令,只移动目录下的文件,不移动文件夹;例如 mv_file ./dir1 ./dir2 将dir1下面的文件拷贝后dir2下

2020-08-27

清楚android项目工程drawable/mipmap/layout/menu路径下无用的资源文件

shell脚本编写的功能,在Linux和mac终端上运行;主要用于Android studio下的Android项目,自动清除项目drawable、mimap、layout和menu下无用的资源文件

2018-10-26

动态加载demo

不好意思,没分了需要一点分

2017-01-13

EventBus秒表demo

一个简单的EventBus使用demo

2016-12-21

推流器ffmpeg资源

ffmpeg资源推流器,使用方式: 客户端:输入:视频名称,视频必须放在目录下面, 输出:里面有 在电脑端,可以用ffplay 进行播放

2016-03-07

ffmpeg 解码视频文件工程demo

请看工程内部的ReadMe文件,主要是对视频文件进行解码,解码成多个流文件,解码其中视频流位yuv流

2016-01-28

ffmpeg移植到android的基础工程

工程5个按钮: ffmpeg几个包里面的基础方法,libavcodec avformat avfilter configuration 等

2016-01-27

android屏幕录像

在android手机上实现简单的屏幕录制

2015-11-16

slf4j最新jar包下载 1.7.12

slf4j最新jar包下载 1.7.12版本,hibernate必须的工程包

2015-09-01

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

TA关注的人

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