- 博客(118)
- 资源 (13)
- 收藏
- 关注
原创 OpenGL Texture C++ Camera Filter滤镜
基于OpenGL Texture纹理的强大功能,在片段着色器(Shader)中编写GLSL代码,对YUV的数据进行数据转换从而实现视频编辑软件中的相机滤镜功能。接上一篇OpenGL Texture C++ 预览Camera视频的功能实现,本篇来实现Camera滤镜效果并各种滤镜的切换。
2024-09-15 15:50:47 1127
原创 OpenGL Texture C++ 预览Camera视频
OpenGL是一个图形API,并不是一个独立的平台。包含了一系列可以操作图形、图像的函数。基于Texture纹理强大的功能,本篇文章实现Android OpenGL Texture C++ 预览Camera视频流的功能。
2024-09-06 18:37:20 1338
原创 LearnOpenGL之光照
现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。因此OpenGL的光照使用的是简化的模型,对现实的情况进行近似,这样处理起来会更容易一些,而且看起来也差不多一样。这些光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为风氏光照模型(Phong Lighting Model)。风氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子
2024-08-16 18:52:31 905
原创 LearnOpenGL之摄像机
当我们讨论摄像机/观察空间(Camera/View Space)的时候,是在讨论以摄像机的视角作为场景原点时场景中所有的顶点坐标:观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向的观察坐标。要定义一个摄像机,我们需要它在世界空间中的位置、观察的方向、一个指向它右侧的向量以及一个指向它上方的向量。细心的读者可能已经注意到我们实际上创建了一个三个单位轴相互垂直的、以摄像机的位置为原点的坐标系。
2024-08-06 18:07:40 864
原创 LearnOpenGL之3D显示
绑定texture(纹理)——使用程序——开启深度测试—— 模型矩阵(Model Matrix)观察矩阵(View Matrix)、投影矩阵(Projection Matrix)的初始化创建并与顶点着色器中model/view/projection 的uniform进行数据交换。模型矩阵(Model Matrix)观察矩阵(View Matrix)、投影矩阵(Projection Matrix)组合矩阵传入到gl_position做对应的顶点数据的位置变换。
2024-08-02 18:37:38 921
原创 LearnOpenGL之入门基础
OpenGL是一个图形API,并不是一个独立的平台。包含了一系列可以操作图形、图像的函数。本文对LearnOpenGL知识的总结及记录。 AndroidLearnOpenGL是本博主自己实现的LearnOpenGL练习集合: Github地址:https://github.com/wangyongyao1989/AndroidLearnOpenGL
2024-07-31 19:12:13 819
原创 C++并发编程实战学习笔记
将应用程序分为多个独立的进程,它们在同一时刻运行,就像同 时进行网页浏览和文字处理一样。独立的进程可以通过进程间常规的通信渠道传递讯息(信号、套接字、文件、管道等等。不过,这种进程之间的通信通常不是设置复杂, 就是速度慢,这是因为操作系统会在进程间提供了一定的保护措施,以避免一个进程去修改 另一个进程的数据。还一个缺点是,运行多个进程所需的固定开销:需要时间启动进程,操 作系统需要内部资源来管理进程,等等。
2024-07-19 15:09:26 349
原创 通过libx246 libfaac转换推送RTMP音视频直播流
RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiplexing)和分包(packetizing)的问题。RTMP是应用层协议,采用(通常)TCP来保证可靠传输;在TCP完成握手链接建立后,还会进行RTMP的一些自己的握手动作,在建立RTMP Connection链接;
2024-07-19 15:04:05 1279
原创 音视频及H264/H256编码相关原理
我们播放的视频文件一般都是用一种封装格式封装起来的,封装格式的作用是什么呢?一般视频文件里不光有视频,还有音频,封装格式的作用就是把视频和音频打包起来。所以我们先要解封装格式,看有哪些视频流和哪些音频流,此时的音频流和视频流都还是压缩数据,不能直接用于显示的,这就需要解码。如FFmpeg 视频文件就是一个容器 (视频流(H264) 音频流(aac))。
2024-05-24 18:52:08 1642
原创 Java并发编程及并发包中类分析
AbstractOueuedSynchronizer 是java.util.concurrent 的核心组件之一,它提供了一个基于 FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。该类利用了一个int 来表示状态,期望它能够成为实现大部分同步需求的基础。使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理其状态,管理的方式就是通过类似acquire 和release 的方式来操纵状态。然而,多线程环境中对状态的操纵必须确保原子性,因此子类对于状态的把握。
2024-05-11 15:02:45 1093 1
原创 FFmpeg常用结构体、关键函数、ffplay.c分析
AVFormatContext是一个贯穿全局的数据结构,很多函数都要用它作为参数。FFmpeg代码中对这个数据结构的注释是format I/O context,此结构包含了一个视频流的格式内容。其中存有AVIputFormat(或AVOutputFormat,但是同一时间AVFormatContext内只能存在其中一个)、AVStream、AVPacket这几个重要的数据结构以及一些其他的相关信息,比如title、author、copyright等。
2024-04-26 19:05:09 1081 2
原创 MAVLink分析及封装自定义的类MavLink通信协议
通过自动生成mavlink的协议代码,我们可以此基础上进行自定义的拓展。形成自己通信协议。··首先我们把协议通信命令区分为发送和接收:AckMsg和CmdMsg两类,分别用于接收和发送。AckSysInfo类会解析出playload的属性值://解析出payload包含的实体数值@Override'}';CmdSysInfo会包playload的属性值包装成一个MyLinkPacket:@Override。
2024-03-29 11:39:07 2032
原创 Kotlin协程知识点概述
Kotlin 是⼀⻔仅在标准库中提供最基本底层 API 以便各种其他库能够利⽤协程的语⾔。与许多其他具有类似功能的语⾔不同,async 与 await 在 Kotlin 中并不是关键字,甚⾄都不是标准库的⼀部分。此外,Kotlin 的 挂起函数概念为异步操作提供了⽐ future 与 promise 更安全、更不易出错的抽象。kotlinx.coroutines 是由 JetBrains 开发的功能丰富的协程库。它包含本指南中涵盖的很多启⽤⾼级协程的原语,包括 launch 、async 等等。
2024-03-26 18:44:43 873
原创 Kotlin编程权威指南学习知识点预览
函数支持包括函数在内的任何类型的参数。一个函数类型的参数定义起来和其他类型的参数 一样:在函数名后的一对圆括号内列出,再加上类型。"你好我的名字叫: $myName" + ",今年:$age 岁了"在面向对象编程的世界里,类是核心,是一类独特“事 物”的代码形式的定义。具体来讲,类定义的是事物包含哪一类数据,能做什么样的工作。类可以定义在一个独立的文件中,也可以和函数或变量定义在一起。类定义在单独一个文件 里,可以给应用程序未来的规模升级预留扩展空间。
2024-03-14 18:45:41 995
原创 C++ STL标准程序库开发指南学习笔记
模板库(STL):STL另一个重要特性是它不是面向对象的。STL主要依赖于模板。这使得STL的组件具有广泛通用性和底层特性。由于STL是基于模板的,内联函数的使用使得生成的代码短小高效。类模版实例化:类模版仅仅是模板,如何使用模板就涉及类模板的实例化问题。模板实例化一般指使用模板类和模板参数生成一个类声明的过程。类模板的成员函数:可被类模板实例化产生的类所拥有。每个类模板都拥有自己相应的成员函数,这些函数可被模板的实例调用。
2024-03-01 17:34:00 1242
原创 C++基础知识点预览
数组是以系列元素;数据中所有元素的类型都相同;这组元素形成一个完整的集合。预处理器在编译之前运行,预编译器指令都以#打头。C++程序通常在.h(头文件)中声明类和函数,并在.cpp文件中定义函数,因此需要在.cpp文件中使用预处理器编译指令#include来包含头文件。#define定义常量;#ifndef和#endif:在预处理器看来,两个头文件包含对方会导致递归问题。为避免这种问题,可结合使用过宏以及预处理器编译指令#ifndef和#endif;
2024-02-08 16:39:37 1008
原创 Android AutoSize屏幕适配中图标及字体放大的问题解决
现象:项目接入Android AutoSize屏幕适配框架,项目本身主界面是横屏操作的界面。测试中用户反馈在vivo x27的手机或者其他机型也会出现(没测试出来)横屏后所有的图标及字体都放大。原因查找:查看Android AutoSize的源码可知,isBaseOnWidth的标志位为屏幕适配的基准。在获取资源文件getResources()的对图片/文字及其他资源文件可以指定具体的适配方案,vivo x27横屏转换后获取的宽高对调了,所以导致原本以宽(或者高)为基准数值相对调,导致界面的图.
2021-07-04 11:44:55 2085
原创 Android工程师进阶34讲学习笔记
拉勾教育是最近发现一个技术提升的平台,很多课程对于技术提升都多有益处,很多是实际上的项目实战并对底层原理讲解透彻。前几个月已经学习完了姜新星的《Android 工程师进阶 34 讲》,现在重学一遍并做些总结记录加深印象。学习的过程要符合遗忘曲线,当一些所学的知识遗忘时就是该重新复学的开始,这样真正学到的知识才能刻进大脑里变成自己的知识,把书读薄在运用到的时候“下笔如有神”。一.程序运行时内存的分配:Java 虚拟机在执行 Java 程序的过程中,会把它所管理的内存划分为不同的数据区域。下面这张图描述
2020-10-26 14:17:07 1110 3
原创 设计模式之美(王争)摘录总结
经过八个月的学习,极客时间中王争的设计模式之美。最近又重读两遍,真是遍受益匪浅啊,学习之后才知道代码可以这样设计这样优美的编写。觉得自己有摘录一些在学习中认为比较好的精华,以备自己以后的查用和复习。一.术语描述:面向对象编程:具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础; 面向对象语言:是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言; 设计原则:是指导我们代.
2020-09-13 18:54:32 3383 1
原创 FFmpeg项目初探学习笔记
FFmpeg是广泛使用于的多媒体解决方案,是一个自由软件项目的名称,采用LGPL或GPL许可证。它提供了录制/转换以及流化音视频的完整解决方案。包含非常先进的音频/视频编解码库libavcodec。为了保证高可移植性和编解码质量,libavcodec里很多代码都是新开发的。“FFmpeg”这个词中的“FF”指的是“Fast Forward”,而“mpeg”指的是一种压缩率比较大的活动图像和声音的压缩标准。一.FFmpeg简介:命令行工具概述(Command Line Tool Documentati
2020-08-22 11:22:36 306
原创 C++入门知识点总结——面向对象/高级编程
C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。1.面向对象:类&对象:类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。类的定义:类定义是以关键字class开头,后跟类的名称。class Box{ public: double length; // 盒子的长度 double breadth;
2020-07-04 18:57:36 371
原创 C++入门知识点总结——基本语法
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。1.面向对象程序设计:C++ 完全支持面向对象,包括面向对象开发的四大特性:封装 抽象 继承 多态C++标准库的组成:核心语言,提供了所有构件块,包括变量、数据类型和常量等; C++ 标准库,提供了大量的函数,用于操作文件、字符串等; 标准模板库(STL),提供了大量的方法,用于操作数据结构等。C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互:
2020-06-21 18:42:55 2188
原创 Gradle入门及相关总结
Gradle是一款非常优秀的构建系统工具,它的DSL是基于Groovy实现。可以方便通过代码控制这些DSL达到构建目的,Gradle构建大部分功能是通过插件方式来实现。1.Gradle入门及Gradle Wrapper:Wrappe是对Gradle的一层包装,便于团队在开发过程中统一Gradle构建版本,避免因为Gradle构建版本不同意带来的不必要麻烦。gradlew和gradlew.bat分别是Linux和window下的可执行脚本,用法跟Gradle原生命令一样; gradle-w.
2020-06-13 22:51:52 226
原创 查看Android源码中的Native/JNI/C/C++代码
最近在学习Android音视频流方面的知识,买了何俊林的《Android音视频开发》。一看书吓一跳好多JNI/C/C++方面的代码,如今是初步学习了JNI了,也有一些C/C++的功底。但怎么查看Android源码中的Native/JNI/C/C++代码一直苦恼了很久,没办法查看这些代码就无法进行下一步学。现在在网上看到了一篇能查看源码的文章查看native层源码的文章,终于了看对应代码示例了。登录AndroidXRef网站; 选择SDK版本;; 进入搜索界面,输入对应的匹配字符,点击搜索:
2020-05-24 18:36:46 2680
原创 Java 本地接口(JNI)编程设计规范
"JNI"解决了一个问题,类似于(similar to)通过被其他语言支持的互操作机制来解决的问题。然而,在"JNI"和在许多其他语言中的互操作机制之间有一明显的不同。"JNI"不是为一个特别的"Java"虚拟器的实现设计的。而是,一个本地接口能过被每个"Java"虚拟器的实现支持的。1.JNI设计目的:"JNI"设计的最重要目标是确保它在一个给定的主机环境上不同的"Java"虚拟器实现中提供二进 制兼容性。同样的本地库的二进制不需要在编译(without the need for recom.
2020-05-23 14:26:22 511
原创 Java 本地接口(JNI)编程指南和规范学习笔记1
1.Java平台环境简介:"Java"平台的编程环境包含"Java"虚拟机(VM)和Java应用程序编程的接口(Java Application Programming Interface(API))。"Java"应用程序是用"Java"编程语言编写的,被编译成一个独立于 机器(machine-independent)二进制类格式.一个类在任何Java虚拟机上执行实现。Java的API包 含预定义的类集合。Java"平台的任何实现被假设支持Java编程语言,虚拟机和"API"。...
2020-05-17 18:06:44 344
原创 Android NDK入门基础笔记
原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码。使用 NDK 将 C 和 C++ 代码编译到原生库中,然后使用 Android Studio 的集成构建系统 Gradle 将原生库打包到 APK 中。Java 代码随后可以通过Java原生接口(JNI)调用原生库中的函数。NDK的作用:进一步提升设备性能,以降低延迟,或运行计算密集型应用,如游戏或物理模拟。 重复使用您自己或其他开发者的 C 或 C++ 库。Android Studio 编译
2020-05-10 18:50:20 243
原创 音视频基础知识学习笔记
1 视频编码:视频编码就是指通过特定的压缩技术将某个视频格式文件转换成另一种视频格式的文件方式,视频传输中最重要的是编解码标准有国际电联的H.261/H.263/H.264/H.265,运动静止图像专家组的M-JPEG和国际标准化组织的运动图像专家组MPEG系列标准,此外还有网上广泛应用的Real-Networks的RealVideo/微软公司的WMV以及Apple的QuickTime等。...
2020-05-05 19:00:27 617
原创 iOS基础及GPS位置服务地图编程学习笔记
AVFoundation框架是一个功能强大的多媒体框架,用于iOS中音频/视频/音频会话/对摄像头和麦克风控制等功能的开发。AVFoundation框架在对声音控制与音视频播放方面有着强大的功能,它是一个包含音频和视频内容的Object-C类。框架包含的服务:声音会话管理; 对应用媒体资源的管理; 对编辑媒体内容的支持; 捕捉声音和视频的功能; 播放音频和视频的功能; 轨迹管...
2020-05-05 13:25:54 249
原创 iOS基础网络编程学习笔记
iOS进行网络交互的过程是在Web Service应用层进行的,而Web Service采用的Http和Https协议1.Http概述:Http(Hypertext Transfer Protocol)是超文本传输协议,基于TCP/IP协议之上的应用层的协议。Http协议支持C/S网络结构,是无连接协议,即是每次都有请求建立连接,当服务器处理完客户端请求,应答完成后就会断开链接,不会一直占...
2020-05-04 17:25:57 440
原创 iOS数据存储学习笔记
iOS提供本地存储和云存储(iCloud)方式。本地存储的五种机制:属性列表(类Android中的XML存储方式):可以将集合对象以键值对的形式读写属性列表(plist)中; NSUserDefaults(类Android中的SharePreferences的存储方式):轻量级的存储机制; 对象归档(类Android中的File序列化存储):可以将对象的状态保存到归档文件中; SQL...
2020-05-03 20:45:15 336
原创 iOS图形与图像处理学习笔记
UIScrollView是UIView的子类,用于滚动视图的显示,以及当前视图显示不了所有内容时的滚动显示,图片浏览功能也是建立在UIScrollView滚动视图的基础上。PageControl一般与UIScrollView一起使用,用于显示图片浏览动画时具体是第几张图片。UIScrollViewDelegate的协议:- (void)scrollViewDidScroll:(UIScr...
2020-05-02 16:57:27 253
原创 iOS视图控制器使用学习笔记
UIViewControl是所有视图控制类的父类,所有子类都继承于它。视图控制器是为iPhone应用程序提供了基础的视图控制模型,用户可以通过视图控制器来管理视图的继承关系。所以使用视图控制器可以方便地管理视图中的子视图的子视图,如不使用视图控制器来操作视图的话,那么所有的视图的视图必须有继承管理。(Android中的Activity的作用也是用于添加布局控件及控制控件之间的调用操作的关系,把...
2020-05-01 22:18:25 455
原创 iOS高级界面编程学习笔记
1.UIImageView图片控件(类比于Android中的ImageView控件):UIImageView是用来在屏幕上显示图片的一个视图,如要显示图片,首先需要将图片文件加载到UIImage上,然后通过方法使用UIImage。imageNamed:通过项目中的文件来创建; imageWithCGImage:通过Quartz 2D对象来创建; imagewithContents...
2020-04-18 22:28:22 274
原创 iOS基础界面编程———常用UIView控件的使用
UIView的子类UIWindow: UILabel:类比于Android中的TextView的显示功能; UIPickerView: UIProgressView: UIActivityIndication: UIImageView: UITableBar: UIToolbar: UINavigationBar: UITableViewCell: UIActionShee...
2020-04-11 22:43:26 294
原创 Android组件化架构学习笔记——架构演化
1. 基础架构:使用Android studio开发时,根据依赖原则,用最简单的线性架构来接耦:使用Base module引入多种工具库; 使用Framework module编写框架逻辑,可以被持续复用; 将业务集中到Common module中以保持业务高内聚,利用文件夹来区分不同的业务间的关联,一个文件夹作为一个独立业务。 app module被编译打包生成app。基础架构的...
2020-04-06 20:58:27 394
原创 Android组件化架构学习笔记——组件化流通
1.内部流通:Android studio中的Gradle有着自身临时存储的仓库,但是非常不易于管理,这种情形下引入Maven仓库。1.1 Maven基础:官网的Maven仓库。Android studio使用Gradle引用的第三发库来自两种网络仓库,一种时MavenCenter,另一种是JCenter。两个仓库都具有相同的使命:提供Java或Android library...
2020-04-06 18:55:07 270
原创 Android组件化架构学习笔记——组件化分发2
1.组件化列表配置:1.1:Javapoet语法基础:Javapoet是Java编译时注解开发的工具类库,Javapoet提供编写Java代码的接口,在编译器中自动生成源代码。Javappoet中有五种常用的类:ParamterSpec:参数声明; MethodSpec:构造函数或方法声明; TypeSpec:类/接口或者枚举声明; FieldSpec:成员变量; Java...
2020-04-06 17:33:04 334
Android下自动连接指定SSID的WIFI的简单实现的demo
2018-10-31
GamepadView、JostickView仿创客工场中的遥感的自定义View
2018-08-04
Android Blockly积木编程源码对Workspace中的block数据保存及读取的流程,及改造原生代码实现Trash垃圾桶中的block保存及读取
2018-01-31
Android 画布Canvas之控件连线操作Demo
2017-07-24
Android自定义万能Canvas画布Demo
2017-07-17
Android自定义画布及环形菜单
2017-07-02
Android中RecyclerView的item运用覆盖view的方法实现item的动画效果1
2017-04-04
Android中RecyclerView的item运用覆盖view的方法实现item的动画效果
2017-04-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人