- 博客(294)
- 资源 (2)
- 问答 (3)
- 收藏
- 关注
转载 深入理解并掌握C++ std::atomic 原子操作 的实用技巧与应用
std::atomic_bool是std::atomic的类型别名,这意味着它们是完全相同的类型。在C++标准库中,为了方便使用,为一些常用的类型提供了类型别名,例如std::atomic_int是std::atomic的类型别名,std::atomic_long是std::atomic的类型别名,等等。例如,对于std::atomic或std::atomic,只有load()和store()等操作是原子的,而对于std::atomic或std::atomic等整数类型,所有操作都是原子的。
2024-07-30 15:00:10
3492
1
原创 程序员为什么不喜欢关电脑?
你是否注意到,程序员们似乎从不关电脑?别以为他们是电脑上瘾,实则是有他们自己的原因!让我们一起揭秘背后的原因,看看程序员们真正的“英雄”本色!
2024-02-07 15:37:39
632
原创 FFmpeg中的Color颜色参数解析、转码和HDR
视频中帧的颜色信息非常重要,表示着编码时用到的标准,意味着解码时也要对应上,或者要使用正确的转换函数,否则就会带来色差问题。
2024-02-06 17:37:17
4471
原创 Kotlin手记(一):基础大杂烩
2011年7月,JetBrains推出Kotlin项目,这是一个面向JVM的新语言2012年2月,JetBrains以Apache 2许可证开源此项目。2016年2月15日,Kotlin v1.0发布,这被认为是第一个官方稳定版本。在Google I/O 2017中,Google宣布在Android上为Kotlin提供最佳支持,取代java成为官方开发语言。
2024-02-05 19:59:38
1661
原创 C++ 手记(二):C++ 11新增的好用feature
【声明】:本文为网络和个人学习总结汇总,方便查阅!除了前文已经提到了extern外部模板,lambda表达式以外,还有一些比较好用feature:C++11 引入了委托构造的概念,这使得构造函数可以在同一个类中一个构造函数调用另一个构造函数,从而达到简化代码的目的:继承构造在继承体系中,如果派生类想要使用基类的构造函数,需要在构造函数中显式声明。而在c++11中:直接就可以使用基类的所有构造函数了,更重要的是,如果其中某一个继承构造函数不被相关的代码使用,编译器不会为之产生真正的函数代码,这样比透传
2024-02-05 16:42:07
1241
原创 C++ 手记(一):常用基础知识
extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。通常用于当有两个或多个文件共享相同的全局变量或函数。
2024-01-30 21:03:03
1019
原创 Mac下手动源码编译安装Swig
下载链接:https://github.com/PhilipHazel/pcre2/releases。也是使用rpath,但是在/usr/local/lib目录下确实没有libc++。下载链接:https://www.swig.org/download.html。swig依赖pcre库,需要先安装pcre。我这里需要的版本是4.0.2。,选择自己所需版本下载。
2024-01-30 20:58:57
1733
原创 Android JNI浅析、Java和Native通信对象的传值和回调
JNI是一个本地编程接口,它允许运行在Java虚拟机的Java代码与用其他语言(如C,C++和汇编)编写的库交互。
2023-03-08 16:21:36
1763
原创 一文读懂MP4封装格式
MP4或称MPEG-4第14部分(MPEG-4 Part 14)是一种标准的数字多媒体容器格式。扩展名为.mp4。虽然被官方标准定义的唯一扩展名是.mp4.mp4.m4a大部分数据可以通过专用数据流嵌入到MP4文件中,因此MP4文件中包含了一个单独的用于存储流信息的轨道。
2022-11-15 15:11:54
3899
原创 C++11:互斥锁std::mutex和std::lock_guard/std::unique_lock
C++11中新增了std::mutex,它是C++标准程序库中的一个头文件,定义了C++11标准中的一些互斥访问的类与方法等。mutex是ualclusion(互斥)的简写。
2022-10-24 15:58:49
3879
原创 C++11:移动语义Move Semantics和完美转发Perfect Forwarding
关于右值引用的说明,我们在上一篇文章中已经通过具体的例子来了解了!那么它到底有什么用?我这里引用一下一篇2006年非常经典的论文的原文:!推荐大家阅读一下!这里简单翻译一下就是:事实证明,右值引用和左值引用的组合正是轻松编码移动语义所需要的。右值引用也可用于实现完美转发,这是 C++ 中迄今为止未解决的问题。从普通程序员的角度来看,我们从右值引用中得到的是更通用、性能更好的库。
2022-10-09 16:44:24
621
转载 C++11:左值、右值、左值引用、右值引用有什么区别?
能够取地址,有名字的值就是左值编译器允许我们对左值建立引用,但不允许对右值建立引用。也就是说常量左值引用即可以操作左值,也可以操作右值。举个例子:int a = b+c, a 就是左值,其有变量名为a,通过&a可以获取该变量的地址;表达式b+c、函数int fun()的返回值是右值,在其被赋值给某一变量前,我们不能通过变量名找到它,&(b+c)这样的操作则不会通过编译。但这种定义出来的右值引用并无实际用处:一方面,右值引用主要用于移动语义和完美转发,其中需要有修改右值的权限;
2022-10-09 11:45:09
504
原创 OpenGL进阶(三)之混合Blending
OpenGL中,混合(Blending)通常是实现物体透明度(Transparency)的一种技术。透明就是说一个物体(或者其中的一部分)不是纯色(Solid Color)的,它的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。透明的物体可以是完全透明的(让所有的颜色穿过),或者是半透明的(它让颜色通过,同时也会显示自身的颜色)。一个物体的透明度是通过它颜色的alpha值来决定的。Alpha颜色值是颜色向量的第四个分量。alpha1.0–>物体不透明alpha0.0–>物体完全透明。
2022-09-22 21:45:00
654
原创 浅谈Android OOM及定位分析
要定位OOM问题,首先需要弄明白Android中有哪些原因会导致OOM,Android中导致OOM的原因主要可以划分为以下几个类型:Android 虚拟机最终抛出OutOfMemoryError的代码位于/art/runtime/thread.cc。下面两个地方都会调用上面方法抛出OutOfMemoryError错误,这也是Android中发生OOM的主要原因。
2022-09-22 15:06:57
2639
转载 JNI内存方面说明以及相关类型手动释放内存
它的生命期是在Native Method的执行期开始创建(从Java代码切换到Native代码环境时,或者在Native Method执行时调用JNI函数时),在Native Method执行完毕切换回Java代码时,所有Local Reference被删除(GC会回收其内存),生命期结束(调用。注意Local Reference的生命周期,如果在Native中需要长时间持有一个Java对象,就不能使用将jobject存储在Native,否则在下次使用的时候,即使同一个线程调用,也将会无法使用。
2022-09-19 20:56:57
1327
原创 OpenGL进阶(二)之像素缓冲PixelBuffer
PBO(Pixel Buffer Object)非常类似VBO,以便于将顶点数据和像素数据存储到缓冲对象中,这种存储像素数据的缓冲区对象称为像素缓冲区对象 (PBO)。另外,添加了2个额外的“目标”标志。系统内存,共享内存或者显存。用于将像素数据传送到PBO,或者将PBO传输到像素数据。举个例子,和是“打包(pack)”像素操作, 而,和是“解压(unpack)”操作.当一个PBO绑定到标志上时,
2022-09-19 15:35:19
2433
原创 FFPlay播放pcm和yuv帧数据
各个参数:-ar 表示采样率-ac 表示音频通道数单声道是 1,Android 中为 AudioFormat.CHANNEL_IN_MONO双声道是 2,Android 中为 AudioFormat.CHANNEL_IN_STEREO-f 表示 pcm 格式,sample_fmts + le(小端)或者 be(大端)sample_fmts可以通过ffplay -sample_fmts来查询-i 表示输入文件,这里就是 pcm 文件。
2022-09-07 12:06:45
1924
原创 OpenGL进阶(一)之帧缓冲FrameBuffer
帧缓冲(Framebuffer),它被储存在显存中,包括:用于写入颜色值的、用于写入深度信息的和允许我们根据一些条件丢弃特定片段的。我们目前在前边入门文章中所做的所有操作都是在的渲染缓冲上进行的。默认的帧缓冲是在你创建窗口的时候生成和配置的(GLFW帮我们做了这些)!由于我们的帧缓冲不是默认帧缓冲,渲染指令将不会对窗口的视觉输出有任何影响,这个过程也被称为。
2022-09-06 22:26:09
4421
原创 OpenGL入门(五)之Matrix矩阵操作和坐标系统
为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵,最重要的几个分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate),它在之后会变为世界坐标(World Coordinate),观察坐标(View Coordinate),裁剪坐标(Clip Coordinate),并最后以屏幕坐标(Screen Coordinate)的形式结束。
2022-09-05 17:28:39
2381
原创 OpenGL入门(四)之纹理Texture
纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节!我们可以在一张图片上插入非常多的细节,这样就可以让物体非常精细而不用指定额外的顶点,来减小开销!为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分。这样每个顶点就会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(采集片段颜色)。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。
2022-09-02 18:59:43
2935
原创 OpenGL入门(三)之着色器Shader
GLSL(OpenGL Shder Language):OpenGL着色器语言,用于写Shader的语言。GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。特别的对于来说,每个输入变量也叫!我们可以查询当前支持的属性个数!一般来说都是16个!
2022-09-01 17:57:39
2070
原创 OpenGL入门(二)之渲染管线pipeline,VAO、VBO和EBO
在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。图形渲染管线可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际的有颜色的像素。图形渲染管线可以被划分为几个阶段,每个阶段将会把前一个阶段的输出作为输入。.........
2022-08-29 20:16:48
1616
原创 OpenGL入门(一)之认识OpenGL和创建Window
OpenGL是一个由Khronos组织制定并维护的规范(Specification),供我们访问GPU资源,OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值,具体函数实现由各大显卡厂商提供!
2022-08-25 17:39:46
1269
转载 Android 获取位置信息
获取经纬度后在地图上查询发现,位置存在一定偏移,这个是因为使用的坐标系不一致引起的。我国出于国家安全的考虑,会将所有的电子地图经行加偏处理,由真实的地理坐标系又称地球坐标系(WGS84)转换为火星坐标系(GCJ02),但是使用 location 获取的经纬度又是WGS84坐标系的,所以再其他地图上显示会出现位置偏移现象。目前坐标系主要有以下几种:WGS84坐标系:地球坐标系,国际通用坐标系GCJ02坐标系:火星坐标系,WGS84坐标系加密后的坐标系,Google国内地图、高德、QQ地图使用。...
2022-08-17 18:07:16
5059
1
转载 介绍一种性能较好的 Android native unwind 技术
设计实现 QUT 的初衷是希望在 32 位环境下通过 hook 监控某些资源使用的调用栈,过程中察觉到 libunwindstack 的性能问题也发现基于异常处理的回溯有不少的改善空间。业界也有人提出类似的思路,比如 Reliable and Fast DWARF-Based Stack Unwinding 这篇论文 [12] 就描述了精简回溯过程后直接生成机器码的技术,有很大参考意义。...
2022-08-15 11:22:51
1651
转载 使用GAPID报错Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
本文转自:https://blog.csdn.net/zzwfd/article/details/104005744在使用GAPID点击start的时候,报错:Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS找到一篇文章:https://blog.csdn.net/zzwfd/article/details/104005744解决了这个问题!小米:在开发者选项里,把“USB调试(
2022-06-10 14:14:24
1013
转载 Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus
本文转自:美团技术团队 https://tech.meituan.com/2018/07/26/android-livedatabus.html背景对于Android系统来说,消息传递是最基本的组件,每一个App内的不同页面,不同组件都在进行消息传递。消息传递既可以用于Android四大组件之间的通信,也可用于异步线程和主线程之间的通信。对于Android开发者来说,经常使用的消息传递方式有很多种,从最早使用的Handler、BroadcastReceiver、接口回调,到近几年流行的通信总线类框架Ev
2022-05-26 21:10:33
1332
原创 Android 11中对于64位应用arm执行MTE导致crash的问题
前言App 64位包在Android 11上crash,崩溃堆栈也很诡异,报了一个native的空指针,代码中一个函数参数为int64_t类型的指针,并且确定不为空!分析在仔细调试时,发现函数中传入的指针地址,和使用时的指针地址不一致,从而导致空指针,但是奇怪的是32位的包就没有这个问题!在查阅了一些资料,发现是由于Android 11中对于64位的进程,arm v9 cpu启用了MTE( Memory Tagging Extension,内存标记拓展)功能。MTE 的工作原理是对堆栈、堆和全局变量
2022-04-20 11:07:33
1354
转载 ANR机制以及问题分析
本文转自:https://duanqz.github.io/2015-10-12-ANR-Analysis1. 概览ANR(Application Not Responding),应用程序无响应,简单一个定义,却涵盖了很多Android系统的设计思想。首先,ANR属于应用程序的范畴,这不同于SNR(System Not Respoding),SNR反映的问题是系统进程(system_server)失去了响应能力,而ANR明确将问题圈定在应用程序。 SNR由Watchdog机制保证,具体可以查阅Watc
2022-04-01 11:09:29
1241
转载 ANR问题简析
本文转自:https://blog.csdn.net/qzh123456/article/details/78737791前言ANR问题,相信是每位开发日常都会遇到的问题,对于这类问题的分析,按照官方的推荐,或网络博客的总结思路能解决一定的问题,但是多数时候大家的困惑就是应用本逻辑很简单,耗时很短或应用堆栈完全正常,或者或处于空闲状态,可系统为什么就认为接收者发生ANR了呢?下面将之前公司的一次内部分享开放出来,用几个实例从不同角度分析导致ANR产生的Root Case。也希望对大家以后分析该类问题有一
2022-03-31 18:17:46
1889
原创 C/C++ 宏拼接和宏展开为字符串
前言有一个需求是将一个宏和一个字符串拼接,然后在代码中拿到这个字符串,记录一下。方案首先,我们知道非常常见的一个宏的拼接和展示字符串的宏定义:#define CONTACT(x,y) x##y //拼接#define STR(x) #x //转字符串这种宏定义在开发中是很常见的!但是,如果上边我们那个需求中,让一个字符串和一个宏的值进行拼接的话,纯粹使用上边的宏就不行了,这里我们要使用二级的宏,这样才能拼接到宏的值://二级#define CONTACT2(x,y) CONTAC
2022-03-14 20:13:35
15822
1
转载 INSTALL_FAILED_TEST_ONLY的原因及解决方案
本文转自:https://blog.csdn.net/vfush/article/details/80320596前言有一天给测试同学打了个deubg 包发现无法安装,提示无法解析,使用adb install 安装后提示INSTALL_FAILED_TEST_ONLY,原来是Android Studio 3.0会在debug apk的manifest文件application标签里自动添加 android:testOnly="true"属性问题在Android Studio进行开发的时候,生成的de
2022-03-01 16:44:36
7260
1
原创 C/C++使用dlopen手动加载动态so库
前言类似于Java中System.load()和System.loadLibrary(),在native层就是通过dlopen打开,然后dlsym去获取函数或者变量的符号。手动加载C中动态加载举个例子,在c中打开x264的一个函数:#include <x264.h>#include <dlfcn.h>typedef int (*x264_encoder_encode_func)(x264_t *, x264_nal_t **pp_nal, in
2022-03-01 15:33:01
3322
原创 C/C++ “undefined reference to XXX“问题总结
这里看到一篇总结非常全面的文章,记录一下:"undefined reference to XXX"问题总结
2022-02-28 16:08:15
1228
翻译 了解速率控制模式Rate Control Mode-CBR,VBR,CRF(x264、x265、vpx)
声明:本文为Understanding Rate Control Modes (x264, x265, vpx)的译文。什么是“速率控制”?这是视频编码器在决定为给定帧花费多少比特时所做的事情。(有损)视频编码的目标是尽可能多地保存比特,减少原始输入文件的文件大小,同时保持尽可能多的质量。速率控制是确定尺寸和质量之间权衡的关键步骤。速率控制有多种形式——你会认识术语“1-pass”和“2-pass”、“CBR”和“VBR”,也许你知道“VBV Encoding”或“CRF”。你为什么需要关心?您经常会
2022-02-09 18:08:19
5981
原创 H.264编解码浅析
声明:本文是阅读《新一代视频压缩标准H.264_AVC》笔记总结简介H.264,又称为MPEG-4第10部分,高级视频编码(英语:MPEG-4 Part 10, Advanced Video Coding,缩写为MPEG-4 AVC)是一种面向块,基于运动补偿的视频编码标准。视频压缩预测编码帧内预测解决空间冗余,因为一帧的图片相邻位置的像素点一般是相似的,突变概率较小。帧间预测解决时间冗余,因为相邻帧的图片一般只是个别像素的移动改变。变换编码视频信号中包含大量的直流和低频部分,还有少量高
2022-01-20 12:14:33
3141
转载 CMake构建类型和编译选项
本文转自:https://hijk.tech/cmake-tutorial/05/构建类型构建类型(Build Type)指的是编译构建一个代码工程时采用的配置。对于使用IDE的工程,一般可以在IDE内的选项上修改构建类型,例如Visual Studio工程中的Configuration,默认分为Debug和Release,在每次编译前可以选择使用哪一种。但对于命令行式的构建系统,一般需要自己调整makefile中的编译选项,来实现不同的构建类型。使用cmake可以不必手动修改编译选项,能够方便的切换构
2021-12-17 18:43:01
9656
Webkit在加载派生资源
2016-10-14
webview显示别的平面的字体该如何做?
2016-04-25
Android SwipeRefreshLayout加载颜色不会显示!!!!!
2016-04-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人