Android Multimedia 相关

_________________________________________________________________________________________

添加自己的codec

1. 根据规范创建OMX IL component. 相关头文件路径:frameworks/native/include/media/OpenMAX/OMX_Component.h
2.根据规范创建OMX plugin. 相关头文件路径:frameworks/native/include/media/hardware/OMXPluginBase.h
   plugin 用于将 component 和 android stagefright service 相关联。

将自定义的codec信息告知app framework

stagefright service 会parse  system/etc/media_codecs.xml 和 system/etc/media_profiles.xml 文件生成类
android.media.MediaCodecList  和 android.media.CamcorderProfile,通过该种方式向APP framework
提供相关信息。

_________________________________________________________________________________________

surfaceflinger 是安卓的一个系统服务。将所有的应用的surface和系统的surface排列组合成一个最终用于显示的surface。 
system surfaces 包括状态条、浏览条、屏幕翻转时系统产生的surface。 surfaceflinger 的路径:frameworks/native/services/surfaceflinger
surfaceflinger 会从activitymanger 接收到 activity info, 从 windows manger 接收到 visiblity Z-order等相关信息。
bufferqueue 的路径: frameworks/native/include/gui/BufferQueue.h。这是android中用来传递GraphicBuffer 的机制。 bufferqueue
的slot大小限制在[2, 32], bufferqueue提供了两个binder接口:IGraphicBufferProducer, IGraphicBufferConsumer。

Buffer Queue 状态变换图


_________________________________________________________________________________________

JNI

java native method 转成C函数之后会额外得到两参数:
1. JNI Interface (environment) pointer   JNIEnv * env
2. Object or class parameter     instance methods: jobject thisObj   class methods: jclass theClass
jni.h 中定义了很多的函数用来支持java data type, objects, classes在C C++中的使用。 JNIEnv * env这个参数就是用来提供对jni中提供的方法的访问。
例如可以使用C C++语言来反序JAVA中的String.
通过使用native method 可以在C C++ 语言中修改JAVA类中成员变量和类变量,protected private修辞的也可以被修改。
jfieldID (JNICALL *GetFieldID)  (JNIEnv *env, jclass clazz, const char *name, const char *sig);
jfieldID (JNICALL *GetStaticFieldID)  (JNIEnv *env, jclass clazz, const char *name, const char *sig);
修改变量的值需要类的信息、变量名称、类型名称。变量名称决定offset、类型名称决定size。
例如可以使用C C++语言来修改JAVA中类的private成员变量和类变量.
通过native method 可以在C C++中调用JAVA类的成员函数,包括protected private修辞的函数。

_________________________________________________________________________________________

参考资料

https://source.android.com/devices/media.html点击打开链接
https://quandarypeak.com/2013/08/androids-stagefright-media-player-architecture/点击打开链接
http://stackoverflow.com/questions/15356629/how-to-create-a-stagefright-plugin点击打开链接
https://source.android.com/devices/graphics/点击打开链接
http://www.slideshare.net/BinChen3/android-graphic-system-surface-flinger-patternsperspective-external-version点击打开链接
http://www.slideshare.net/jserv/design-and-concepts-of-android-graphics?related=1点击打开链接
http://bigflake.com/mediacodec/#overview点击打开链接
http://stackoverflow.com/questions/2550847/streaming-video-from-android-camera-to-server点击打开链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值