自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 产品.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

阅读数 485

评论数 0

原创 FFMPEG专题--常用命令

1、播放视频 1.1 播放指定视频 ffplay -i test.mp4 1.2 以特定大小的窗口播放视频 如 以640x480的窗口来播放指定视频 ffplay -x 640 -y 480 -i test.mp4 2、转码视频 2.1 更改文件的封装格式 如 mp4-&...

2019-01-30 15:32:37

阅读数 90

评论数 0

原创 Android ACodec状态机模型

Android 的ACodec 用于管理底层各个Component的各种状态 采用了设计模式中的状态机模式 一共有九种状态,搞明白各种状态之间的转换逻辑,对于我们再去读代码会有比较好的帮助 交互逻辑如下: ...

2020-02-03 01:55:33

阅读数 9

评论数 0

原创 AudioFlinger内部的Thread和Track的分类

2019-12-18 17:24:58

阅读数 17

评论数 0

原创 [算法相关]几种常用的排序算法

这里写自定义目录标题1. 冒泡排序法2. 选择排序法3.快速排序法 1. 冒泡排序法 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从从Z到A)错误就把他们交换过来。走访元素的工作是重...

2019-12-14 22:38:42

阅读数 5

评论数 0

原创 一种判断Android app窗口是否全屏的方法

app在手机上运行时,默认打开时是全屏的,所以获取的窗口尺寸为手机的屏幕尺寸 如果手机连接到大屏上(如华为手机,锤子手机等),打开的app不一定是全屏的,获取的窗口尺寸就不是全屏尺寸, 下面介绍一直方法,可以判断是否全屏 WindowManager mWm = (WindowManager)thi...

2019-07-14 19:43:53

阅读数 257

评论数 0

原创 Android布局控件之RelativeLayout

我们使用LinearLayout和TableLayout可以满足开发应用程序界面基本的要求。但是有时候实现界面的时候不够灵活,我们还可以使用另外一种控件RelativeLayout。RelativeLayout是一种相对布局的控件,这个容器内部的子元素们可以使用彼此之间的相对位置或者和容器间的相对...

2019-07-08 14:59:42

阅读数 139

评论数 0

原创 Android Activity与Serivce的通信方式之一LocalBinder

Activity与Service的通信方式有三种: 其中第一种也是最简单的一种, 即LocalBinder方式 特点, Activity和Service位于同一个进程内, 简单,方便,可以实现activity和service之间的函数互相调用. service提供给activity的函数,我放到了...

2019-06-22 12:54:19

阅读数 81

评论数 0

原创 [Linux相关] mount(2) system call failed: Operation not supported 解决方案

新装了linux 18.04后, 挂载其他盘时,遇到了如下错误 $sudo mount -t cifs -o username=xxx //172.16.x.xxx/SW_Test/ /media/SW_TEST mount: /media/SW_TEST: mount(2) system cal...

2019-05-15 12:54:04

阅读数 1166

评论数 0

原创 [git相关] 如何将开源代码包含git记录提到自己的git仓上

原理比较简单,就是让开源代码的远程仓指向要push的远程仓,之后再提交. 以x264代码为例 1. 下载x264代码 git clone https://code.videolan.org/videolan/x264.git 2. 查看x264代码远程指向 $git remote -v origi...

2019-03-25 16:06:48

阅读数 104

评论数 0

原创 编译Android的x264 lib(附解决No working C compiler found 问题)

尝试编译android版本的x264 lib 一 取 x264最新版的源码 方法有二: 1 直接 git clone 最新版的代码 git clone https://code.videolan.org/videolan/x264.git 2 上官网下载最新代码压缩包,解压到本地 ht...

2019-03-23 17:07:16

阅读数 261

评论数 0

原创 FFMPEG Filters模块调用概述

以 ffplay -i linmeimei.rm -vf “trim=duration=5[tmp], [tmp]reverse” 详细说明 avfilter的使用步骤, 内部架构,以及数据的流向. 第一步: 注册所有支持的Filters avfilter_register_all(); ...

2019-03-18 11:40:04

阅读数 97

评论数 0

原创 FFMPEG-Filter学习笔记-3

本文主要介绍audio filter 的用法 以及一些fliter参数的感想 Audio Filter 7.1 acompressor - 音频压缩器 7.1.1 level_in 设置输入增益,默认为1, 可取范围为 [1/64, 64] 具体表现为,增益越大,声音越高,但是相应的噪声也会被放大...

2019-03-12 13:43:31

阅读数 24

评论数 0

原创 FFMPEG-Filter学习笔记-2

本文主要介绍video filter 的用法 Video Filter 10.1 alphaextract - 提取 alpha通道的filter 毋庸置疑,这个filter用于提取alpha通道的,当然只针对有alpha的视频才起作用, 即颜色格式为 rgba, yuva422p等视频,...

2019-03-08 19:16:59

阅读数 68

评论数 0

翻译 FFMPEG-Filter学习笔记-1

1 Description This document describes filters, sources, and sinks provided by the libavfilter library. 这个文件描述libavfilter库提供的filters, sources 和 sinks....

2019-02-24 22:52:44

阅读数 153

评论数 0

原创 QCom Decoder与GoogleDecoder输出buffer的分配方式

1、QComDecoder输出buffer的分配方式 ACodec通过 allocateOutputMetadataBuffers接口来分别输出buffer, 分配一个空的VideoGrallocMetadata 结构体,复制给OMX_BUFFERHEADERTYPE结构体中的pBuffer 解码...

2019-02-15 19:47:36

阅读数 84

评论数 0

原创 [Android Video FrameWork] OMXNodeIntance中动态控制log的一种方法

从事此行业N年,遇到问题上去先是一通王八拳,能把问题打死, 就继续找下一个问题的茬,如果打不死,就再打一套王八拳,直至打死问题为止。 王八拳(不成体系的定位方法和手段)对付问题有效果,但是效率低, 我的王八拳主要是: 加log,编译,替库,运行,看log, 加log,编译,替库,运行,看l...

2019-02-03 14:31:56

阅读数 471

评论数 3

原创 【多媒体基础】封装协议之AMR

AMR (Adaptive Multi-Rate) 是一种用于语音、演讲的音频压缩编码规范,同时也是一种封装amr帧的封装规范。 我们主要介绍其封装协议。 AMR主要分为两种, AMR-WB (宽带AMR, AMR Wideband) 和 AMR-NB(窄带 AMR, AMR Narrowb...

2019-02-02 19:58:19

阅读数 155

评论数 0

原创 [Android Video Framework]ACodec加载OMX

OpenMAX确立了一套标准的接口,上层App直接调用这些接口,底层硬件厂商直接实现这些接口, 从而实现了上层软件开发与底层芯片开发地彻底分离,加速了跨平台的多媒体组件的开发、整合和编程。 Android上的MediaCodec是通过ACodec来加载openmax层,了解OMX加载过程,有助...

2019-01-31 20:54:29

阅读数 649

评论数 0

原创 [Android Video Framework] MediaCodec.cpp详解

MediaCodec是Android Video Framework中一个很重要的类,可以被NuPlayer直接使用 也可以被MediaCodec.java通过JNI的方式直接调用,可以赋予app很高的自由性, 是多媒体开发中的一个很重要的类 1、创建 创建MediaCodec有两种方式,...

2019-01-31 17:59:18

阅读数 555

评论数 3

原创 常见NuPlayer错误log根因

1、 NuPlayerRenderer中 onDrainAudioQueue(): audio sink is not ready 遇到情况是由于 AudioOutput::getPosition 返回err导致 1.1 可能是由于 sp<MediaPlayerBase::Audio...

2019-01-22 17:17:02

阅读数 146

评论数 0

原创 【Android开发入门】二:更名、换图标、实现主界面

1 修改app 图标和 name 默认app图标特别丑, 假如我们要做一个自己的微信,网上搜索微信的icon,注意一定要下载png格式的图标 因为png有alpha透明通道,这样微信图标可以很容易的和各个手机的背景主题融为一体, png和jpg的区别可以参考此文章 素材可以从这里下载 下载不同尺寸...

2019-01-17 19:28:04

阅读数 141

评论数 0

原创 【Android开发入门】一:学会“Hello World”

随笔 1、在Android Studio写第一个APP 打开android studio, File->New->New Project 设置 Application name(应用名), Company d...

2019-01-17 13:52:20

阅读数 42

评论数 0

原创 go语言控制android.bp选择性编译

为了降低工作量以及考虑到产品的可维护性,大部分手机厂商采用了同一套android代码对应多个产品,编译时根据配置参数选择性编译不同模块的代码。 最初android的编译脚本为Android.mk,采用了Makefile的语言 为了控制编译,我们可以在不同产品的BoardConfig.mk中定义...

2019-01-10 13:17:42

阅读数 2445

评论数 0

原创 [Git相关] 常用git命令备忘

1、初始化 git init 初始化git 仓 git add <file> 添加改动文件至暂存区(stage) git ...

2019-01-07 15:41:07

阅读数 48

评论数 0

原创 Android上不可思议的MetaData::findInt32相关crash

Android上经常可以碰到一些不可思议的crash,初看没有什么思路,如果从持锁竞争角度来看,两个线程同时操作同一个变量,便会有不可思议的crash 如: /system/lib/libc.so (abort+63) /system/lib/liblog.so (__android_lo...

2018-12-12 20:08:37

阅读数 224

评论数 0

原创 使用调用栈来调试Android代码

Android代码流程比较复杂,单纯看代码很容易跟丢,如果能在对应位置增加调用栈函数,运行时,我们可以根据调用栈来退出安卓代码的调用流程,可以事半功倍。 1、java代码 java代码中加调用栈方法很简单,抛一个异常即可。 import android.util.Log; Log.i(TAG, L...

2018-11-30 20:37:06

阅读数 110

评论数 0

原创 【Android AudioFrameWork】AudioPolicyManager loadHwModule详解

AudioPolicyManager 构造函数中,第一步是解析audio policy相关的xml文件,第二部就是根据xml中hal的name来加载对应的audio hal,直接上loadHwModule的流程图(以android 8.1.0版本为例). 局部函数详解: 1、load ...

2018-11-27 20:16:45

阅读数 378

评论数 0

原创 linux 高效命令备忘录

在使用过程中,备忘各种高效的命令 1、locate 命令 最初在android代码中查找文件使用find命令,后来发现android代码越来越多,有时搞不准在哪个大目录下, 只好在android代码的根目录下搜索,非常慢,非常影响工作效率,为了实现提高效率,早搬完砖早下班的心态,积极搜索其他高效命...

2018-11-19 21:00:25

阅读数 113

评论数 0

原创 常用android命令备忘录

1. 常用基本命令 adb devices 查看当前挂载手机设备的信息 adb root root userdebug版本的手机。 adb remount 将 '/system' 目录改为可写入的模式,默认情况下 '/system' 部分是...

2018-11-19 18:51:35

阅读数 196

评论数 0

原创 audio_policy_configuration.xml 解析

android的audioserver 进程启动时,会创建AudioPolicyManager, 洋洋洒洒数千行的其构造函数,第一步就是加载配置相关的xml。 #define AUDIO_POLICY_XML_CONFIG_FILE_PATH_MAX_LENGTH 128 #define...

2018-11-15 16:31:18

阅读数 2553

评论数 0

原创 Android手机gdb调试

众所周知,linux上gdb是一个功能非常非常强大的工具,纵然使用多年,回头一看,仍然觉得还是掌握了很小很小一部分的代码。android是基于linux的平台,所以google在android上开发了很多类linux的调试工具,如arm-linux-androideabi-gcc-ar, arm-...

2018-11-06 13:58:04

阅读数 1965

评论数 1

原创 C++中子类与父类的内存分别情况

1. unbunt上C++子类与父类内存的分别情况 1.1 只有一个父类的情况 1.1.1 上代码 #include <stdio.h> class A { public: A() {}; ~A() {}; int ...

2018-11-02 14:05:47

阅读数 368

评论数 0

原创 【Android AudioFrameWork】 device的选择

Android AudioFrameWork中device的选择1 streamType简介2 routing_strategy 简介3 device简介4 device的选择策略4.1 固有device来源于xml:4.2 可增删设备来源于手机插拔上报事件 手机上的音频模块是一个很复杂的系统,...

2018-10-24 15:55:56

阅读数 661

评论数 0

原创 常见问题解决方案

1、 git clone时,Recv failure: 连接被对方重设 git clone https://android.googlesource.com/platform/frameworks/av 正克隆到 ‘av’… fatal: unable to access ‘https:/...

2018-09-12 10:56:50

阅读数 112

评论数 0

原创 今天犯了两个ffmpeg相关的错误

1、 av_dict_get 的正确用法 正确用法1: AVDictionaryEntry *tag = NULL; tag = av_dict_get(st->metadata, “width”, tag, AV_DICT_MATCH_CASE); 正确用法2:AVD...

2018-08-13 21:47:59

阅读数 163

评论数 0

转载 生成过程中EVT, DVT, PVT分别是什么意思

转自 https://zhidao.baidu.com/question/216423280.html EVT: Engineering Verification Test 工程验证测试 产品开发初期的设计验证。设计者实现样品时做初期的测试验证,包括功能和安规测试,一般由RD(Res...

2018-07-16 10:43:10

阅读数 2160

评论数 0

原创 【Android小知识】 getprogname()函数的由来

在android开发中,我们会经常用到 getprogname()函数去debug。 这个函数太好用了,以至于我们经常会根据这个函数返回的应用进场名来区分不同的进程。 那么那个函数实现的位置在哪呢? 首先,查找声明的地方 我们我需要知道这个函数声明的地方,需要预编译代码,后去函数声明的...

2018-05-28 14:42:37

阅读数 661

评论数 0

原创 编码算法之指数哥伦布编码

引言最近在看H.264/AVC的一些编码信息,印象最深的就是sps,pps 中的指数哥伦布(Golomb)熵编码算法,从网上搜了一些内容,发现讲解的不是很详细,所以自己总结一下便于自己查看sps,pps中常用的指数哥伦布编码算法有 1、无符号指数哥伦布熵编码 ue(v) 2、有符号指数哥伦布熵...

2016-12-12 23:06:21

阅读数 3299

评论数 0

原创 多媒体封装协议之Matroska封装协议介绍

一、背景介绍Matroska多媒体容器(Multimedia Container)是一种开放标准的自由的容器和文件格式,是一种多媒体封装格式,能够在一个文件中容纳无限数量的视频、音频、图片或字幕轨道。所以其不是一种压缩格式,而是Matroska定义的一种多媒体容器文件。其目标是作为一种统一格式保存...

2016-11-20 22:18:34

阅读数 448

评论数 1

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