- 博客(77)
- 资源 (14)
- 收藏
- 关注
原创 Camera2内存泄漏修复
最近公司想要使用Camera2来替换线上的旧版相机,功能调研过程中发现Camera2在很多机器上都会有奇怪的内存泄漏,比较明显的时候可能有100M+,比较常见的是表现为内存释放不及时(上涨一段时间后会有一次下降),这种现象在旧版Camera时是不存在的,内存图如下。
2024-06-27 12:35:50
485
1
原创 android高效读图方式——Hardwarebuffer读图
相对于glReadPixel的同步读取方式,安卓GLES3.0提供了更高效快速的Hardwarebuffer读图方式,Hardwarebuffer读图其原理与常用的GraphicBuffer比较类似,其实现的都是cpu数据与textureId之间的数据映射。(GraphicBuffer常用于SurfaceTexture中,例如相机使用SurfaceTexture预览数据,此时底层相机数据就是使用GraphicBuffer上传到opengl)
2024-06-03 12:11:53
1375
1
原创 windows编译ndk项目路径超出长度限制问题处理
在Windows环境下编译ndk安卓项目,有时会出现一些奇怪的编译错误,一般表现为报错部分文件xxx.o无法找到,但是同样处理的其上级目录下的文件就能正常编译通过。在build.gradle里面添加一行,buildDir = "D:/tmp/${rootProject.name}/${project.name}"有一个处理方法是制定buildDir的路径。
2024-03-06 16:35:04
602
原创 调用DeleteLocalRef的正确姿势
做安卓jni相关开发的总会在涉及到jni变量释放时怀疑人生,what? where? when? who? why? how? how much?最近碰到一个比较奇怪的问题,有一个jni方法的耗时在随着调用次数的增加而上涨,但是没有明显的内存泄漏,经过我缜密分析之后,终于解决了深埋多年的疑惑。
2023-11-07 18:19:02
746
原创 Android Camera相关
在Android 8.0以前,我们只需要关注前二者即可。在Android 8.0上, Google推出了一项Project Treble计划,旨在规范HAL接口, 简化Android的版本升级,其中一个重要改变就是, Framework层和HAL层也是通过Binder(HIDL)通信,HAL相关资源迁移到了名为(xx表示版本号)中,在不同厂商的定制系统下也可能有其他名字,定位大同小异。
2023-05-04 16:27:24
477
原创 ERROR: Unknown host CPU architecture: arm64
在编译基于Android.mk构建的android ndk项目时发现,在m1的macbook pro上会出现如下错误ERROR: Unknown host CPU architecture: arm64需要修改ndk根目录下的ndk-build文件 (推测原因是m1属于arm架构)本来故事到这里就应该结束的,奈何我是一个动手能力比较强的人,对于复制粘贴不是很擅长,但是独爱徒手敲代码,结果就敲漏了最后的 "$@",所以有了很多很奇怪的路径不对的问题...
2022-06-14 16:22:03
4542
3
原创 ubuntu初始环境搭建
在一个docker里的ubuntu很多工具都没有,我大概有这些是必须要的,先记录一下。第一步,添加源,否则apt-get无法找到软件echo "deb http://mirrors.aliyun.com/ubuntu/ XXXXX main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ XXXXX-security main restricted universe multiversedeb http:/
2022-05-22 14:06:12
304
原创 local reference table overflow问题记录
之前一直以为env->NewStringUTF创建的jstring被传递给了java后就可以不用释放了,也在很多手机上反复操作后没有发现什么问题,然后今天在一台android7.1.1的oppo老机器上折戟沉沙了。网上查了一个大佬的文章才知道android8.0做了这么大一个改动,才让我的代码这么久都没有崩溃。特此记录一下。env->NewStringUTF后是需要env->DeleteLocalRef的...
2022-05-09 12:22:51
733
原创 Android.mk error: unable to open output file ‘xxx.o‘
ndk旧编译系统(Android.mk)开发中经常遇到很奇怪的问题今天我碰到的问题就是完全摸不着头脑,以致于我最终开始怀疑自我了。问题是这样的:error: unable to open output file 'D:/sourceTree/videosystem/demo/videosystemvideosystemvideosystemvideosystemvideosystemvideosystemvideosystemvideosystem/libvideo/build/interme
2022-01-26 17:43:09
4821
1
原创 视频算法学习
当下作为视频工作者,如果不是专门的算法研究人员,可以不必懂太多的视频算法,但结合我之前长期的音视频sdk入端工作经历,视频工作者必备的算法我认为有:磨皮算法 流行特效算法(漫画脸)磨皮是作为所有秀场直播最倚重、使用最广的一种算法,很多直播app的大主播都对其美颜算法相当依赖,其重要性不言而喻,可以不一定要求能手写优化什么的,但原理一定要懂。漫画脸是很早就有很多人在做这块的一些效果,但今年开始我觉得这个算法显得尤为重要起来,因为元宇宙概念的兴起,包括facebook改名为Meta、马化腾提出的全真
2021-12-11 16:57:31
2770
原创 c++手动调用虚函数表
QueueContainer m_pIJobContainer = new QueueContainer;int64_t * ptr = reinterpret_cast<int64_t*>(m_pIJobContainer);//对象首地址指向虚函数表int64_t* vptr = reinterpret_cast<int64_t*>(*ptr);//虚函数表reinterpret_cast<void (*)()>(vptr[2])();__android_l.
2021-11-08 12:00:21
708
原创 Android测试方法论
背景:使用自动化测试脚本对性能测试相当关键,对于检测内存泄漏等性能问题帮助很大现状:目前了解到客户端使用的自动化测试脚本分如下两类,针对不同场景的测试可以添加自己的方法然后执行就可以了使用google提供的androidTest自动化测试,需要找到对应需要操作的控件id 连接手机后使用android studio打开项目工程代码Auto_script.zip后可以看到如下,点击下图类似小三角即可运行测试用例 使用shell脚本+adb工具执行一些屏幕点击和长按等事件,通..
2021-08-31 18:07:00
150
原创 error: Out of memory, malloc failed
今天使用gitpull时出现了如上提示,从最后一句“Already up to date”应该可以看出来,git pull这个操作本身是成功了的,看起来是pack操作失败了,原因就是内存溢出了。尝试找组内同事看过,他们并不会出现跟我相同的错误提示,说明应该跟我最近的某些操作相关。乍一看有点懵,gitpull也能出错,简单梳理了后,有几个疑问1.是因为什么引发了这个溢出2.pack操作到底是做什么3.要怎么解决搜索“Auto packing the reposit...
2021-06-24 21:12:26
2508
原创 问题:静态库中的jni方法找不到
前言以下所指的jni方法一律指的类似这种方法extern "C" JNIEXPORT jboolean JNICALL Java_com_yysdk_mobile_cam_TestJni_isCameraOpened(JNIEnv* env, jobject obj) { std::unique_lock<std
2021-04-14 10:25:01
965
1
原创 android视频录制与滤镜(三):grafika——Show + capture camera
硬编这块网上的demo比硬解明显少了很多,但还好。认识几个做视频编辑方面的朋友都不约而同的向我推荐了google的grafika项目。仔细看了看,发现grafika里面能用的好东西有不少,如果能够把项目中一些比较精华的部分啃下来,对于视频编辑,对于opengl的操作都会有很大的益处。言归正传,我们需要的是视频录制与滤镜功能,找了一下“show + capture camera"这个部分的内容...
2018-06-29 20:05:11
3209
原创 android多控件切换效果
控件上传到了github,https://github.com/jw20082009/piececode,主要实现的是一个继承自FrameLayout的容器控件,比较好的实现了FrameLayout的第一个子控件和最后一个子控件之前相互切换的动画(中心缩放效果),对于子控件没用任何侵入性,简单包裹即可,使用起来相当简单。可以比较方便的用于消息通知的展开和收拢以及类似效果。先上一个效果图原理原理并不...
2018-06-29 12:19:44
1457
原创 android视频录制与滤镜(二)——google官方硬编demo:
视频录制使用android视频录制与滤镜(一)中提到的wysaid/android-gpuimage-plus项目时发现这个项目使用的eclipse时候的ndk编译方式,导致看c++代码时无法自动跳转,以及无法像阅读java代码一样使用快捷键,所以就自己fork了一份,改用了cmake的方式编译jni代码 ,这样阅读起来就方便了不少,但阅读不便这些都是小问题。最大的问题在于编码效率上,这个库由于视...
2018-06-06 20:12:44
1620
原创 android视频录制与滤镜(一)
项目需求:包含实时滤镜的视频录制功能接到需求后第一感受就是gpuimage赶快用起来,github上排名第一的c++版本gpuimage是wysaid/android-gpuimage-plus这个库已经帮忙把从GPU管线中取出视频数据并编码的工作都做好了,是一个可以直接用来加滤镜录制视频的项目。唯一不足的是没有加上硬编码,帧率常年性徘徊在20以下。早听说MediaRecorder在新版本中可以s...
2018-06-05 19:38:20
3484
3
原创 git回滚commit与用户名的修改
git回滚今天碰到的一个问题,就是我commit了一次,然后git提示我用户名不对,所以我就git config --global user.name 'sss' 修改过后提交并没有产生任何作用。原来git config --global user.name 'sss'修改的是本地的配置用户名,每一次的commit操作都会去读取这个配置,并把读到的用户名写到每一次的commit
2018-01-04 22:07:59
424
原创 2017年度总结-2018总体规划
作为一个安卓工程师,2017年主要做了一些不务正业的音视频功能。加上去年的半年,整了一年半才上线了一个要死不活的app,上线才几天老板就给咔嚓了,说多了都是泪。 既然是个人总结就应该偏重总结下个人的得与失,没毛病啊,公司的总结就应该偏重对项目的贡献,个人发挥的价值。2017年度总结——完成的项目短视频录制(基于硬编码),优化思考(以下功能总结一下可分为四个点:视频采集与预览、音频采集、编码、混合
2017-12-14 19:41:26
1475
原创 android简单即时聊天sdk
android简单即时聊天sdk切换用户登录的实现联系人列表的实现聊天页的实现消息缓存与排序消息接收和分发——数据库队列和投递队列有序列表的维护切换用户登录的实现由于不同的登录用户需要有不同的联系人以及聊天记录等数据,而切换用户之后再重新登回时也应尽量保持与之前体验一致,所以比较恰当的方式是每一个登录用户建立一个以自己用户id为尾缀的database。每次用户登录成功后即可通过该登录
2017-12-08 16:33:47
2598
2
原创 java重写equals(Object obj)与重写hashCode()之间的关系
多年前,在我开始学习java语法的时候,我就听到了一条规则。重写equals方法就必须要重写hashcode方法,但是重写equals方法有一些规则,重写hashcode方法却貌似没有什么规则似的,搞的我一直都云里雾里的,总以为是equals方法的底层调用了hashcode方法之类的。时隔多年,我终于理解了为什么会有“重写equals方法就必须要重写hashcode方法”这一规则。是说ha
2017-09-20 02:19:56
443
原创 安卓沉浸式
4.4之后加入windowTranslucentStatus的属性,也就是我们可以用到状态栏的区域了。5.0由于提供了setStatusBarColor去设置状态栏颜色,但是这个方法不能在主题中设置windowTranslucentStatus属性。针对这两者的差别可以使用对应values- 来解决。根布局RelativeLayout,添加属性andro
2017-06-02 10:48:04
389
原创 svn一次添加所有未添加的文件
最近在linux下使用svn,有个蛋疼的问题就是每次有新文件添加了,但是自己并不能记得所有被添加的路径。也就无法一一的使用svn add命令添加了。然而linux下也并没有像windows中那么友好的界面操作。所幸我在网上找到了大神的遗迹,大神说“我用15分钟写出了这串命令,然后使用了他成百上千次”。我想说的是,没有大神的潇洒与坦荡,渊博的知识,我先花了15分钟迷茫无措,思
2017-04-15 15:04:30
8251
1
原创 The android gradle plugin version 2.3.0-beta4 is too old, please update to the latest version
Error:(1, 0) The android gradle plugin version 2.3.0-beta4 is too old, please update to the latest version.
2017-04-05 18:12:15
2492
原创 使用ndk工具链创建在安卓机器上的可执行文件
创建helloworld程序 #include <stdio.h>int main(){ printf("helloworld\n");} 使用工具链里的gcc工具来编译该helloworld可执行文件(需要指定sysroot) /root/android-ndk-r10/toolchains/arm-linux-androideabi-4.9/prebuilt/li
2017-04-01 15:18:04
553
原创 ffmpeg编译faac小结
这两周都在为安卓平台编译带aac编码功能的ffmpeg版本。截止今日,未编译出满意版本,时间已经过去一周有余,顿感无地自容。我的环境,ndk-r10e,ubuntu16.04lts faac1.28 x264(应该是最新版,x264的加入完全没问题),ffmpeg版本还在测试中,唯一成功过的是ffmpeg-n1.2.4。具体编译脚本与环境等我编译成功后再回来加上。希望有大神看到我的环
2017-03-21 14:55:11
3323
原创 mac下android studio一直refreshing "xxx" gradle project问题解决
我最近一个项目在行进过程中,由于某些原因,将gradle版本从2.14.1升到了3.3。从我在mac上把代码拉下来后,大概是项目刷新了有一个小时左右时间没有完成,我就把电脑合上睡觉了。第二天到公司后,我就一边工作,一边把mac丢旁边让他刷新项目,结果貌似是进入了某个死循环一样的,一直停留在refreshing "xxx" gradle project的状态,一整天都没有变过。后来我就去
2017-01-19 00:33:00
4395
原创 android调用系统播放器播放视频-小坑一个
调用系统播放器播放本地视频,很多没真正实践过的人可能也会觉得so easy,“不过就是个隐式Intent,我没用过还没听过吗”我一开始就是这么想的,以下是我从网上搜索到的调用方式:事实上,以上这种方式也可以调用出市面上某些支持的播放器,比方说我试验过的,优酷是可以被唤起的。但是系统的视频应用,我试过锤子、小米、华为都无法被唤起。原因在于uri的生成方式不对,正确姿势如下。
2017-01-17 15:03:50
11552
2
原创 ffmpeg视频关键帧提取保存为图片
本程序基于ffmpeg官方例子demuxing_decoding.c文件来改写的,可以将mp4文件分离成未编码的视频裸流和音频裸流,另外增加了提取mp4关键帧,并保存为jpg格式图片的部分代码。
2016-12-25 12:39:58
11442
2
原创 android短视频录制与头像跟随(一)
最近在为公司的短视频项目做技术预研,研究了很久发现网上关于音视频的资料实在是有点少,所以我想自己来坚持写点东西,我会尽力把这个系列写完,相信会对后来的人有点帮助,因为本人对音视频研究并不深,难免整理有错,希望理解。 在网上调研了很久安卓的视频录制,发现基本都是讲的使用MediaRecorder,来进行录制的方案,这是个使用非常简单,封装度很高的方式,最重要我不能使用它的原因
2016-12-07 21:48:22
1766
原创 内存溢出:native溢出 和 上层溢出
内存溢出有两种,native溢出和上层溢出。native溢出顾名思义,就是native代码出现的内存溢出,图片的存储貌似也是在native的内存中。这种溢出我们是无法从android studio的Monitors中的内存图上看出猫腻来的。这种情况下,可以使用命令“adb shell dumpsys meminfo 包名”,从而在adb上来查看,其中有native heap一项。
2016-11-17 10:47:05
1112
原创 android笔记(一):Adapter写法优化
第一层:一开始写Adapter的时候,我不考虑重用和inflate之类的问题,只要convertView==null,那我就从xml里面inflate一个出来。第二层:后面有一天,我偶然看到别人一篇介绍adapter通用写法的文章。通过一个写一个ViewHolder的实体类,持有item中需要被更改的所有view类,大概类似。class ViewHolder{ TextView t
2016-11-01 12:04:41
477
原创 ffmpeg(一):doc文档到底该怎么读
最近公司项目要做一些音视频直播之类的东西,开始研究ffmpeg。下载源码后打算从ReadMe和doc开始入手。发现readme下东西不多,只对各个库和工具做了一句话的描述。打开doc发现下面东西蛮多,有很多的.texi后缀结尾的文件网上查了一下,发现.texi是用的一种叫texinfo的开源文档系统,具体有什么好处,我就不瞎bb了。要想有比较好的阅读体验,可以从
2016-10-21 00:57:49
2752
原创 终端优化机制:墓碑机制和Doze
终端系统的耗电和发热一直都是一个必须提高180度注意的重点。墓碑机制:ios和wp系统都是采用该机制。当手机上一个任务被迫中断时(如有电话打入),系统记录下当前应用程序的状态后,(像把事件记录在墓碑上一样),然后中止程序。当需要恢复时,根据“墓碑”上的内容,将程序恢复到中断之前的状态。这种机制对于一些需要后台持续运行的程序可能会有些影响,比如即时通信类应用。针对这种问题,两家系统都是通
2016-10-17 10:03:58
1616
原创 一种安全的前后端数据交互方案
加密方案:AES + RSA两种加密方式混合使用,能够实现数据的全程加密(无论是上传,还是拉取)。1、从客户端动态生成16位AES密码2、使用第一步生成的AES密码加密要上发的请求数据,由于AES加密后是byte[]数据,所以这里还需要使用base64封装一层以方便传输。格式大概如下:{ "key":"1234567890123456" "data":"5rWL
2016-10-13 16:56:56
9327
3
原创 React native:我的windows环境
根据官网指导,直到能在命令行运行helloworld。因为我本身已经有了安卓的原生开发环境,那部分就不多说了。对于原生代码的开发工具依旧使用android studio就可以了。但是react native的开发我使用了webstorm 2016.2.2,刚开始使用的时候在使用webstorm打开index.android.js等文件时会报错,需要在settings — Lan
2016-08-24 16:35:33
369
原创 React做一个数秒表
程序来源于React官网,写在这里仅仅只为了温习。欢迎来喷。第一步:引入react.js(或者react.min.js)第二步:引入react-dom.js(或者react-dom.min.js)第三步:引入brower.js,或者直接使用https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.min
2016-08-23 17:31:34
2793
ApplicationID_versus_PackageName译文
2016-05-19
Java经典问题算法大全.pdf
2013-07-18
ecshop开发教程资料大全
2013-06-03
libmySQL.dll
2013-03-13
CSS简明教程
2013-02-26
十天学会DIV+CSS(WEB标准).chm
2013-02-26
梦哈日历控件
2012-07-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人