自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吾皇的博客

小闫的心情日记本~~~ 开玩笑啦~~ 嵌入式uboot,linux驱动,Andorid底层。 i.MX6 IPU专栏,GStreamer专栏^_^~

  • 博客(131)
  • 资源 (9)
  • 收藏
  • 关注

原创 20. Android MultiMedia框架完全解析 - OMX组件解析与状态机简介

State类中会做一些常规的操作,而不同类中处理不同的状态类型转换,这句话是什么意思呢?参照上一篇文章中讲的OMX的使用例子,首先通过OMX_Init()函数来初始化OMX的环境,在这个函数中会去注册组件,注册content pipe,之后就会通过OMX_GetHandle()函数来构建组件,并获取这个组件的Handler,在这个函数中会通过上述的ConstructComponent()函数来构建组件,并通过SetCallbacks来设置组件的回调函数,此时就完成了组件的加载,状态为Loaded。

2022-10-10 16:42:26 2512 1

原创 19. Android MultiMedia框架完全解析 - 如何使用OpenMAX组件

Android MultiMedia框架完全解析 - 如何使用OpenMAX组件

2022-10-10 16:30:40 1507

原创 18. Android MultiMedia框架完全解析 - OpenMAX介绍

OpenMAX IL API通过C语言致力于打造可移植媒体组件的阵列平台。这些组件可以是来源(source)、汇出(sink)、编解码器(codec)、过滤器(filter)、分离器(splitter)、混频器(mixers),或任何其他操作。OpenMAX IL API允许用户加载,控制,连接和卸载各个组件。Android主要的多媒体引擎StageFright是通过IBinder使用Open...

2022-10-10 16:23:25 2268 4

原创 2019年终总结

这篇总结一直拖到2/27号才写, 希望能在2/29号之前写完吧, 啊哈哈哈.按照国际惯例, 肯定是先记录一年的流水帐~美好的日子总是过的很匆忙的, 依稀记得过完年后就正式开始离职流程了, 这一个月内好像没有啥新的工作要做了. 然后就开始了上班打卡, 下班打游戏的小日子, 过的也美滋滋. 大约过了两周后, 就感觉有些许的空虚, 想着以后不深入的多媒体方向了, 不总结一下, 感觉对不起自...

2020-04-01 08:05:00 1356 14

原创 17. Android MultiMedia框架完全解析 - MediaClock分析与音视频同步

这里的代码分析流程就是《15. Android MultiMedia框架完全解析 - Render流程分析》中的代码流程,上次主要关注的是buffer的交互流程,这次主要分析的是音视频同步,即AVsync。(一)音视频同步概念与方法音视频同步是一个播放器要处理的基本问题,音视频同步的好坏直接影响到播放效果。解码后的音频片段和视频片段,都分别带有 pts 时间戳信息。回放时需要做的...

2019-04-01 21:28:45 4945 1

原创 16. Android MultiMedia框架完全解析 - ACodec详细解析

之前的文章中,已经多次分析过ACodec,但是我仍然认为有必要单独拿出来一节分析其中的一些机制与流程,下面先来看看ACodec在整个NuPlayer架构中的位置:1、ACodec消息机制:ACodec有一个BaseState和派生出来的其他State,如 UninitializedState,LoadedToIdleState, ExecutingState等。当有消息过来时,如果派生...

2019-04-01 21:18:40 6031 2

原创 15. Android MultiMedia框架完全解析 - Render流程分析

先来看Render在NuPlayer框架中所处的位置:Renderer的作用就是根据传过来数据帧的时间来判断这一帧是否需要渲染,并进行音视频的同步。但是真正硬件渲染的代码在MediaCodec和ACodec中。Renderer的位置是在NuPlayerDecoder后面,他俩之间的交互是从NuPlayer::Decoder::handleAnOutputBuffer()函数开始的...

2019-04-01 21:11:58 3626

原创 14. Android MultiMedia框架完全解析 - NuPlayerDecoder与MediaCodec的交互

上一篇文章中详细分析了MediaCodec,以及由它向下的内容,但是在MediaCodec外面包裹的是一层NuPlayerDecoder,这里就看看它们两者之间是如何沟通的。从理论上来讲,既然NuPlayerDecoder包裹在MediaCodec外层,所以它相对于MediaCodec也可以理解为App,它调用MediaCodec的API来完成一些任务。下面就详细看看这个流程:1. ...

2019-04-01 21:10:11 3227

原创 13. Android MultiMedia框架完全解析 - MediaCodec解析

MeidaCodec API: https://developer.android.com/reference/android/media/MediaCodecMediaCodec是一个Codec,通过硬件加速解码和编码。它为芯片厂商和应用开发者搭建了一个统一接口。MediaCodec几乎是所有安卓播放器硬解的标配,要深入分析一个播放器的源码,如NuPlayer, ijkplayer,有必要了...

2019-04-01 21:08:23 8825 1

原创 12. Android MultiMedia框架完全解析 - 从NuPlayer到MediaCodec到ACodec到OMX的整体流程与状态转换

之前的文章中,讲了那么多细节的东西,已经对概况没有一个大致的了解,所以这里缕一下整体的流程,同时也分析MediaCodec,ACodec与OMX Plugin之间的状态切换关系。(一)初始化过程(从NuPlayer开始):1. NuPlayer::start()时产生一个kWhatStart,在消息处理函数中如果是暂停后的开始就调用NuPlayer::onResume()【只需m...

2019-04-01 21:05:19 9262 10

原创 11. Android MultiMedia框架完全解析 - start流程分析

还是从mediaplayer.cpp开始分析,看start函数的实现:status_t MediaPlayer::start(){mPlayer->setLooping(mLoop); mPlayer->setVolume(mLeftVolume, mRightVolume); mPlayer->setAuxEffectSendLevel(mSendLe...

2019-04-01 20:59:57 2946 1

原创 10. Android MultiMedia框架完全解析 - MediaExtractor::Create函数的解析和FslExtractor分析

先来看看MediaExtractor所处的位置:(一)创建流程在GenericSource.cpp的NuPlayer::GenericSource::initFromDataSource()函数中调用了:extractor = MediaExtractor::Create(mDataSource, mimeType.isEmpty() ? N...

2019-04-01 20:53:54 2516 2

原创 9. Android MultiMedia框架完全解析 - MediaExtractor和MediaMuxer介绍

MediaExtractor API: https://developer.android.com/reference/android/media/MediaExtractorAndroid中Native层抽象出来MediaMuxer类和MediaExtractor类,MediaMuxer类主要用于将音频和视频数据进行混合生成多媒体文件(如:mp4文件),而MediaExtractor则...

2019-03-31 13:19:23 2707

原创 8. Android MultiMedia框架完全解析 - prepareAsync的过程分析

还是从mediaplayer.cpp文件开始分析:status_t MediaPlayer::prepareAsync(){ ALOGV("prepareAsync"); Mutex::Autolock _l(mLock); return prepareAsync_l();}基本没做什么,设置了一个自动锁,然后就直接跳到MediaPlayer::prepare...

2019-03-31 13:14:33 2282

原创 7. Android MultiMedia框架完全解析 - ALooper-AHandler-AMessage机制分析

先来看整个框架图:NuPlayer基于Stagefright的基础类构建,使用了更底层的ALooper-AHandler-AMessage机制来异步处理消息。AMessage作为一个消息载体,保存这与这个消息有关的信息;ALooper是一个循环,它运行着一个后台线程,来循环处理接收到的消息(将信息转给AHandler来处理,它相当于一个中转站);AHandler作为一个句柄,它...

2019-03-31 13:04:35 3138

原创 6. Android MultiMedia框架完全解析 - NuPlayerDriver与NuPlayer的通信

先解决NuPlayer与NuPlayerDriver的通信过程,在之前的文章中,都说了NuPlayerDriver是NuPlayer的一个Wrapper,上层的指令发送给NuPlayerDriver后,NuPlayer作为NuPlayerDriver的一个成员变量,NuPlayerDriver想调用NuPlayer的话,就相当简单。当NuPlayer完成一个指令后,如何通知NuPlayerDriv...

2019-03-31 12:59:06 2674 2

原创 5. Android MultiMedia框架完全解析 - 再谈Playback框架及一些学习方法的讨论

经过前面的分析,我们大概知道了一些概念,但是这个StageFright在整个playback的位置是什么样的:Android Media这一块的知识杂乱,而且有深度,有广度。深度的话,从app->JNI->C++->底层的OMX驱动,广度的话,每个播放器在播放的时候,会执行seek操作,快进,快退,暂停等等操作,同时,需要涉及读取源文件(从网络读取,从文件读取),解码(软...

2019-03-31 12:53:53 3174 1

原创 4. Android MultiMedia框架完全解析 - MediaPlayerFactory中OMX_Player的实现

这里的实现,可以参照C++设计模式中的工厂模式,:http://blog.csdn.net/wuzhekai1985/article/details/6660462这里插讲一下厂商定制Player的过程,可以参考NuPlayer的创建过程,通过这个过程,也能够对MediaPlayerFactory类有个比较深入的理解。(这里需要注意,代码是KK442版本的,FSL在那个版本使用OMX...

2019-03-31 12:42:17 3100

原创 3. Android MultiMedia框架完全解析 - setDataSource继续分析

在上一节中,我们分析到从服务端返回后,函数的执行流程(NO_ERROR != player->setDataSource(fd, offset, length)))这里继续执行,从服务端返回后,这个player就对应的是MediaPlayerService::Client,同时需要注意的是,在《Android中C/S架构以及C++层调用步骤分析》中介绍了创建了一个IMediaPlay...

2019-03-31 12:34:18 3720 2

原创 2. Android MultiMedia框架完全解析 - MediaPlayer的C/S架构与Binder机制实现

在Android中大量使用到了C/S架构来实现应用层和底层服务交互,而Binder机制无处不在。同样MediaPlayer也使用了这种机制,MediaPlayer在运行的时候,同样可以分为Client/Server两个部分,他们分别在不同的进程中运行,不同进程间的通信使用Binder机制,我们这里就以setDataSource()为例,讲解一下他们是如何建立关系的,架构图如下:1)...

2019-03-31 12:27:14 4098 1

原创 1. Android MultiMedia框架完全解析 - 从开机到MediaServer的注册过程

Android的App一般是用java写的,大致流程如下:MediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setOnCompletionListener(new OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp){mediaP...

2019-03-31 12:10:05 8247 3

原创 Android MultiMedia框架完全解析 - 概览

之前的工作中,一直在看Android MultiMedia的一些东西,关注我博客的同学也许知道我换工作了,以后将要从事Camera相关的工作,于是乎,将之前整理存放在有道云笔记里面的一些东西发出来,整理成一个专栏。工作的环境为Android N7.1,基于fsl公司的i.MX6q平台。当然,有很多东西是我自己的领悟,有不对的地方欢迎大家指正。在公司内部做了一个ppt分享,但...

2019-03-31 11:37:52 7729 17

原创 基于Android O8.1的ffmpeg NDK 开发 - 3 - CMakeList.txt解析

上两篇文章中,只是讲了APP如何创建,他们都使用到了同一个CMakeList.txt文件,但是没有仔细分析这个文件的作用,现在就仔细分析一下.首先什么是CMakeList.txt,它是一个构建工具CMake所使用的文件,CMake与Make工具类似,Make工具使用Makefile来确定编译规则,而CMake通过CMakeList来确定编译规则,这个CMakeList.txt就是CMake的构...

2018-07-30 15:18:05 647

原创 基于Android O8.1的ffmpeg NDK 开发 - 2 - APP显示ffmpeg所支持协议,编解码,过滤器,格式,配置等信息

我们今天的目标是仿照雷神的博客(https://blog.csdn.net/leixiaohua1020/article/details/47008825),把这个APP写出来,先上图:APP中有5个按钮,点击不同的按钮,会有不同的ffmpeg信息显示出来,分别是我们编译的ffmpeg所支持的协议,编解码器,过滤器,格式和配置等。 1. 新建Android Studio工程,参照上...

2018-07-30 09:56:21 468

原创 基于Android O8.1的ffmpeg NDK 开发 - 1 - Hello World!

 很多做NDK开发的人(像我这样从底层转过来的 >_<!)对于Android app的开发不是很理解,而ffmpeg的NDK开发现在又离不开Andorid app。网上虽然教程虽多,但是很多过时或者与NDK开发需求的不契合,或者ffmpeg与Android Studio一直在更新,从而造成了很多困扰,故写此教程,希望用户可以直接从github上面拉下来就能编译使用,同时一步一步讲解...

2018-07-26 22:38:15 799

原创 第一次作为面试官的感悟

这几天有幸跟着老员工经历了一场校园招聘。遥想去年还是一个小小求职者,现在就要坐在桌子的对面,角色的转变,还是感触良多,就简单记下来。最近半年绝少写博客了,第一个原因当然是工作太忙了~ 显然,明白人都知道,这只是一句多么空洞敷衍的话。真实的原因恐怕是我懒了。。。第二个原因呢,是最近确实写了很多笔记,但是确实还没有整理成体系,安卓系统实在太大。第三,工作与在学校确实相差很大,不仅仅是角色的一个简单转变

2017-09-29 22:42:48 8545 2

原创 给校园招聘中应聘嵌入式程序员的几点建议

又快到了一年的校园招聘季节,俗话说金九银十,如果想要在金色的九月,收获颇丰,那么,从3月份开始准备面试笔试相关的部分,不算过分。当然,我并不是指现在从头学,等到九月份就可以轻轻松松的收获一个不错的offer,找工作其实是几年的积累。当然,如果问有什么技巧没?当然是有的,下面针对应聘嵌入式的同学简单说几点:1. 选择问题首先的一个问题是,很多同学还在纠结是去互联网公司好呢还是去嵌入式公司

2017-02-15 23:20:25 4200

原创 我的2016年终总结

眨眼之间,2016已经过去了。本来不想煽情,可是最近屡屡被虐,还是简单写写这一年的感触吧~~~2016年初,老师不让出去找实习,小论文没有发表,准确来说,有关小论文的研究根本就没有进行,可能连毕业都成问题的,自己还是毅然决然的准备去找实习。毕竟未来还是想找一个好工作的,自己也深知不是做学术的那块料,家里条件也不允许。正好NXP飞思卡尔招实习生呢,而且招聘的是linux底层驱动的实习生,我们学校

2017-01-12 23:17:53 1183 10

原创 7. GStreamer建议的学习步骤和网页链接汇总

学习步骤:0. 可以看看我做的《GStreamer讲解》ppt入门,里面对于很多知识的入门讲解,不用积分,下载链接:1. 学习《GStreamer中文开发手册.pdf》,这时候结合《GStreamer基础教程》和《GStreamer播放教程》来看;2. 如果想要深入理解应用开发的话,可以写一个项目试试手,参看《gstreamerMP3播放器项目》,网页链接为:http://spac

2016-10-30 10:16:18 6159 4

原创 6. Gobject 学习总结

简单的来说,GObject是一个程序库,它可以帮助我们使用C语言编写面向对象的程序。 很多人被灌输了这样一种概念:要写面向对象程序,那么就需要学习一种面向对象编程语言,例如C++、Java、C# 等等,而 C 语言是用来编写结构化程序的。事实上,面向对象只是一种编程思想,不是一种编程语言。换句话说,面向对象是一种游戏规则,它不是游戏。GObject 告诉我们,使用 C 语言编写程序时,可以

2016-10-30 10:13:43 4180

原创 5. gstreamer插件所用函数整理

gstreamer插件所用函数整理2016-10-06 08:30:46(一)设置插件属性相关的函数:(1) g_param_spec_boolean ()函数链接如下:https://developer.gnome.org/gobject/stable/gobject-Standard-Parameter-and-Value-Types.html GParamSpec

2016-10-30 10:05:47 3320

原创 4. gstimxv4l2src.c源码分析

由于这个文件中会调用到GStreamer 1.0 Core Reference Manual中的很多函数,但是如果将这些函数的分析放在代码分析中的话,就会严重影响可读性,于是将这些函数的讲解都放在《gstreamer插件所用函数整理》这个文件中,这两个文件中的标号都是相同的,如果遇到不理解的函数,可以去那个文件中搜索来看。  (一)属性相关的设置关于这一节,它对应《插件开发手册

2016-10-30 10:03:32 4902

原创 3. init函数和class_init函数的讲解

如何去使用GObject去构建一个所谓的“对象”呢?GObject中每个类要定义两个结构体,假设你要定义的类型为People,那么你要定义两个结构分别名为People和PeopleClass,估计刚接触的人会有些晕,一般的C++啊,JAVA什么的都是直接一个class了事儿了。但记住C本身并没有面向对象的机制,这里这样做也仅仅是为了模拟。 名为PeopleClass的结构是表示类的结构,而名为Pe

2016-10-30 09:34:24 5912 2

原创 2. gobject中G_DEFINE_TYPE和g_object_new流程简介

C语言如何实现gobject面向对象支持呢?很简单,我们只需要建立自己的头文件,并在 .c 文件中添加一个宏定义G_DEFINE_TYPE即可。 G_DEFINE_TYPE的流程(G_DEFINE_TYPE在 GLIB 的gobject/gtype.h 中定义):#define G_DEFINE_TYPE(TN, t_n, T_P) G_DEFINE_TYPE_EXTENDED (TN,

2016-10-30 09:27:29 6983

原创 1. 插件编写的原则及文件目录分析

gstreamer的相关路径,有两个路径,如下所示: fsl-release-bsp/build-x11/tmp/work/imx6qsabresd-poky-linux-gnueabi/gst1.0-fsl-plugin/4.0.8-r0/gst1.0-fsl-plugins-4.0.8 fsl-release-bsp/build-x11/tmp/work/cortexa9hf-...

2016-10-30 09:22:35 1606 1

转载 GObject 学习笔记汇总---15

转自: http://garfileo.is-programmer.com/2011/3/28/a-simple-example-for-gobject-introspection.25662.htmlGObject Introspection 的简单示例这段时间以来,一直在跟 GObject 死磕。除了有点枯燥与乏味之外,也没什么不适,就是一堆繁琐但还算是直观的 C 代码罢了

2016-10-18 19:43:10 1039

转载 GObject 学习笔记汇总---14

转自: http://garfileo.is-programmer.com/2011/4/4/gobject-signal-connection.25847.htmlGObject 信号机制——信号连接文档 [1,2] 讲述了 GObject 信号注册的相关细节,本文进一步分析信号与闭包的关联问题,即信号连接。事实上,在文档 [1,2] 中我们已对信号连接有

2016-10-18 19:34:59 762

转载 GObject 学习笔记汇总---13

转自: http://garfileo.is-programmer.com/2011/3/27/gobject-signal-extra-2.25621.htmlGObject 信号机制——信号 Accumulator在文档 [1] 中,从外围对 GObject 信号注册的过程进行了初步分析。生命不息,折腾不止,我们应当以  Adrian Hands 大叔为榜样。所以,本文

2016-10-18 19:33:49 847

转载 GObject 学习笔记汇总---12

转自: http://garfileo.is-programmer.com/2011/3/25/gobject-signal-extra-1.25576.htmlGObject 信号机制——信号注册上一篇文档“GObject 的信号机制”只是挖了一个坑便结束了,本篇尝试填坑,不过也不敢有所保证。因为我也不确定会不会因为被 GObject 的信号内幕再次搞晕。我们先老老实实的

2016-10-18 19:25:19 770

转载 GObject 学习笔记汇总---11

转自: http://garfileo.is-programmer.com/2011/3/22/gobject-deconstruction.25485.htmlGObject 子类对象的析构过程在“GObject 的信号机制”文中,谈到 GObject 子类对象的析构过程分为两个阶段,第一阶段是 dispose,第二阶段是 finalize。之所以划分成两个阶段而不是一步到位

2016-10-18 15:51:41 1197

Android MultiMedia框架完全解析

Android MultiMedia框架完全解析,整个框架梳理,里面包含从上层APP到底层driver的整个框架,自己花了很多心血在上面。

2019-03-31

Gstreamer入门知识讲解

Gstreamer入门知识讲解, 基本都是入门知识吧,为什么这里还需要50字节啊!

2017-12-31

GStreamer讲解

对于GStreamer中一些应用程序编写,使用工具,插件编写的入门知识讲解,有兴趣的话,可以查看一下。

2016-10-30

IPU显示总结文档pdf

IPU显示总结文档pdf

2016-10-05

IPU显示总结文档后面是凑字数的

IPU显示总结文档后面是凑字数的

2016-09-01

IPU显示总结

IPU的显示总结

2016-09-01

IPU总结报告v2.0

IPU总结报告v2.0

2016-08-24

IPU总结报告v1.0

IPU总结报告v1.0

2016-08-24

寄存器位查看小工具

寄存器位查看小工具,可以查看寄存器每一位上的01数据,嵌入式必备

2015-12-07

空空如也

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

TA关注的人

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