Android
bencharluo
Android
展开
-
android中if判断引起的crash
在Android debug过程中有如下的crash.11-05 03:11:24.271 1262 1262 F DEBUG : #00 pc 00022234 /system/lib/libstagefright_omx.so (android::OMXNodeInstance::onEvent(OMX_EVENTTYPE, unsigned int, unsigne转载 2015-11-05 19:15:43 · 773 阅读 · 0 评论 -
Android Surface相关常见问题
1.当Surface发生变化时需要重新设置宽高SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback() { public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { ... holder.set原创 2016-02-29 11:07:00 · 753 阅读 · 0 评论 -
Android Media显示的层次
Main/Sub/GfxSurfaceTexture是由apk直接创建的原创 2015-10-30 17:36:17 · 975 阅读 · 0 评论 -
Android中一些常见的进程
init进程:第一个进程原创 2015-05-20 12:44:57 · 473 阅读 · 0 评论 -
Android systrace使用
在Android debug过程中,有一些特殊情况(比如某个操作后,画面不平滑,已经查看过frame drop的原因,但没有头绪),需要使用systrace来查看CPU/进程/线程的运行情况.1.安装python2.7或以上可执行版本,并将可执行档路径加入环境变量。2.在Dos环境下输入python验证环境变量是否生效3.安装Android Sdk tools4.在Sdk tool原创 2017-05-11 16:07:01 · 738 阅读 · 0 评论 -
Android消息处理
Alooper负责创建线程Ahandler负责创建Amessage消息并透过ALooperRoster传给Alooper放到messagequeueAlooper的run方法不停执行,从messagequeue里面获取第一个消息,通过ALooperRoster再返回给Ahandler处理。ALooperRoster负责将所有消息区分开然后再丢回给对应的Ahandler来处理原创 2017-05-09 20:17:57 · 383 阅读 · 0 评论 -
Android MediaCodec学习
MediaCodec:setCallback:APK通过这个函数设置回调信息,当MediaCodec中需要回调信息给APK时就通过这个callback回调。MediaCodec:onInputBufferAvaible:MediaCodec通过上面的回调告诉APK当前有可用的input bufferMediaCodec:queueInputBuffer:Medi原创 2016-02-29 20:24:27 · 1275 阅读 · 0 评论 -
Android OMXNodeinstance/OMX Component交互
OMXNodeInstance.cpp:OMX_CALLBACKTYPE OMXNodeInstance::kCallbacks = { &OnEvent, &OnEmptyBufferDone, &OnFillBufferDone};OMX.cppstatus_t OMX:allocateNode...OMX_ERRORTYPE err = mMaste原创 2017-05-12 10:51:09 · 2661 阅读 · 0 评论 -
Android CSD信息传递flow
对于某些格式,会要求实际数据以特性的开头为前缀(CSD data)[Codec-special data]。这些数据最终会通过MediaCodec configure来传递。使用MediaCodec,会使用Android自带extractor/Vendor厂商扩展extractor或者apk自带extractor.前两种extractor,会调用Utils.cpp里面的convertMet原创 2017-05-12 11:33:48 · 836 阅读 · 0 评论 -
Android Media相关标准接口
hwc/gralloc相关android根目录\hardware\libhardware\include\hardware\surfaceflingerandroid根目录\frameworks\native\services\surfaceflinger\guiandroid根目录\frameworks\native\libsopengland原创 2016-02-29 10:13:08 · 536 阅读 · 0 评论 -
Android MediaServer初始化流程
Android M版framework/av/media/mediaserver/1.Main_mediaserver.cpp main()->创建mediaserver进程2.创建各种service:MediaPlayerService/ResourceManagerService原创 2016-03-22 22:22:32 · 1810 阅读 · 1 评论 -
Android ANR问题分析
当APK因为ANR退出时,在/data/anr目录下会生成traces.txt,通过这个log通常可以看出卡住的callstack.一般开始的第一个callstack就是:"main" prio=5 tid=1 Native | group="main" sCount=1 dsCount=0 obj=0x737a0fa0 self=0xb88f8350 | sysTid原创 2016-01-21 20:37:26 · 1308 阅读 · 0 评论 -
Android thumbnail显示逻辑
Android显示thumbnail是通过调用getFrameAtTime(StagefrightMetadataRetriever.cpp)来实现的。通过OMXCodec::kPreferSoftwareCodecs来优先选用software.extractVideoFrame里面透过decoder->dequeueOutputBuffer来获取decoder解码好的frame,原创 2015-12-23 15:43:56 · 893 阅读 · 0 评论 -
Android M Media学习
相较L版本,增加了FRAME_RENDERED的OMX Component notify message. For Tunneled Playback.原创 2016-01-25 14:34:28 · 607 阅读 · 0 评论 -
Android apk退出时与OMX Component之间的交互
当Android apk退出时,会将apk手上的buffer全部drop掉,另外发flush给OMX Component. OMX Component发stop command给codec driver[使codec driver不在理会被上层占住的buffer]. 得到反馈后OMX Component将手上握有的buffer全部归还给media framework.原创 2016-01-25 14:37:01 · 624 阅读 · 0 评论 -
Android ACodec学习
enum PortMode { KEEP_BUFFERS, RESUBMIT_BUFFERS, FREE_BUFFERS,}Android ACodec会根据当前处于哪个state来决定buffer如何处理。KEEP_BUFFERS:当ACodec处于BaseState或者收到OnInputBufferFilled消息但是buffer里面没有填有效数据的时原创 2016-03-03 10:20:51 · 4501 阅读 · 0 评论 -
Anrdoid media中input buffer读取与控制
APK 通过extractor获取文件中的max-input-size并通过configCodec设给MediaCodec/ACodec.ACodec用max-input-size同allocated input buffer size做比较,如果前者大于后者则返回失败。extractor按照自己的逻辑去抓取每一帧数据,extractor中最大的数据size设为max-input-原创 2016-02-25 23:06:06 · 742 阅读 · 0 评论 -
Exoplayer学习
DQ input->Q input->DQ input time out->DQ output->...->DQ output time-out->render/frame-drop->DQ input原创 2016-02-25 23:10:12 · 1488 阅读 · 1 评论 -
Android media播放卡顿问题分析流程
首先是看Audio是否卡顿,若Audio卡顿,则优先分析Audio.待Audio问题处理结束后,再看Video是否正常。对于non-tunnelplayback, 首先考虑apk是否有frame drop.若有,则主要考虑送数据是否慢以及driver解图是否慢。1.检查当前播放码流fps值,然后检查ACodec FBD是否有达到预期fps值。2.若FBD没有达到,则分析omx co原创 2017-05-09 20:55:16 · 5851 阅读 · 1 评论