自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 Android 3A 状态之 AF(对焦)

一,对焦原理通过相机镜头中镜片组的前后移动,改变像距的位置,使物像恰好落在底片或感光底片上。焦点(focus)平行光线射入凸透镜时,镜头将所有的光线聚集在一点,这个点就叫做焦点。焦点和镜片光学中心的距离叫做焦距。对于我们照相机来说,照相机的镜头就是一个凸透镜,胶片或者感光底片就是屏幕二 camera2 AF API1.设置AF的模式,用于选择当前的对焦模式的控件,由请求设置中的框架进行设置,设置的key值为CONTROL_AF_MODE//CaptureRequest 类中定义public

2021-07-28 15:51:21 2050

原创 Android 分区存储

1.背景Google于 2019年9月3日发布了Android10 release版本,为了更好的保护用户数据并限制设备冗余文件增加,Android 10版本变更了设备外部存储访问方式,外部存储新特性称为分区存储(Scoped Storage), 分区存储遵循以下三个原则对外部存储文件访问方式重新设计,便于用户更好的管理外部存储文件文件更好的归属: 系统记录文件由哪个应用创建,应用不需要存储权限即可以访问应用自己创建文件应用数据保护: 添加外部存储应用私有目录文件访问限制, 应用即使申

2021-07-22 15:09:50 1063 2

原创 二, camera2 +mediaRecorder 实现视频录制,不重复创建session 的方式

一,调用流程图如下二,其基本的实现调用关系如下:1.初始化handler 线程绑定handlerThread 的looper ,相机传递参数时需要这个线程 /*** * 1 * 初始化handler 线程绑定handlerThread 的looper ,相机传递参数时需要这个线程 */ private void initHandler() { handlerThread = new HandlerThread("camera_handler_

2021-07-20 18:39:22 1730 2

原创 【camx】算法node中dump图片信息方式

Dump 图片数据进行查看的操作方式一 . 对于高通已经有的算法node 如IFE IPE 高通给了自己定义的dump 方式(1) Dump 图片数据首先要打开dump 图片数据的自动总开关其位置在camxsettings.xml 中camx/src/core/camxsettings.xml在此文件中我们查找自动dump图片的变量名 autoImageDump 会找到如下setting数据;Dump 图片的开关; <setting>1040

2021-06-30 10:37:39 2869 6

原创 【camx】 backtrace 报错信息的简单筛选方式

//在我们终端 lunch 过的目录 执行 stack 加上带有报错日志的文件路径, 他会帮我们过滤trace 信息如下操作我的报错文件存放在: ~/log/build.log则执行命令如下:stack ~/log/build.log得到结果如下:ts@ts-HP-EliteDesk-800-G5-TWR:~/BM_NEW/LINUX/android/vendor/qcom/proprietary/chi-cdk$ stack ~/log/build.log device/qcom/sm6

2021-06-30 10:21:47 420

原创 Android.mk 语法和变量介绍

一、简介Android.mk 是一种脚本语言,是将 C/C++ 源文件粘合至 NDK 的构建文件。官网对Android.mk的介绍如下:假设一个算法的根目录名字叫eptz 其目录结构如下:eptz.| ├── build (android编译的mk文件配置,此文档主要讲解Android.mk配置)│ ├── android│ └── Android.mk ├── camxchinodeeptz.cpp (eptz算法的.cpp文件,主要是通过高通memcpy算法更改

2021-06-29 10:23:35 1716

原创 unbuntu 配置 vim_config(vim 配置文件)

unbuntu 配置 vim_config(vim 配置文件)备注:cd 进入用户主目录cd ~ 进入用户主目录cd - 返回进入此目录之前所在目录cd … 返回上一级目录cd …/… 返回上两级目录cd !$ 把上个命令的参数作为cd 参数使用cd / 进入根目录cd . 当前目录配置方式如下:首先将vim_config.zip 文件放到 用户主目录中解压 vim_config.zip文件,命令如下: unzip vim_config.zip进入到解压好的

2021-06-29 09:48:04 644 1

原创 性能分析之 ANR问题分析

1. ANR发生原因 没有在规定的时间内完成要完成的事情。2. ANR分类–发生场景Activity onCreate方法或Input事件超过5s没有完成BroadcastReceiver前台10s,后台60sContentProvider 在publish过超时10s;Service前台20s,后台200s3.发生原因主线程有耗时操作复杂布局IO操作被子线程同步锁block被Binder对端blockBinder被占满导致主线程无法和SystemServer通信得不到

2021-01-06 17:12:23 2679

原创 (五)多线程基础篇 ——之停止线程

Java中停止线程需要从下面三个方面进行考虑;停止线程的正确方式是使用中断想停止线程需要停止方,被停止方,被停止方的子方法相互配合扩展到常见的错误停止线程方法:已被废弃的stop/suspend,无法唤醒阻塞线程的volatile正确方式是中断A. 从外部直接调用该线程的stop方法,直接把线程停下来(此种方式已经被废弃掉)。B. 从外部通过中断通知线程停止,然后切换到被停止的线程,该线程执行一系列逻辑后自己停止。很明显B方法要比A方法好很多,A方法太暴力了,你根本不知道被停止的线程在执行

2020-12-29 16:06:30 130 3

原创 (二)Android Jni开发-基础篇(CMake) 之CMakeLists.txt 语法介绍

一. Cmake 简介cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。二. 常用命令指定 cmake 的最小版本cmake_minimum_required(VERSION 3.4.1)设置项目名称//这个命令不是强制性的,但最好都加上。它会引入两个变量 demo_BINARY_DIR 和 //demo_SOURCE_DIR,同时,cmake 自动定义了两个等价的变量 //PROJECT_

2020-12-28 21:08:41 831

原创 (一) Android Jni开发-基础篇(CMake) 创建工程,生成so ,在其他工程使用so

前言:这篇文章主要讲解了 JNI 的基础语法和交叉编译的基本使用,通过这篇文章的学习就完全可以入门 Android 下 JNI 项目的开发了。JNI 概念从 JVM 角度,存在两种类型的代码:“Java”和“native”, native 一般指的是 c/c++,为了使 java 和 native 端能够进行交互,java 设计了 JNI(java native interface)。JNI 允许java虚拟机(VM)内运行的java代码与C++、C++和汇编等其他编程语言编写的应用程序和库进行互操作

2020-12-25 10:33:34 742

原创 (四)多线程基础篇 ——之yield()

线程让步( yield )yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取CPU 执行执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!yield() 不会释放锁。yield() 与 wait()的比较我们知道,wait()的作用是让当前线程由“运行状态”进入“等待(阻塞)状态”的同时,也会释放同步锁。而yield()的作用是让步,它也会

2020-12-21 16:11:10 225

转载 (三)多线程基础篇 —— 多线程wait和notify的理解与使用

对于wait()和notify()的理解对于wait()和notify()的理解,还是要从jdk官方文档中开始,在Object类方法中有:void notify()Wakes up a single thread that is waiting on this object’s monitor.译:唤醒在此对象监视器上等待的单个线程void notifyAll()Wakes up all threads that are waiting on this object’s moni

2020-12-19 16:07:14 258 1

原创 创建Log 日志输出Util 可以直接定位日志所在类,所在方法, 以及打印行数

代码如下:/*** * 设置log 输出 打印行数据; */public class Log { //所有使用这个类的应用,日志都将使用这个标签前缀。 private static final String GLOBAL_TAG = "CameraApp"; //也就是在开发版中(userdebug)该值为真打印log 日志,在用户版本(user )为false 不打印log 日志,控制日志的开关; public static final boole

2020-12-09 21:29:12 437

原创 Android 对View 实现圆角和倒角裁剪的实现方式

1.View使用 ViewOutlineProvider 裁剪 制作圆角或者倒角Android 5.0的 View 类中新增了 setOutlineProvider(ViewOutlineProvider provider) 方法来制作圆角和倒角;实现代码如下: view.setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View vi

2020-12-02 10:42:37 3598 1

原创 Android camera 输出的YUV格式的图片保存进行查看方式

一首先将YUV 的byte[] 保存为 .yuv 后缀文件。 文件保存的路径是手机外部应用私有存储目录下面private void saveAsJPEG(byte[] bytes, String path) { File file = new File(mActivity.getExternalFilesDir(null).getPath() + File.separator + System.currentTimeMillis() + path + "_.YUV"); L

2020-10-10 11:27:24 1250

原创 Android适配总结之FileProvider

概述在Android7.0及之后我们无法直接将一个FileUri共享给另一个程序进行使用。系统会抛出一个异常FileUriExposedException。这些都是由于7.0开启了严格模式(StrictMode)造成的。官方在7.0的变更中是这么说的:对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开file:// URI。如果一项包含文件 URI 的 intent 离开您的应用,则应用出现故障,并出现 FileUriExpo

2020-09-28 20:10:54 2322

原创 Android音视频学习 之C语言入门之三大经典排序(六)

C排序算法冒泡排序冒泡排序(Bubble Sort) 最为简单的一种排序,通过重复走完数组的所有元素,通过打擂台的方式两个两个比较,直到没有数可以交换的时候结束这个数,再到下个数,直到整个数组排好顺序。因一个个浮出所以叫冒泡排序。双重循环时间 O(n^2)过程演示:基本思想比较相邻两个数据如果。第一个比第二个大,就交换两个数对每一个相邻的数做同样1的工作,这样从开始一队到结尾一队在最后的数就是最大的数。针对所有元素上面的操作,除了最后一个。重复1~3步骤,知道顺序完成。示例代码如

2020-09-23 19:16:23 120

原创 Android音视频学习 之C语言入门(五)

C 输入 & 输出当我们提到输入时,这意味着要向程序填充一些数据。输入可以是以文件的形式或从命令行中进行。C 语言提供了一系列内置的函数来读取给定的输入,并根据需要填充到程序中。当我们提到输出时,这意味着要在屏幕上、打印机上或任意文件中显示一些数据。C 语言提供了一系列内置的函数来输出数据到计算机屏幕上和保存数据到文本文件或二进制文件中。实例#include <stdio.h> // 执行 printf() 函数需要该库int main(){ printf(

2020-09-23 10:25:04 212

原创 Android音视频学习 之C语言入门(四)

字符串在C语言中,字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。下面的声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};依据数组初始化规则,您可以把上面的语句写成以下语句:char greeting[] = "Hello";以

2020-09-14 15:27:56 280

原创 Android音视频学习 之C语言入门(三)

###数组C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。声明数组在C中要声明一个数组,需要指定元素的类型和元素的数量,如下所示type arrayName [ arraySize ];这叫做一维数组。arraySize 必须是一个大于零的整数常量,type 可以是任意有效的 C 数据类型。例如,要声明一个类型为 double 的包含 10 个元素的数组 balance,声明语句如下:double balance[10];数组是如何初始化的。说到初始化,C

2020-09-10 16:59:16 182

原创 Android音视频学习 之C语言入门(二)

标识符编程时给变量或者函数起的名字就是标识符,就好比我们每一位童鞋都有姓名,姓名就是这位童鞋的标识符。C语言的标识符是不可以随便起名字的,必须遵守一定的规则。C 语言规定,标识符可以是字母(A~Z,a~z)、数字(0~9)、下划线_组成的字符串,并且第一个字符必须是字母或下划线。在使用标识符时还有注意以下几点:标识符的长度最好不要超过8位,因为在某些版本的C中规定标识符前8位有效,当两个标识符前8位相同时,则被认为是同一个标识符。标识符是严格区分大小写的。例如Imooc和imooc 是两个不同

2020-09-08 16:11:23 191

原创 Android音视频学习 之C语言入门 (一)

前言作为一个Android开发,想要学习音视频方向知识和NDK技术。就得具备C/C++ 语言基础,下面我们就先来学习 C语言基础。简介C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现。在 1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一个公开可用的描述,现在被称为 K&R 标准。UNIX

2020-09-07 16:39:06 479

原创 一,视频录制MediaRecorder类调用参数详解

一. 类概述:用于录制音频和视频的一个类。二. 状态图如下:MediaRecorder的各个状态的介绍:Initial:初始状态,当使用new()方法创建一个MediaRecorder对象或者调用了reset()方法时该MediaRecorder对象处于Initial状态。在设定视频源或者音频源之后将转换为Initialized状态。另外,在除Released状态外的其它状态通过调用reset()方法都可以使MediaRecorder进入该状态。Initialized:已初始化状态,可

2020-09-02 09:59:22 4492 1

原创 Window10环境下CLion安装配置教程

Window10环境下CLion配置教程1. 首先要下载CLion安装包官网安装包下载地址接下来就是安装了,一路上没啥问题的,这里提一句,如果你有学校的邮箱,就可以申请jetbrains的免费教育许可证,edu教育邮箱验证一下即可,就可以享受正版软件了。2.配置MinGW环境首先进入MinGW官网,然后点击sourceforge进行下载开始安装,记得选择成 64位 即图中的架构 X86_64 (默认为i686,即32位)如果下载慢可以到百度网盘下载已经下载好的百度网盘下载地址,提取码为oa

2020-08-24 14:12:28 1098 1

原创 (二)多线程基础篇 —— Synchronized 多线程同步讲解

前言:在Java多线程编程中,我们长需要考虑线程安全问题,其中关键字Synchronized,在线程同步中扮演着重要的作用,我将讲解Java关键字Synchronized的知识1.定义Synchronized 是Java中的一个关键字,被Synchronized修饰的方法 / 代码,保证同一时刻最多只有1个线程执行 。2.Synchronized 原理实现原理: JVM 是通过进入、退出对象监视器(Monitor)来实现对方法、同步块的同步的,而对象监视器的本质依赖于底...

2020-08-12 16:39:22 309

原创 (二)java.util.concurrent - Java 并发工具包 ---ThreadPoolExecutor创建线程池

一,线程池建界  线程池的使用主要是解决两个问题:①当执行大量异步任务的时候线程池能够提供更好的性能,在不使用线程池时候,每当需要执行异步任务的时候直接new一个线程来运行的话,线程的创建和销毁都是需要开销的。而线程池中的线程是可复用的,不需要每次执行异步任务的时候重新创建和销毁线程;②线程池提供一种资源限制和管理的手段,比如可以限制线程的个数,动态的新增线程等等。Java 之concurrent (并发包中提供了创建线程池的最主要的类ThreadPoolExecutor)下面我们着重讲解此类...

2020-07-27 16:51:29 277

原创 (三)java.util.concurrent - Java 并发工具包 ---Executors封装的4种常见的功能型线程池

前言:熟悉Java多线程编程的同学都知道,当我们显示创建线程过多时,因为每个线程创建后,都需要占用内存和资源,容易引发内存溢出,因此我们就有必要使用线程池的技术了。Java concurrent并发包中给我们提供了Executors,Executors已经为我们封装好了4种常见的功能线程池。那么为什么我们使用线程池呢?总体来说线程池有如下优势: ①降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 ②提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行...

2020-07-24 17:40:25 344

原创 (一)多线程基础篇 —— 线程创建的几种方式

一,基础概念:1. 1 进程 通过任务管理器可以看到进程的存在,可以简单理解为:进程是正在运行的程序,进程是系统进行资源分配和调用的独立单 位,每一个进程都有它自己的内存空间和系统资源,多进程可以提高CPU的使用率。1.2. 线程同一个进程内可以同时执行多个任务,每一个任务就可以看做是一个线程。线程:是程序的执行单元,执行路径。是程序使用CPU的基本单位1.3CPU 寄存器和程序计数器每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,也就是说,需要...

2020-07-23 14:46:24 263

原创 (一)java.util.concurrent - Java 并发工具包 ---使用ThreadFactory来创建新的线程

一,ThreadFactory作用:简单来说就是用来创建线程的,其中也只是有一个newthread方法 ,我们是在newthread方法中创建一个线程,并且传入要执行的Runnable二, 在创建线程时的一些常用设置: ①Thread.setName()给线程设置名字,方便后期查看线程调度分析性能使用 ②Thread.setDaemon()守护线程--也称“服务线程”,在没有用户线程可服务时会自动离开。优先级:守护线程的优先级比较低, 用于为系统中的其它对象...

2020-07-21 15:29:07 358

原创 Android 存储使用参考

Android 存储树如下: ($rootDir)+- /data -> Environment.getDataDirectory()| || | ($appDataDir)| +- data/com.srain.cube.sample| || | ($filesDir)| +- files -> Context.getFilesDir() / Context.g

2020-07-06 10:35:16 175

原创 Camera2+ MediaRecorder 实现录制视频的功能,出现在某些设备上视频和音频不同步问题排查总结

(一)在谈问题前先要了解的知识储备(1)MediaRecorder.OutputFormat也就是视频的输出格式类: 下表中是outputFormat类中 的调用字段 和它代表的格式对应表调用字段 AAC_ADTS AMR_NB DEFAULT MPEG_2_TS MPEG_4 THREE_GPP WEBM 格式 .aac .3gp .ts .mp4...

2020-07-01 17:01:07 1889

原创 【java笔记】大话数据结构第四章 —队列 上

目录知识图解:1.队列定义:2.队列的顺序存储:3.循环队列4.队列的链式存储结构5.循环队列和链队列的选择知识图解:1.队列定义:队列(queue)是一种特殊的线性表,队列只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first...

2020-06-16 17:37:19 194

原创 SurfaceView和TextureView 基础概念

目录1.surface定义:2.surfaceView 是什么?3.surfaceView的双缓存机制4.surfaceView ,Surface,SurfaceHolder 关系图5.SurfaceView 使用小实例: 绘制正选曲线代码如下6.SurfaceView 总结:7.TextureView是什么7.1TextureView优点及缺点8.textureView 和 SurfaceView使用总结:学习surfaceView之前先了解以下surface...

2020-06-09 16:31:45 898

原创 【java笔记】大话数据结构 第一章,第二章

目录知识图解:1.基本概念和术语:1.2 逻辑结构和物理结构2 算法2.1算法时间复杂度2.2 推导大O阶的方法知识图解:1.基本概念和术语: 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。 比如现在我们常用的搜索引擎,一般会有网页,MP3,图片,视频。MP3 就是声音数据,图片就是图像数据 数据元素:是组成数据的,有一定意义的基本单位,在计算中通常作为...

2020-06-02 15:11:00 317

原创 【java笔记】大话数据结构第三章 —线性表

一 线性表定义:零个或多个元素的有限序列。 ① 首先它是一个序列,也就是说元素之间是有顺序的,如存在多个元素,则第一个元素无前驱,最后一个元 素没有后继。其他元素有且只有一个前驱和一个后继。 ② 线性表强调是有限的,也就是说线性表数据是有限的。二 线性表抽象数据类型描述所以线性表的抽像数据类型定义如下public interface IList { /* ADT 线性...

2020-05-25 18:20:59 301

原创 android 蓝牙数据 进行转换 十六进制转十进制

下图附带 16进制和10进制转换表和对应的字符串转换如下方式:package com.thundersoft.ai.facenndemo.ble.util;import java.math.BigInteger;public class hexStrToDes { /** * 十进制数据转换为十六进制字符串数 * * @param dec * @return */ public static String ..

2020-05-25 13:54:32 1520

原创 SQLiteOpenHelper类(SQLlite数据库详细解析--温故而知新)

1.简介2.SQLiteOpenHelper类 常用方法1. 创建 or 打开 可读/写的数据库(通过 返回的SQLiteDatabase对象 进行操作) getWritableDatabase()2. 创建 or 打开 可读的数据库(通过 返回的SQLiteDatabase对象 进行操作) getReadableDatabase()3. 数据库第1次创建时 则会调用,即 第1次调用 getWritableDatabase() / getReadableDatabase...

2020-05-09 18:04:10 6460

原创 修改 aar 包内 class 文件并重新打包

1.将 .aar 文件重命名为 .zip 文件并解压 解压完成的目录如上图,其中java的代码在class.jar中,其他的为资源文件和清单文件2.将解压得到的 classes.jar 文件重命名为 .zip 文件并解压 class.jar后缀换成.zip解压后得到 的文件为.class后缀的文件 接下来需要将要修改的文件转换成后缀为.java文件...

2020-05-06 18:43:53 2749

原创 Android 中常用的ADB命令

root权限操作此操作需要root后的手机才可以执行对手机进行root操作adb root挂载读写adb remount重启机器 adb reboot重启到bootloader,即刷机模式:adb reboot bootloader重启到recovery,即恢复模式:adb reboot recovery应用信息相关...

2020-03-18 12:05:27 440

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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