自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(139)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android 使用AIDL HAL

修改hardware/interfaces/automotive/audiocontrol/aidl的Android.bp文件将freeze改为false。修改AIDL 文件 添相应的接口更新接口 update-api冻结接口freeze-api编译中间文件6.修改兼容性矩形和device清单,service的清单按照上述的方式修改完成之后 在CarService应用端编译还是会出现错误找不到对应的接口。

2024-03-12 20:21:33 1092 1

原创 Android 14 权限

与此相对应的,Google 新增了 READ_MEDIA_IMAGES、READ_MEDIA_VIDEO 和 READ_MEDIA_AUDIO 这三个运行时权限,分别用于管理手机的照片、视频和音频文件。原因是从 Android 13 开始,如果你的应用程序 targetSdk 指定到了 33 或以上,那么 READ_EXTRERNAL_STORGE 权限就完全失去了作用,申请它将不会产生任何效果。对于某些权限,如“MANAGE_EXTERNAL_STORAGE”无法使用“-g”授予的,可以使用如下命令。

2024-02-28 20:39:31 1262

原创 Android audio 音量曲线

所求的db = -2400 + (((- 1500 - (-2400))/(66 -33) x(46 -33)) = 2045.先求这个区间一个index对应多少db 将总的index(66 -33)除于总的db(-1500 - (-2400)) 为单位index对应的db。那46对应的有多少index,46对应为 46 -33。将这两者相乘就是46对应在这个区间内的db值, 加上起始的-2400就是最终的db。首先46是处在【33,66】的这个区间内,这个区间对应的db区间是【-2400,-1500】。

2024-02-28 19:49:33 768

原创 Android AAudio

内核并不知道用户空间何时完成写入了, 因此用户空间完成写入时需要通过某种方式告知内核. alsa提供了ioctl SNDRV_PCM_IOCTL_SYNC_PTR, 供用户空间通知内核更新appl_ptr, 例如tinyalsa中的pcm_sync_ptr采用的就是这种方式对应的接口是pcm_mmap_get_hw_ptr. 在内核层, snd_pcm_common_ioctl1 -> snd_pcm_sync_ptr 会最终更新该参数。这个调用是在get_out_position的时候同步完成的。

2024-01-06 16:45:03 1513

原创 Android codec2 视频框架之编码输出内存管理

总的来说是在CCodecBufferChannel 的start中根据componet组件中定义的参数来决定的(比如编码输出allocateId默认是ION(dmaheap),pool是linear一维类型),poolid在创建好pool后获取得到。在AccessorImpl, 会先从mBufferPool中看一下能不能获取到freebuffer 获取不到在创建新的,新的内存从dmabuffer中申请出来 并将新的buffer加入到bufferpool中。回到上面的是componet中传递work。

2023-12-13 21:18:18 1772 1

原创 Android 框架层AIDL 添加接口

因此,为进行通信,进程需将其对象分解成可供操作系统理解的原语,并将其编组为可供您操作的对象。如果未设置,则对应于在此编译上下文中具有稳定性的接口(因此此处加载的接口只能与一起编译的东西一起使用,例如在 system.img 上)。总结: 在冻结的AIDL接口上面加新的接口 需要做的步骤。AIDL 可以理解成是一个范式, 通过这个范式编写接口文件, 然后利用Android的AIDL工具 会生成继承binder所需要能力的头文件。然后通过服务调用其接口。编译会在下面的目录生成实现binder通信的接口文件。

2023-11-23 20:57:30 1888

原创 Android codec2 视频框架之输出端的内存管理

MediaCodc 和 应用之间的交互 包括设置Surface、解码输出回调到MediaCodec。将输出buffer render或者releas到surface。MediaCodec到CCodecBufferChannel,主要是传递控制命令CCodecbufferChannel到componet buffer的封装 传递 控制等等。componet到bufferqueuepool buffer的申请。

2023-11-21 20:17:01 620 1

原创 Android codec2 视频框架 之输入buffer

而这个mFramesInPipeline队列的大小不能超过mInputDelay + mPipelineDelay + mOutputDelay + mSmoothnessFactor.默认是4,就是输入最多存储4块了,超过4块,就不会回调到外部,让外部送数据进来了。而这个buffer 大小的申请也是外部设置的,一般是在解析的时候能够知道 最大是多少。比如下面的MP4解析的代码中会获取box 中sample的最大值,然后依据这个值设定输入的buffer的最大值。这个buffer 外部有两种方式可以获取到。

2023-11-08 20:17:34 1166

原创 AAOS CarPowerManager

(音频模块的on off 是通过设置stric mode 的方式 控制carauioservice, 具体就是不是safe 和emergency的音频流类型 请求焦点都会失败,也就是这些类型的声音类型都播放不出来)车辆的状态停车、熄火等等状态通过vehicle hal 通知到carpowerservice, 在service 中去控制各个模块的on off。一个policy 的id是kSystemPolicyIdAllOn,这里所有component都是on的状态。就需要一个模块对车的各个部分进行控制。

2023-11-06 21:01:38 399 1

原创 Android codec2 视频框架 之应用

然后解析封装读取数据 将数据拷贝到dequeue出来的input buffer 中, 拷贝完成后 queue到解码器, 同时从解码器中尽可能多的取输出的buffer, 对每个输出buffer 获取显示的时间戳。获取输入和输出的buffer 队列:先dequeue有效的输入buffer,然后将extract到的csd数据放入到这块buffer 中, 将这块buffer在queue到codec中(作用是 将解码所需要的额外的数据 给到解码器,类似于ffmpeg中的extradata)。

2023-11-06 20:52:26 763

原创 AAOS CarMediaService 问题分析

MediaControl是UI端控制Service端的类,在AAOS中所有的app播放控制客户端的实现都是carMediaApp中MediaControl的实现的(包括蓝牙audio localplayer界面中暂停播放,下一首 上一首等等)。暂停是应用的行为,Music应用会监听focus的变化,监听到焦点失去的情况会调用暂停。MediaControl:用来控制MediaSession, 在上面的AVrcpControl中 实现的MessaionCompat的callback回调的。

2023-10-25 21:09:27 840

原创 AAOS CarMediaService 服务框架

CarMediaService 是AAOS中统一管理媒体播放控制、信息显示和用户交互等功能的服务。这一服务依赖于android MediaSession框架。所以首先需要简单的了解一下MediaSession。CarMediaService 的实现是通过注册MediaSessionActive 和 MediaController的callback 来监听当前用户所有应用 有关媒体播放浏览等事件。当事件发生时更新AAOS界面的信息和控制的控件。

2023-10-19 21:13:57 1372

原创 Android MediaCodec 框架 基于codec2

系列文章的目的是什么?

2023-10-15 20:29:48 2000

原创 Android 显示surfaceFlinger vsync 获取

构造好之后会唤醒EventThread线程,这个线程从mPendingEvents中的事件调用dispatchEvent将事件分发给监听者,监听者即是向EventThread请求了Vsync的EventThreadConnection并addfd的配置回调函数的。vsync简单理解就是一帧图像在显示设备这边显示完成之后(图像从做上角扫描到了右下角了) 发送的第一个硬件vsync信号, 显示设备重新回到左上角开始显示的时候会在发第二个vsync信号。简要流程:硬件的vsync抽象在上层是一个fd。

2023-09-18 23:51:52 386

原创 Android codec2 编码 -- 基于录屏

本篇文章主要是理解Android 12编码的流程, 首先从上层的应用出发理解mediacodec提供给外部API的用法。然后针对每个api 分析编码各个流程中框架中的流程。熟悉一个框架的流程 可以从简单到复杂、从整体到局部去展开。同时在理解过中会产生各种各样的问题,各种问题的解决就是一个知识经验的形成过程。

2023-09-13 20:32:34 626

原创 Android audio 框架 之AudioPatch

首先调用carAudioService的createAudioPatch,传递的是录音设备的地址和播放的usage media、其中录音设备的地址 也就是patch 中的source设备是作为输入,而patch中的sink 输出只要根据usage找到可以播的sink设备即可。这边的patch创建时为mixport流和deviceport 设备之间构建一个数据的通路。软件的bridge创建好之后 就调用track start 将track 启动,也就构造了一个录音设备录制的声音会写入到播放设备的路径的测试。

2023-09-10 16:43:44 1353 1

原创 AAOS音频路由 问题分析

上层路由添加流程: 是遍历所有group中的address, 每个address 生成一个mixingRule, 然后每个group 中的context 转成usage,对于每个usage 生成一个rule,这个rule添加到mix 的critertion中,android所有的有效的context总共10个,可以对应到20个usage,就是每个mix最高有20个critertion。根据经验路由的规则是由用户id决定的,一般路由不对,就是用户id配置的不对。这三个地方都有mix的size判断。

2023-09-09 00:20:50 627

原创 Android 音频框架之配置文件解析

对应的类是AudioRoute,首先解析type(type有两种类型mix或者mux), 然后解析sink的名字,解析到名字后根据sink的名字从module的mPort(这个port是在上述解析mixport和deviceport中加入的)中找sinkport,找到后将sinkport设置到route中,同时将route设置到sinkport。对应的实际的应用 如果是播放音频,那么一个route的mixport是source端 产生数据,deviceport是sink接收数据输出。

2023-09-07 21:16:23 933

原创 Android 音频框架 基于android 12

Android 的音频是一个相当复杂的部分。从应用到框架、hal、kernel、最后到硬件,每个部分的知识点都相当的多。而android 这部分代码在版本之间改动很大、其中充斥着各种workaround的处理,让人看的云里雾里。网上相应的分析文章也很多,有些就贴大段的代码 是很不容易理解的。本系列就遵循从整体到局部, 从简单到复杂来分析。很多时候可能是带着问题来看文章。而写博客的目的 一是记录分析的过程,从迷茫 混乱到清晰 有序的关键概念和流程的理解。

2023-08-31 21:01:00 1145 1

原创 AAOS 音频焦点请求

本文章的目标是首先了解Android中音频焦点的基本概念,理解代码中相关音频焦点的使用方法。其次理解AAOS 中相关交互矩阵概念,理解其实现焦点管理的流程。

2023-07-25 23:51:34 1536

原创 AAOS系列之音量设置

AAOS音量设置内容可以分为几个部分音量的ui响应流程legacy模式dynamic模式通过按键进行设置AAOS 音量设置比通用的Android系统复杂,表现在两个方面。首先是UI响应上面的区别,AAOS 虽然有复用部分AOSP的UI逻辑,但有关音量设置的界面和音量变化的回调响应都是独立实现。这一部分还不是很完善,部分的功能实现的不全。其次 AAOS动态路由的模式,在动态路由的模式下音量的设置跟正常的流程完全不一样。本文的目标理解CarService中UI的响应流程。

2023-06-08 00:03:48 755 1

原创 AAOS 音频动态路由

如果配置了每个音频区以及各自的占用区域ID,那么在用户登录的时候,比如主区域登录时,对应 的应用的 音频流 会使用zone0的devices。:乘客区ID,用于配置基于用户ID 的路由,比如想要每个用户使用不同的音频区 ,需要按照下面例子的方式进行配置。可用的设备在audio_policy_configuration.xml定义,其中attachDevice标签定义的device 同时在device_port中有定义的,并且设备通过hal层open,能够open成功的device 为可用的输出设备。

2023-06-05 19:41:19 1663

原创 Android 12 init流程分析

刚开始接触需要了解的概念理解过程遇到了什么问题代码的位置和流程分析如何分析和调试遇到的问题。

2023-05-29 23:47:47 1301

原创 ffmpeg H264/mpegts 解析

h264解析码流的流程如何找一个完整的帧多slice的情况完整的帧怎么拷贝的ffmpeg parse流程读数据怎么读的mpegts pes解包流程总结从H264parse 到 ts的整个流程:从文件中读取188字节到ts buf中,拷贝多个ts buffer到pes buf中组成一个pes 包。pes包经过264 parse,找264起始码。首先新建一个parse的buffer,若当前pes包没有找到起始码,说明数据不够,返回-100,将pes的数据拷贝到里面。

2023-05-22 20:40:29 835

原创 ffmpeg rtsp解析

就看rtpproto.c里面的处理 直接就是rtp_read_header 建立udp或者tcp的连接,得到一个fd,然后从这个fd读数据。如果是直接udp的地址,同样少了rtp的处理, 直接就看udp.c的处理。分析方法:rtsp丢包可能发生在传输的每个环节,一般来说最大的可能是服务器端发送的时候某些包没有发送 或者 网络环境导致发送的包丢失 或者客户端应用程序导致底层收的包没有及时处理。第二步:向服务器发送discribe的消息, 然后解析获取到的sdp文件,根据文件建立流,获取音视频流的信息。

2023-05-20 00:17:21 1782

原创 ffmpeg mkv 文件解析

ID:标志着这个EMBL 是一个什么类型的,类型决定了后面data中存储的是什么类型的数据如是int,string,utf8,str,nest等。是什么类型的元素取决于ID的值。cue是level 1的embl,所有的embl id中嵌套的embl id 都通过结构体已经定义好在代码前面了 现在的任务就是解析文件然后将解析出来的数据填充到一个嵌套的结构体中。data:ID标志的数据,可以理解成是一个键值对,键是ID,值是data,data可能是另外一个EMBL单元,也有可能是一个int,string等等。

2023-05-18 20:44:02 974

原创 Android开机时间工具分析

点击具体的某一项 在详细信息栏中就可以看到start某个activity持续的时间。如果在activity中有看到某一项持续的时间很长的话,那就是可疑的一项。分析,可以用搜索栏搜索StartActivityManager, 可以看到下列时间先后顺序的activity的启动流程。android 的官网上面提供了下面的两种图形化的方式来分析开机时间,一些异常很明显的拖长整个开机时间的活动。会出现各种不同的报错,下面是整理的。android 上面有很多的方法可以分析开机时间 比如打log,通过log 分析。

2023-05-04 20:13:25 1289

原创 gstreamer 调度模式(pull/push)

gst将实际应用的每个功能模块抽象成元件,元件之间的连接是通过绑定在上面的pad来实现的。所以需要了解下具体数据是如何从一个元件流向另一个元件的。数据的流向可以从上游流向下游, 也可以下游去上游取。这两种方式分别对应的就是push mode 和pull mode。6.1 push模式(以视频解码显示为例) 大部分情况下都是工作在push mode。 所以重点介绍下 push mode,所谓的流向 实际上将上游元件的buffer指针传入到 下游元件的特定 函数, 这个函数就是 元件pad...

2021-01-13 15:07:31 2353 2

原创 gstreamer playbin3的工作机制

playbin3的调用流程如图: 最上层可以分为三个部分 ,playbin的任务负责创建下面三个bin, 然后进行连接,连接的机制依赖于gsingal。这三个bin分别为urisourcebin 、decodebin3、playsink。其中urisourcebin 的任务 负责从文件或者网络流中读取文件 并识别封装格式。decodebin3 则负责将urisourcebin读取的数据解码成raw video audio text。playsink 则负责将音视频进行同步 并输出到对应的设备...

2021-01-13 14:56:37 1430

原创 gstreamer插件的工作机制

Gst强大就是来自于 开发者可以按照给出的模板 添加和生产各种各样功能强大的插件, 然后将插件加入到gst的统一管理系统中,这样在应用端就可以在插件工厂中 找到插件,并利用插件的功能,Gst的插件都是在运行的时候进行动态加载的。 gst_init(&argc,&argv);初始化gst函数库,建立内部路径列表,注册内置元件以及加载标准的plugins。总体的流程就是在调用gst_init会根据编译安装的环境变量(g_getenv("GST_REGISTRY_1_0"...

2021-01-13 14:49:53 510

原创 理解GStreamer源码基础

gst是基于Gobject来开发的,Gobject提供 类,继承 对象注册 和gst信号机制的基础。GStreamer代码里面有充斥着Goject的代码,Gobject也是理解Gstreamer各个模块的基础。需要了解的是几个方面, 如何向GOject注册一个新类, 如何创建一个新类, 一个类如何继承另一类。3.1了解如何向Goject注册类以video_decoder类为例#define GST_TYPE_VIDEO_DECODER \ (gst_video_decoder_g...

2021-01-13 14:47:03 1412

原创 基于Gstreamer的应用

应用上层了解如何基于gstreamer 的api来构建一个视频播放的应用2.1 基于gstreamer api的MP3 播放基本的一个流程1、初始化gst, 开始一个主的循环,2、定义一个pipeline 和 pipeline里面需要的元素比如有source decoder sink等。3、设置必要组件的一些信息。4、获取总线,监听总线的消息。5、调用gst_bin_add_many将各个element 组成pipeline,然后调用gst_element_link_many,.

2021-01-13 14:42:21 633

原创 Gstreamer的基本概念

gstreamer是linux上面的一个音视频框架,具有结构清晰,面向对象,可扩展性高,内存传递高效等优点。gst优点来自于其设计的结构分明的框架,面向对象是通过继承Glib来实现的,可扩展性是基于插件机制来达到的,内存传递高效是基于其调度模式实现。通过本专题希望能够达到对gstreamer的基本概念有了解,知道如何基于gstreamer创建一个应用,理解Gstreamer插件的工作原理,了解各个插件间如何协作以及调试问题的基本方法。 首先从宏观上介绍下gstreamer的基本概念,然后看看...

2021-01-13 14:39:07 818

原创 vp9 prob 详细分析

VP9 probe 的概念vp9 prob 实际是vp9 probability的缩写,指的是各个编码参数出现在码流的概率。为什么需要在码流里面传递这样的参数。这个是为了节省熵编码的比特数。例子:算术编码 编码帧间预测的模式vp9的帧间预测模式有4种NEW, NEAREST, NEAR, ZERO 。 如果说这4种模式出现的概率相等,那么编码的时候就可以每个模式都分配同样的两个比特。如果说ZERO 出现的概率是50%, NEAREST 是 25%, NEAR/NEW 12.5% 。那么最

2021-01-07 20:49:57 962

原创 vp9 segment 详细分析

参考资料:vp9提供了一种新的划分称为segment,tile也好,hevc的slice也好,都是画面内按顺序的区域划分,但segment不是,所以segment的标记是对每个处理块标记一个id,画面最多可被划分为八个segment。每个segment可拥有四种能力:-SEG_LVL_ALT_Q:设定自己的qp,应用场景如实现ROI,或者进行码率控制等,后面会再提到因为vp9不对每个block设定qp,所以画面内的画质调制啊码率控制啊就可以通过这个功能来实现。-SEG_LVL_ALT_LF...

2021-01-07 20:43:57 1515

原创 HEVC帧间预测实现(HM实现)

帧间预测简要流程Inter 进行解码的基本单位是pu, 读一个pu 相关的信息,然后解码相应的pu块。 pu块的信息包括mv的信息等,解码pu块就是利用mv 从相应的参考帧中去出参考的块,然后利用参考块插值或者不插值出预测块。 1、参考帧数据的来源主要是m_apcRefPicList这个参考数据是怎么得来的,有调用getRefPic( RefPicListe, IntiRefIdx) 实际是返回的m_apcRefPicList。 TComPic*...

2021-01-07 20:29:17 649

原创 H264 协议和JM实现详细分析

目标: 对协议各个部分有比较深入的了解 对JM代码有深入了解,重点了解intra、inter、loopfilter、dpb管理这几个模块 分析 调试码流问题的一些方法 H264 协议了解重点了解解码部分,而解码实际上是编码的反过程,所以也需要理解编码过程的一些概念。分层次、分块 视频实际是由一帧帧图像有序的组合在一起而形成,而在帧图像这一层,一帧图像可以分成一个个slice,每个slice在滤波之前都是可以进行独立的解码。 因为在编码的时候会将熵...

2020-09-30 11:04:34 2501 1

原创 HEVC-熵编码

HEVC 熵编码 需要理解和学习的内容? 学习的目的还是主要用于回顾,后续如果用到相关的知识,希望能够看到文章之后,能够迅速的了解1、熵编码是什么?熵编码的目的?熵编码的通用流程?2、熵编码的方法有有哪些?3、HEVC 中的熵编码一、熵编码是什么?熵编码的目的?熵编码的通用流程? 了解熵编码,首先要了解熵是什么? 熵是衡量某个事件的信息量在编解码中就是码流的信息量。熵跟码流的概率成反比。 码流中某个符号出现的概率越大,那么对应的熵就越小。也就是说在这个符号传输之前...

2020-06-18 20:30:11 1620

原创 HEVC-环路滤波之样点自适应补偿

sao 是什么? sao解决了什么问题? sao用了什么技术?一 、 sao是什么以及解决了什么问题 振铃效应和样点自适应补偿 振铃效应 是从量化过程中引入的,数据经过DCT变换、量化后,高频的信息产生失真。这些失真的信息经过解码恢复的时候就会在图像边缘周围产生波纹现象。 SAO(样点自适应补偿)滤波就是为消除这种振铃效应而设计的。它通过对重建图像的分类,对每一类图像像素值加减一个偏移,达到减少失真的目的。在HEVC中包含了两种像素值补偿方法:边界补偿(Edge Offset...

2020-06-05 23:51:05 1099

原创 HEVC-环路滤波 之去块效应滤波

HEVC系列的目标:1、对基本概念的进行了解,不深入公式推导当中。在学习进行之前存在的疑问,学习之后是不是都一一解决了?2、在一段时间忘记相关概念的时候,是不是可以通过阅读之前的记录 最快的回忆起相关概念。 环路滤波是什么?环路滤波在编解码框架的哪个部分?环路滤波是为了解决什么问题的?环路滤波用了哪些技术?环路滤波的流程是怎样的?一、 环路滤波是什么? 环路滤波顾名思义就是在环路上面对数据进行滤波操作,而所谓的滤波操作就是将数据乘上某一个权重数据。二、环路滤波在编码框架...

2020-06-03 00:09:40 1813

pybootchartgui

windosw 平台适用的 用于android 开机时间分析

2023-05-04

SaliencyToolbox2.3

The SaliencyToolbox is a collection of Matlab functions and scripts for computing the saliency map for an image for determining the extent of a proto object and for serially scanning the image with the focus of attention It has been cited in more than 500 papers System requirements: Any computer and operating system that runs Matlab Matlab Release 13 or later Image Processing Toolbox The SaliencyToolbox is in part a reimplementation of the iNVT toolkit at Laurent Itti"s lab at the USC This toolbox complements the iNVT code in that it is more compact about 5 000 versus 360 000 lines of code and easier to understand and experiment with but it only contains the core functionality for attending to salient image regions ">The SaliencyToolbox is a collection of Matlab functions and scripts for computing the saliency map for an image for determining the extent of a proto object and for serially scanning the image with the focus of attention It has been cited in more than 500 papers System requirements: Any comput [更多]

2014-09-29

matlab,hough,randon倾斜校正源码

matlab,hough,randon倾斜校正源码

2013-12-22

hough,radon图像倾斜校正matlab源码

hough,radon图像倾斜校正matlab源码

2013-12-22

空空如也

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

TA关注的人

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