- 博客(32)
- 收藏
- 关注
原创 linux DVB 驱动分析
linux平台的数字电视驱动被称作linux DVB 驱动其框架称为DVB core在此做简单介绍Demux 简介Demux 是一个硬件模块,的主要作用是处理从frontend过来的信号,从中分离出各种表,然后根据表中的信息分离出每个频道的音频信号和视频信号,最后将音频和视频信号送到decoder解码。数字电视节目音频视
2016-07-07 23:09:11
6802
原创 alsa 驱动介绍
Machine以装配有CS4270的一款android 智能电视的为例/sound/soc/samsung/exynos.cPlatform以Samsung cpu exynos4412为例/sound/soc/samsung/Codec以wolfson的Codec芯片cs4270为例/sound/soc/codecs/cs4270.cA
2016-06-26 22:27:22
6132
原创 结合芯片exynos 4412介绍V4L2用来视频编解码的驱动
这里结合芯片exynos 4412介绍一下V4L2用来视频编解码的驱动结构内核代码基于3.4.106 linux-3.4.106\drivers\media\video\s5p-mfc linux-3.4.106\drivers\media\video1,V4L2结构2,几个主要接口主要接口(ioctl下面的一层)vidioc_qbuf
2016-06-21 23:06:02
6386
原创 exynos 4412 mfc 介绍
exynos 系列处理器的多媒体编解码依靠的是mfc硬件模块目前对MFC的介绍较少。这里粗略的总结一下MFC 有个RISC的小核,有8K的Icache,4K的Dcache,这个RISC可以对ES流每一帧的头数据进行分析或者合成MFC由以下部分构成:RISC, MFC core(各种加速器),寄存器组,总线接口,内存接口RISC和HOST都可以访问寄存器
2016-06-21 22:29:57
2095
原创 exynos 4412 Framebuffer驱动详解
本文参考了http://blog.chinaunix.net/uid-28328633-id-3565345.html 文中牵扯到一些android fence的知识。这里不做赘述。 请参考相关文章: http://blog.youkuaiyun.com/ear5cm/article/details/45093807 http://blog.youkuaiyun.com/fuyajun01/article/d
2016-04-19 23:25:31
4736
1
原创 exynos4412 的FIMD 介绍
后续这几篇文章力争将exynos4412 的显示部分介绍清楚这一块我们分成以下部分介绍:显示控制器的硬件原理framebuffer驱动分析exynos 4412显示部分主要寄存器本文参考了http://wenku.baidu.com/link?url=g_g0RLh3Kzbm_fE7AAR5-YSkeEtGTxzE-a23h0OsaRH5QKeQ7uX8l0hwCz3w
2016-04-19 23:05:28
5090
原创 gstreamer AV sync
本文翻译自gstreamer源代码中的文档,原文的路径是gstreamer/docs/design/part-synchronisation.txt。其中有一些繁琐的时间值推算。对于我们分析av同步不实用,这里不做介绍。同时参考网上资料http://blog.youkuaiyun.com/shenbin1430/article/details/4291963有兴趣的可以自行阅读。经过对代码的实
2016-03-09 21:59:44
3838
原创 gstreamer插件调用ffmpeg 详解
Gstreamer调用FFMPEG解析----Gstreamer 是如何操作ffmpeg的,以及ffmpeg是如何demux的(AVI 容器格式为例)AVI容器格式较为简单,所以这里用AVI为例,分析gstreamer如何通过ffmpeg来对多媒体文件demux,获得原始数据流。1. Gstreamer,ffmpeg, OMX框架关系 图一,框架Gstr
2016-03-09 21:47:18
6676
原创 android 解码出来的视频frame数据,是如何一步步的传递到显示端的(使用hwc composer online 合成)
1,初始化的时候,-----> allocateOutputBuffersFromNativeWindow-----> status_t OMXNodeInstance::useGraphicBuffer-----> virtual status_t useGraphicBuffer-----> status_t OMXNodeInstance::useGraphicBuffer2
2016-02-22 21:19:10
2466
1
原创 audio的输出设备切换分析
本文主要介绍android上音频输出设备切换的代码流程(此文部分内容参考自邓凡达老师的博客。感谢邓老师讲解)上层程序要切换输出设备时,经过JNI调用,会调用AudioSystem::setForceUsestatus_t AudioSystem::setForceUse(audio_policy_force_use_t usage, audio_policy_forced_cf
2016-02-20 20:02:49
6697
3
原创 audiotrack分析
首先总结一下AudioTrackAudioTrack字面意思是音轨,可以理解为一路音频的来源。JAVA层也有AudioTrack的概念,但只是简单的封装,这里不介绍了。只介绍Native JNI的ATAT 向下传送数据,有两种方式:1,主动push方式,(对AF来说是被动方式)AT调用write函数把音频数据“push”到AudioTrack中。2,被动pull方式,(对AF来说是主动方式)AF调
2016-02-20 20:02:14
3498
原创 audiopolicy分析
本章节,大体介绍一下AudioPolicyService手机的Audio输入源很多,例如放电影,放音乐,通话,铃声,提示音等输出也很多,例如蓝牙,耳机,喇叭,听筒等那么什么声音输出到什么地方呢?这就是AudioPolicyService干的事情了。首先明确几个概念:1,Audio interfaces安卓手机上目前支持三类音频播放设备,这个主要是根据声音播放端和
2016-02-20 20:01:36
3055
原创 audiomixer分析
我们在AF小节里面讲了,AF会创建playbackThread线程,进行mixer操作。并且写入硬件。我们这里以MixerThread为例进行分析。先看MixerThread构造函数AudioFlinger::MixerThread::MixerThread(){... mAudioMixer = new AudioMixer(mNormalFrameCoun
2016-02-20 19:59:58
3938
原创 audioflinger 分析
在media_server启动的过程中,AF和AP服务都被启动int main(int argc, char** argv){ AudioFlinger::instantiate(); AudioPolicyService::instantiate();}这里可以触发AF的构造函数,以及onFirstRef函数,完成一些变
2016-02-20 19:59:06
3051
原创 android audio buffer 分析
我们知道,播放audio的时候,音频数据是从AT传送到AF的,然后AF中的audiomixer来读取PCM数据做mix下面对这个流程做大体分析。首先,分析一下AT和AF之间传递数据使用的内存是在哪里分配的。AT章节里面,我们分析AudioTrack::createTrack_l函数时,有这么一段代码: sp track = audioFlinger->createTr
2016-02-20 19:58:16
5504
原创 android audio分析
从本小节开始,我们要分析android的audio部分。相对于surfaceflinger部分,audio简单许多,层次,模块明确许多。为了防止摊子铺的太大,我们把audio分成几个模块来讲解。尽量分清楚模块之间的耦合我们主要分成以下几部分:AudioTrack, AudioFlinger,AudioMixer, AudioHAL, Audio Buffer, AudioP
2016-02-20 19:57:22
1637
原创 android audio 音量设置分析
audiod 中经常遇到的场景是音量调整与输出设备的切换,下面两篇文章 针对这两个场景分别分析一下1,音量调整场景android 音量调整,可以使用两种方式: 软件mixer的时候修改PCM data 控制DAC硬件的增益第一种情况,如果是多路mix的情况,就是MixerThread进行软件mixer,然后在mixer计算的时候来缩放PCM data,
2016-02-20 19:56:25
7513
原创 exynos SOC 平台的openmax component 运行分析
研究了一下exynos平台上的openmax component组件,绕来绕去的很绕。这里总结一下。先上个总体图:曾经尝试把awesomeplayer,以及OMXCodec里的各种event流程,queue流程,内存使用释放路径,以及各种线程概念全画到图里,却发现东西太多太杂,导致图混乱不堪。索性,这里重点只贴Exynos平台自己的东西,把重点放在数据流向,以及
2016-01-20 23:17:16
1288
原创 awesomeplayer_event 分析
awesomeplayer里面,最重要的一个函数,就是AwesomePlayer::onVideoEvent这个函数囊括了AV同步,元数据读取,帧数据显示等很多工作。我们前面提到过这个函数。现在针对这个函数总结一下他的工作流程首先总结一下onVideoEvent是如何产生的前面讲过,status_t AwesomePlayer::prepareAsync_l() 调用的时候
2016-01-20 23:15:03
782
原创 awesomeplayer_openmax回调函数运行流程
前面介绍了一些初始化的东西。下面介绍一下OMX回调函数的注册。熟悉OMX的同学可能都知道,OMX运行的时候,最实质上的函数是依靠的fillBuffer, emptyBuffer,FillBufferDone,EmptyBufferDone等几个函数。那么这几个函数是如何注册,以及运行起来的呢?下面总结一下大体流程是这样的:OMXCodec使用emptyBuffer(
2016-01-20 23:11:31
1765
原创 awesomeplayer_openmax 初始化分析
我们知道stagefright进行编解码的流控是基于OMX的。首先我们总结一下OMX的初始化部分。此文借鉴了以下几篇文章。感谢作者http://blog.youkuaiyun.com/hellofeiya/article/details/8601168http://blog.youkuaiyun.com/tjy1985/article/details/7926133http://blog.cs
2016-01-20 23:08:22
1187
原创 android gralloc 小结
从字面就可以看出来Gralloc接口是为了显示内存分配与释放 – Graphics Allocation。它的主要目的有三个:Ø 为应用分配显示用内存;Ø 可以把显示内存在不同进程间进行映射;Ø 同步通过加载gralloc抽象层(gralloc.xxx.so),可以打开fb设备(/dev/fb0)和gpu设备(/dev/graphic/),fb设备用于操作fr
2016-01-13 23:02:33
5983
1
原创 android hwcomposer 在视频播放中的应用
之前写了一篇博客,分析了视频如何显示的,http://blog.youkuaiyun.com/wan8180192/article/details/50269405以及gralloc的内存管理这里结合hwcomposer模块,以及视频播放的场景,对其中有一些细节,在这里再做补充一下 。android中,多个surface layer要显示到屏幕上,就要合成到一起,合成方式有两种:
2016-01-13 22:59:48
3966
1
原创 c++使用dlsym
翻阅android源码时,发现以下代码: CreateSoftOMXComponentFunc createSoftOMXComponent = (CreateSoftOMXComponentFunc)dlsym( libHandle, "_Z22createSoft
2016-01-11 22:39:19
3696
原创 android 显示系统初步总结
最近研究了一下android的显示系统,参考了一些文档,做一点简单的总结1,废话不多说,先来一张 surfacefinger源码的source tree2,再上一张surfacefinger的组件图。(硬件平台是exynos CPU + MALI GPU)3,名词解释UMP : unified memory provider这是由ARM定义的
2016-01-11 22:30:18
3041
原创 arm soc 性能测试
最近有个需求,要把产品使用的某款ARM SOC的性能,和X86 桌面CPU性能做对比,从而确定某软件是否有价值移植到性能比较差的ARM SOC上。具体不细说了,总之,就是做一款类似于安兔兔的跑分工具现在把实现思路总结一下一,测试项: 1. CPU性能测试传统CPU性能测试主要有整点运算和浮点运算1.1 整点运算目前采用的算法包括了以下几项:整数排序、CRC
2016-01-11 22:21:46
3605
原创 android AV同步详解
本文主要介绍 android 多媒体中,音视频同步问题。以下是详细说明:先提及一个背景基础知识: Stagefright中,audio的数据输出是通过AudioTrack中的callback来不断驱动AudioPlayer::fillBuffer获取数据video的数据输出,则是由OMX端在解码完毕后,给awesomeplayer发送消息event,在awe
2015-12-20 13:35:37
4904
原创 android 解码出来的视频frame数据,是如何一步步的传递到显示端的(使用 GPU offline 合成)
经过一段时间的研究,对android视频解码,直到显示端的整体流程,有了浅薄的理解这里总结一下,解码出来的视频帧,是怎么一步步走到显示的。平台: Exynos 4412 android 4.41, Exynos 4412 视频编解码依赖于硬件MFC。 解码出来的数据,不会进行原始数据的搬运。实际传递的是这些解码完数据的物理地址。2,显示端硬件获得这
2015-12-11 21:52:13
3779
原创 stagefright使用surfaceflinger buffer 的分析
之前学习了surfaceflinger和stagefright 两大模块,这两大模块之间联系最大的地方,就是surfaceflinger 管理显示buffer,然后stagefright 如何用这个buffer这里总结一下这一块自己学习的知识点平台samsung exynos ,android 4.4实际上本文想研究的就是三个问题:(1)如何获取显示buffer,并且怎
2015-12-11 21:34:28
3949
1
原创 以下链接可以下载到4412 和 210的很多底层代码
https://github.com/CyanogenMod?utf8=%E2%9C%93&query=CyanogenMod http://www.cyanogenmod.com/一直苦苦寻找4412和210在HAL层的实现代码。终于找到了
2015-08-26 14:10:44
692
转载 [RFC] drm/exynos: add FIMC driver
http://lists.freedesktop.org/archives/dri-devel/2012-April/022168.html[RFC] drm/exynos: add FIMC driverInki Dae inki.dae at samsung.com Fri Apr 27 02:43:04 PDT 2012 Previous message: [
2015-08-19 23:34:22
1610
转载 android 多媒体几个不错的博客
http://blog.youkuaiyun.com/gzzaigcnforever/article/details/26849549http://blog.youkuaiyun.com/crazyman2010/article/details/41750623
2015-08-06 16:41:17
1815
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人