![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
手机相关
文章平均质量分 51
利明的博客
自古风云出我辈,一如江湖岁月催。
展开
-
Android ACodec状态机模型
Android 的ACodec 用于管理底层各个Component的各种状态采用了设计模式中的状态机模式一共有九种状态,搞明白各种状态之间的转换逻辑,对于我们再去读代码会有比较好的帮助交互逻辑如下:...原创 2020-02-03 01:55:33 · 1125 阅读 · 0 评论 -
[Android Video Framework] MediaCodec.cpp详解
MediaCodec是Android Video Framework中一个很重要的类,可以被NuPlayer直接使用也可以被MediaCodec.java通过JNI的方式直接调用,可以赋予app很高的自由性,是多媒体开发中的一个很重要的类1、创建创建MediaCodec有两种方式,一种是 CreateByType, 根据应用或NuPlayer传递下来的MIME来创建;另一种是 Creat...原创 2019-01-31 17:59:18 · 3738 阅读 · 6 评论 -
[Android Video Framework]ACodec加载OMX
OpenMAX确立了一套标准的接口,上层App直接调用这些接口,底层硬件厂商直接实现这些接口,从而实现了上层软件开发与底层芯片开发地彻底分离,加速了跨平台的多媒体组件的开发、整合和编程。Android上的MediaCodec是通过ACodec来加载openmax层,了解OMX加载过程,有助于我们更好的分析问题和解决问题加载过程还需从ACodec::UninitializedState::on...原创 2019-01-31 20:54:29 · 3017 阅读 · 0 评论 -
常见NuPlayer错误log根因
1、 NuPlayerRenderer中 onDrainAudioQueue(): audio sink is not ready遇到情况是由于 AudioOutput::getPosition 返回err导致1.1 可能是由于 sp<MediaPlayerBase::AudioSink> mAudioSink 中的 mTrack 为 null当 NuPlayerDecoder ...原创 2019-01-22 17:17:02 · 1114 阅读 · 0 评论 -
[Android Video FrameWork] OMXNodeIntance中动态控制log的一种方法
从事此行业N年,遇到问题上去先是一通王八拳,能把问题打死,就继续找下一个问题的茬,如果打不死,就再打一套王八拳,直至打死问题为止。王八拳(不成体系的定位方法和手段)对付问题有效果,但是效率低,我的王八拳主要是:加log,编译,替库,运行,看log, 加log,编译,替库,运行,看log……运用这种磨豆腐的磨劲,磨死了好多问题,但 碰到流程套路深的框架和体系,这个效率实在实在是太低了,有...原创 2019-02-03 14:31:56 · 3213 阅读 · 3 评论 -
QCom Decoder与GoogleDecoder输出buffer的分配方式
1、QComDecoder输出buffer的分配方式ACodec通过 allocateOutputMetadataBuffers接口来分别输出buffer,分配一个空的VideoGrallocMetadata 结构体,复制给OMX_BUFFERHEADERTYPE结构体中的pBuffer解码启动时,ACodec从NativeWindow中dequeue出ANativeWindowBuffer...原创 2019-02-15 19:47:36 · 440 阅读 · 0 评论 -
编译Android的x264 lib(附解决No working C compiler found 问题)
尝试编译android版本的x264 lib一 取 x264最新版的源码方法有二:1 直接 git clone 最新版的代码git clone https://code.videolan.org/videolan/x264.git2 上官网下载最新代码压缩包,解压到本地https://www.videolan.org/developers/x264.html二 写编译脚本#!/bi...原创 2019-03-23 17:07:16 · 2361 阅读 · 0 评论 -
产品.mk控制android.bp选择性编译
先前写了一篇文章介绍如何使用go语言去控制 Android.bp 选择性编译, 见https://blog.csdn.net/u012188065/article/details/86226934后来发现, go脚本中只能调用 build/soong/android/config.go 里面规定好的函数如果我们需要增加自己的函数, 就需要打通整个通路, 通路如下:...原创 2019-04-17 11:12:24 · 3023 阅读 · 1 评论 -
一种判断Android app窗口是否全屏的方法
app在手机上运行时,默认打开时是全屏的,所以获取的窗口尺寸为手机的屏幕尺寸如果手机连接到大屏上(如华为手机,锤子手机等),打开的app不一定是全屏的,获取的窗口尺寸就不是全屏尺寸,下面介绍一直方法,可以判断是否全屏WindowManager mWm = (WindowManager)this.getSystemService(Context.WINDOW_SERVICE);int mFu...原创 2019-07-14 19:43:53 · 2662 阅读 · 0 评论 -
【Android开发入门】二:更名、换图标、实现主界面
1 修改app 图标和 name默认app图标特别丑, 假如我们要做一个自己的微信,网上搜索微信的icon,注意一定要下载png格式的图标因为png有alpha透明通道,这样微信图标可以很容易的和各个手机的背景主题融为一体,png和jpg的区别可以参考此文章素材可以从这里下载下载不同尺寸的微信图标后,我rename 为 icon.png,并放置于 res 下不同的 mipmap文件中...原创 2019-01-17 19:28:04 · 877 阅读 · 0 评论 -
【Android开发入门】一:学会“Hello World”
随笔1、在Android Studio写第一个APP打开android studio, File-&amp;amp;gt;New-&amp;amp;gt;New Project设置 Application name(应用名), Company domain(公司域名), Project location(工程位置)一直默认next下去即可注意此处千万不要选择 Add No Activity,否则所有的资源布局等...原创 2019-01-17 13:52:20 · 374 阅读 · 0 评论 -
go语言控制android.bp选择性编译
为了降低工作量以及考虑到产品的可维护性,大部分手机厂商采用了同一套android代码对应多个产品,编译时根据配置参数选择性编译不同模块的代码。最初android的编译脚本为Android.mk,采用了Makefile的语言为了控制编译,我们可以在不同产品的BoardConfig.mk中定义 MARCO之后在Android.mk中,根据是否使用MARCO来确定编译选项以及编译代码块ifeq ...原创 2019-01-10 13:17:42 · 13809 阅读 · 0 评论 -
【Android AudioFrameWork】 device的选择
Android AudioFrameWork中device的选择1 streamType简介2 routing_strategy 简介3 device简介4 device的选择策略4.1 固有device来源于xml:4.2 可增删设备来源于手机插拔上报事件手机上的音频模块是一个很复杂的系统,为了区分和管理,android中引入了streamType, routing_strategy和dev...原创 2018-10-24 15:55:56 · 2575 阅读 · 0 评论 -
Android手机gdb调试
众所周知,linux上gdb是一个功能非常非常强大的工具,纵然使用多年,回头一看,仍然觉得还是掌握了很小很小一部分的代码。android是基于linux的平台,所以google在android上开发了很多类linux的调试工具,如arm-linux-androideabi-gcc-ar, arm-linux-androideabi-gcc, arm-linux-androideabi-g++ 等等...原创 2018-11-06 13:58:04 · 6585 阅读 · 2 评论 -
C++中子类与父类的内存分别情况
1. unbunt上C++子类与父类内存的分别情况1.1 只有一个父类的情况1.1.1 上代码#include <stdio.h>class A {public: A() {}; ~A() {}; int a; int b;};class B : public A {public: ...原创 2018-11-02 14:05:47 · 2004 阅读 · 0 评论 -
audio_policy_configuration.xml 解析
android的audioserver 进程启动时,会创建AudioPolicyManager,洋洋洒洒数千行的其构造函数,第一步就是加载配置相关的xml。#define AUDIO_POLICY_XML_CONFIG_FILE_PATH_MAX_LENGTH 128#define AUDIO_POLICY_XML_CONFIG_FILE_NAME &amp;amp;amp;amp;amp;quot;audio_policy_config...原创 2018-11-15 16:31:18 · 9122 阅读 · 3 评论 -
常用android命令备忘录
1. 常用基本命令adb devices 查看当前挂载手机设备的信息adb root root userdebug版本的手机。adb remount 将 '/system' 目录改为可写入的模式,默认情况下 '/system' 部分是只读模式的。 这个命令只适用于已被 root 的设备, 即调用过 adb root之后。 注意,使用其他命令之前,最好先使用adb root和adb ...原创 2018-11-19 18:51:35 · 922 阅读 · 0 评论 -
【Android AudioFrameWork】AudioPolicyManager loadHwModule详解
AudioPolicyManager 构造函数中,第一步是解析audio policy相关的xml文件,第二部就是根据xml中hal的name来加载对应的audio hal,直接上loadHwModule的流程图(以android 8.1.0版本为例).局部函数详解:1、load 函数打开对应.so后,加载 struct audio_module HAL_MODULE_INFO_SYM ...原创 2018-11-27 20:16:45 · 1867 阅读 · 1 评论 -
使用调用栈来调试Android代码
Android代码流程比较复杂,单纯看代码很容易跟丢,如果能在对应位置增加调用栈函数,运行时,我们可以根据调用栈来退出安卓代码的调用流程,可以事半功倍。1、java代码java代码中加调用栈方法很简单,抛一个异常即可。import android.util.Log;Log.i(TAG, Log.getStackTraceString(new Throwable()));注意,有的jav...原创 2018-11-30 20:37:06 · 721 阅读 · 0 评论 -
生成过程中EVT, DVT, PVT分别是什么意思
转自 https://zhidao.baidu.com/question/216423280.htmlEVT: Engineering Verification Test 工程验证测试 产品开发初期的设计验证。设计者实现样品时做初期的测试验证,包括功能和安规测试,一般由RD(Research&amp;Development)对样品进行全面验证,因是样品,问题可能较多,测试可能会做N次。 ...转载 2018-07-16 10:43:10 · 14627 阅读 · 0 评论