自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JabamiYu的博客

研究总结与进步

原创 Vue组件之间的两种常用通信方式

最近都一直学习Vue的知识,看了不少视频,之前完全不了解前端知识,所以还是遇到很多困难。 总结一下Vue中的传值问题。这里使用的demo直接vue init webpack-simple **** 命令初始化的。 父子组件 1、父组件传递给子组件 ...

2019-10-31 17:21:26 48 0

原创 Mac mojave 10.14.6 安装brew碰到的小问题

之前想安装Flutter的环境,安装brew的时候碰到一个小问题,因为是新装的Mac系统,所以之前的没碰到过,记录一下以示尊重。 /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/m...

2019-08-12 18:26:48 752 0

原创 Android简单实现嘴唇贴纸功能

大家新年快乐!!过年总是这么短暂,新年新气象,这篇文章本年年前准备发的,过年嘛,总会懒一些,哈哈哈哈。今天我们来简单实现一个嘴唇的贴纸功能,先看看效果。 其实大部分APP的完整功能包含脸部,鼻子,眼镜等的完整渲染,不过原理都类似,我就只用一个嘴唇来抛砖引玉了。看这篇文章之前,需要了解NDK、...

2019-02-12 11:06:23 1225 7

原创 简单移植dlib和opencv到Androd平台进行人脸检测

最近实在是忙于项目,太久都没有写博客了,结果一不小心竟然过了几个月了。既然有空就多写点东西,交流交流经验,总归是没有坏处的。 之前一直想做一下人脸检测,网上一大堆SDK全是收费的,而且基本上都不是本地检测。后来总算找到了dlib来进行人脸识别,踩了不少坑之后,总算是集成了上去。但是官方的demo...

2018-12-05 09:48:30 1389 2

原创 Android关于H.264的软编和硬编

第六章的最后一篇分析了,之前分析摄像头预览画面的流程https://blog.csdn.net/a568478312/article/details/80725180。这里主要就是分析编码方面的核心代码。 软编 创建编码器,并开启编码和下载线程。 我们在得到相机纹理,并且经过一系列的处理...

2018-07-12 21:18:20 1444 0

原创 ARM NEON指令集总结

ARM的NEON是类似于X86的SSE2的一种优化的指令集,主要就是为了实现SIMD全称Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。简单来说就是处理一些算法的时候,可以并行处理,大大提高了效率。 在A...

2018-07-11 14:29:28 5971 0

原创 Android OpenGL ES 3.0 Pixel Buffer Object使用

关于PBO,找了很多资料,然而google了很久,大部分的PBO资料都和这个类似https://blog.csdn.net/panda1234lee/article/details/51546502 。在上传texture的过程中,我分别试了1、2、3个PBO来进行上传,然而效率并没有增加,反而...

2018-07-04 00:49:58 1130 2

原创 Android端PCM编码AAC的软编和硬编

第六章的内容有点多,现在学习一下音视频的软编和硬编。 使用libfdk_aac进行编码 书上的源码是采用ffmpeg的api进行编码的,当然你也可单独编译libfdk_aac来进行编码。首先我们还是需要配置采样率,声道,码率等参数进行初始化。 接着我们探测输出文件,让ffmpeg自动根据文件...

2018-06-24 00:59:37 2111 0

原创 Android从源码分析ScrollView自动滑动的焦点问题以及解决方案

大家做项目开放应该都碰到过类似于这种界面 这时候我们做Fragment切换的时候,如果Fragment带有像ListView和RecyclerView之类的列表,在切换的时候ScrollView会自动滑动到列表的顶部。虽然做手机app开发的时候,焦点处理比较少,但是我们可以从源码来分析一下焦...

2018-06-22 12:58:16 2715 0

原创 使用Android Studio3.1.2断点调试Android 6.0源码(无需编译)

调试源码有时候很有用,毕竟原来里的各种标志位,变量多的一匹,当时看明白了过不了多久就忘了,又重新看很是难受。要是和普通应用一样断点调试就方便很多了。基于新版Android Studio来进行源码断点调试配置,使用Windows环境。源码下载完成之后,15分钟之内就能搞定。 准备工作 因为要下载...

2018-06-20 17:13:44 2864 4

原创 Android采集并使用OpenGL ES预览摄像头画面

Android的Camera现在有新的api,但是要5.0之后才能用,书上的源码也是用老版本api,简单分析一下预览流程。为了篇幅部分中间的调用流程将会省略,只贴出核心代码。 EGL环境初始化 首先我们肯定是要初始化egl,Native层使用hanlder的形式来循环处理消息。 void M...

2018-06-18 22:03:57 1508 0

原创 Android使用AudioRecord录制pcm裸数据

第六章讲音视频的采集,首先是音频采集。Android录音可以采用MediaRecorder,这个API是比较上层的,直接可以输出通常的音频格式文件,但是相对的就失去了一些灵活性。AudioRecord可以直接录制PCM裸数据,当然也可以用OpenSL ES来进行录制,然而API过于繁琐,对于音频来...

2018-06-17 22:54:40 1769 3

原创 kotlin 中::class 、class.java、javaClass、javaClass.kotlin区别

这几个有点混,小结一下吧。 Kotlin的类 class Person { var name: String = "" var age: Int = 0 companion object { } } java类 public c...

2018-06-17 12:58:06 9081 4

原创 Android使用ffmpeg+opengl+opensles实现播放器

终于到了第5章,前面已经学了音频和视频的渲染知识,这一章讲的是视频播放器的实现,记录一下看源码的一些要点。 初始化 1、同步模块整体初始化 初始化一些参数,minBufferedDuration为0.5f,maxBufferedDuration为1.0f。在调用initMeta()之后变...

2018-06-10 17:18:27 1653 2

原创 Android OpenGL ES 帧缓冲FBO

平时我们都是渲染到的默认的屏幕缓冲,通过swapbuffer来渲染到屏幕上,相对的我们可以同样创建一个离屏的帧缓冲来渲染到纹理。 创建一个fbo glGenFramebuffers(1,&frame); glBindFramebuffer(GL_FRAMEB...

2018-06-04 14:11:11 1271 0

原创 Android使用OpenGL ES 3.0实现随手指旋转3D立方体

OpenGL ES在做普通应用方面3D使用的不多,但有时候实现一些有趣的功能也是蛮不错的。画立方体的的demo网上已经很多了,这次我们就实现一个随手指旋转的立方体,这个demo基本可以了解各个坐标系转换矩阵的使用了。 先看一下最终效果:...

2018-06-02 17:47:49 4093 9

原创 对于OpenGL投影以及相机变换的一些理解

查了很多资料都有点想不明白投影到底干什么的,其实有时候不用想太多,以实际效果来做测试一下就明白了。 正交投影 首先我们图上先有一个立方体 float vertices[] = { //第一面 -0.5f, -0.5f, -0.5f, 0.0f, ...

2018-05-29 14:27:33 1733 0

原创 Android基于OpenGL ES 3.0的VBO,VAO,EBO的使用(NDK开发)

有过一点OpenGL开发经验的人就知道每次绘图之前都会绑定顶点数组,每次将一个顶点传到GPU进行绘制。但是从CPU传数据到GPU的效率并不高,所以我们就需要使用VBO顶点缓存对象来一次性传递多个顶点到GPU,而VAO是3.0以后的版本才有的功能,它允许我们保存对于顶点的配置信息,我们配置好之后就只...

2018-05-27 16:16:21 801 0

原创 Android使用OpenGL ES显示纹理(使用NDK开发)

第四章最后开始介绍使用OpenGL来显示一个2D纹理,其实做音视频2D基本满足绝大多数要求了,下面简单分析一下源码中的流程。 EGL环境初始化 首先我们需要在Java环境中初始化一个SurfaceView,然后在回调中我们传入surface。这里我将AssetsManager也传入Native...

2018-05-23 22:02:53 2019 1

原创 Android端在native层初始化OpenGL ES环境流程

之前学习OpenGL的时候,基本上都是使用GLSurfaceView来初始化,然后调用OpenGL的API来进行绘制。然而找OpenGL的教程时,发现基本上的教程都是C,这就很尴尬了呀,Android平台虽然也封装了名字类似的Java 的API,但是总感觉怪怪的。大概看了一下GLSurfaceVi...

2018-05-18 17:40:41 1735 0

原创 Andoird使用AudioTrack以及OpenSLES渲染音频

最近学习到了第四章,对于AudioTrack以及OpenSLES相当于又复习了一遍。这一章结合之前的ffmpeg解码来进行mp3文件的播放。主要的难点有linux多线程的同步,生产者消费者模型等等。如果对ffmpeg解码不熟悉的可以看https://blog.csdn.net/a568478312...

2018-05-17 17:35:09 1917 0

原创 c与c++的struct方法兼容调用

之前写jni代码的时候,在jni.h里定义的JNIEnv定义是不同的类,思考了c++与c调用结构体的方法的方式。使用公共的h文件来包含不同的结构体来实现兼容,c++层需要包含c层的结构体指针。 各个文件定义 test.h #pragma once struct classCLay { ...

2018-05-15 17:58:40 961 0

原创 Android使用ffmpeg导出pcm裸数据

其实之前很长一段时间都在研究音视频的知识,只是没有总结知识。后来太忙导致以前学的都忘了好多,最近买了音视频开发的书来系统学习,但是里头的部分代码是eclipse的,现在基本上不用eclipse开发了,所以我还是选择在Android Studio中进行实践,在此记录一下学习中的要点。代码均是参考ht...

2018-05-10 17:37:25 541 3

原创 Android自定义Gradle插件来处理注解

熟悉Java注解处理器的朋友,肯定会了解如butterknife,dagger之类的框架,这类框架都是在编译阶段处理注解来生成辅助类,从而不需要再写很多机械的代码。这里我们换一种思路,不使用Java的注解处理器,直接使用Gradle来处理注解并生成类。注意:这篇文章仅提供一种注解处理的思路,不会考...

2018-05-07 15:30:09 1558 6

原创 Android Studio上传aar到JCenter简单教程

这篇文字主要讲解如何上传到JCenter中央仓库,如果想要看如何上传到私服Maven,可以参考我的上一篇文章https://blog.csdn.net/a568478312/article/details/80166281。百度的很多资料都异常繁琐,其实很多东西都不用管,这篇我将尽量写最简单的过程...

2018-05-02 18:08:27 262 0

原创 Android Studio上传aar到私有maven仓库

自从使用Android Studio来进行项目开发后,gradle就成了新的项目管理工具,对于第三方库或者插件的管理都十分方便,而我们想要自己的库也能像这样使用: implementation 'xxxx:xxxx:1.0.0' 我们就需要将自己的库上传到jc...

2018-05-02 15:30:34 2738 0

原创 Android Gradle Task使用详解

Gradle作为一个构建工具,除了插件给我们带来的task,我们也可以自定义很多变量,task,或者继承某些task来重新指定输入输出文件等。首先我们要明确一下Gradle的周期,简单来说,一个Gradle任务执行的时候会有三个步骤。 Gradle会分析构建脚本,通过setting.gradl...

2018-04-27 17:58:16 4101 0

原创 Android Gradle 3.1常用属性

对于gradle的属性,大家可以自行查看文档,我主要从文档中总结一些常用的。 文档:http://google.github.io/android-gradle-dsl/ 现在的Android Studio 3.0版本以上已经使用了3.0以上的gradle插件,所以直接看最新的文档。注意:本文...

2018-04-27 10:53:40 895 1

原创 Android Gradle DSL 参考配置文档

构建脚本有很多,比如maven,或者ant之类的,但是用xml写的话就略显繁琐,很多繁琐的符号在工程太大的时候不利于维护和管理,而gradle的dsl则未我们带来了更加直观的配置体验。 DSL (Domain Specific Language)领域专用语言。使用DSL,可以扩展Gradle的语...

2018-04-23 17:53:00 513 0

原创 Groovy语法学习(十)AST的使用

在开发Android项目中,经常会用到AbstractProcessor来构建注解处理器。在编译的时候生成代码,从而减少工作量。使用非常广泛的butterknife就是如此,但是最新版的github貌似是使用gradle插件来尽心生成,不过原理应该都类似,编译的时候通过对应的注解生成一些辅助类,或...

2018-04-20 18:05:28 1395 0

原创 Groovy语法学习(六)JSON、XML使用

groovy对于json和xml的生成和解析不需要额外导入库了,直接调用api使用。 一、JSON (一) JSON字符串创建 1.使用JsonBuilder类 JsonBuilder有call()方法传入closure,所以可以接像下面这样写,相当于调用call方法。 ...

2018-04-20 10:33:43 972 0

原创 部分查看源码的要点总结

最近看了不少源码,然而看源码这种事情当时分析清楚了,下一次再看又感觉不太熟悉,毕竟Read The Fucking Source Code 嘛。所以把我感觉重要的点略微记录一下。 一、在onLayout()方法中调用requestLayot() https://blog.csdn.net/...

2018-04-19 15:01:18 73 0

原创 Groovy语法学习(九)MOP探索之方法合成与委托

groovy不仅能方法注入,也可以方法合成,利用之前说的methodMissing方法。我们知道在找不到方法的时候会回调这个方法,然后我通过错误回调的时候进行方法注入。 方法合成 class Manager { def methodMissing(String name, ...

2018-04-18 17:57:38 177 0

原创 Groovy语法学习(八)MOP探索之动态类与方法注入

groovy作为一门动态语言,使用非常灵活。MOP中提供了动态类与运行时的方法注入,整理了一下使用方法。 一、动态类 def expando =new Expando(name:"hello",fun1:{println "fun1"}) p...

2018-04-18 17:56:50 251 0

原创 Groovy语法学习(七)MOP探索之方法调用流程

groovy是一门具有元对象协议(Meta Object Protocol)或称 MOP的语言。在运行时向一个对象传递方法,或者消息时,这个协议使对象可以作出影响它自己的状态或者行为的特定选择。简单的说我们可以在运行时改变、增减类或者对象的方法、属性等,让其行为在运行时进行改变。这个在java里看...

2018-04-12 15:56:37 404 0

原创 Groovy语法学习(五)运算符重载

groovy同样具有运算符重载的功能,其实运算符也是调用类中的具体方法,使用运算符看起来更加简洁,容易理解。 简单重载一个减法 class Money{ def number def minus(o){ if(o instanceof Money){ ...

2018-04-12 11:21:40 258 0

原创 Groovy语法学习(四) 闭包总结

groovy中的闭包,也就是Closure。接触过lambda或者kotlin的同学肯定知道,在java中如果有类似于setxxxListener之类的方法,直接传入一个接口(如果接口只有一个方法,就叫做函数式接口)。然后接口里方法外包装的一层完全没有作用,然后lambda表达式出现解决了这个问题...

2018-04-11 16:56:33 340 0

原创 Groovy语法学习(三) 扩展方法

groovy为jdk增加了很多扩展方法,让我们更加方便的使用,这里我们就来实现一下自己的扩展方法。首先我们先看一下groovy的扩展方法是如何实现的。 groovy中我们可以这样使用 Thread.start { println "start" } pu...

2018-04-11 11:59:09 958 0

原创 Groovy语法学习(二) 集合的使用

Groovy的集合主要总结list以及map 一、List 直接使用[]来新建 def list1=[1,2,3,4] def list2=[5,6] as LinkedList println list1.class println list2.class 结果: clas...

2018-04-10 17:58:45 116 0

原创 ScrollView嵌套RecyclerView解决以及原理详解

我们项目中经常可能会用到类似的以下布局。 在这种情况下,RecyclerView会经常无法测量出来实际的高度,我一开始以为RecyclerView类似于ListView对MeasureSpec.UNSPECIFIED做了直接高度处理而无法正确测量,但我查看源码后发现不是这样的。网上查找的解决...

2018-04-10 15:36:05 2681 0

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