- 博客(246)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 windows下使用vscode + NDK搭建 Android c++编译环境
我的环境下,NDK路径是:D:/Android/sdk/ndk/23.1.7779620;Android SDK路径是:D:\Android\Sdk,SDK目录下有 cmake\3.22.1\bin,将其添加到PATH环境变量中。测试printf打印和log打印。
2024-02-29 14:51:35 1006
原创 docker搭建gitlab
使用root用户登陆 http://192.168.1.190:9980,创建用户,账号邮箱需与生成ssh时的一致。然后一直确认就可以,建议不要用-t rsa,openssh不建议使用,好多问题。会在~/.ssh/下生成两个文件:id_ecdsa、id_ecdsa.pub。git单项目设置(适合不同项目不同用户名称使用)将文件夹push到已存在的仓库。将文件夹push到空仓库。
2023-12-15 11:56:21 632
原创 C++ 前置声明错误使用导致的内存泄漏及正确使用方式
编译和运行都不报错。A()但是并没有调用A的析构函数,为什么?编译时有警告:提示’a’是一个不完整类型。如果不认真看警告,真不容易发现。程序不会有错误,但是会有内存泄漏。为什么会这样?因为 C++ 编译器自上而下编译源文件,del(A* a)中a是指针,已经知道占据内存的大小,所以可以编译成功。
2023-10-11 16:33:40 331
原创 C++ shared_ptr类型转换的实现原理与type traits类型萃取
通过type_traits的is_convertible<typename T, typename U>,判断类型T是否能转换为类型U,enable_if_t返回一个指定的类型int,并设置默认值为0。上面的代码,很容易理解,B虽然是A的子类,但是TypeCast<A>和TypeCast<B>并无关系,不能隐式转换能理解。那shared_ptr是如何实现的呢?是可以实现了,但是又出现一个新问题,任何一个TypeCast模板对象都能使用此构造函数,即使_Ty2不是Ty的子类也能调用此构造函数实现隐式转换。
2023-10-10 19:12:59 488
原创 ffmpeg命令笔记
查看摄像头支持的输出格式(yuy2、mjpg及分辨率、帧率)ffmpeg -list_options true -f dshow -i video="Camera"打开摄像头ffmpeg -f dshow -i video="Camera"
2023-03-24 15:27:36 261 1
原创 notepad++中hex-editor的一个bug
为了对照,我还用notepad++打开了其他几个bmp文件,都是正确的;虽然显示是错的,但是图片能够正常打开。就唯一那一张会有这个问题。
2023-03-24 14:54:55 364
原创 函数sync、fsync与fdatasync的总结整理
1、如果是对所有的缓冲区发出写硬盘的命令,应该使用sync函数,但应该注意该函数仅仅只是把该命令放入队列就返回了,在编程时需要注意。2、如果是要把一个已经打开的文件所做的修改提交到硬盘,应调用fsync函数,该函数会在数据实际写入硬盘后才返回,因此是最安全最可靠的方式。3、如果是针对一个已经打开的文件流操作,则应该首先调用fsync函数把修改同步到内核缓冲区,然后再调用fsync把修改真正的同步到硬盘。
2023-03-24 14:54:38 1406
原创 JPEG文件添加应用数据
在做UVC输出图像时,想同时将图像的特征数据一并传出。最开始考虑的是linux设备上虚拟出一个cdc设备,单独输出特征数据。在了解JPEG文件的jfif和exif格式后,发现是可以文件中是可以带上app自定义数据段的。所以可以考虑在UVC输出图像时,自定义mjpeg图像的格式,将图像的特征数据填充到mjpeg图像的app段。
2023-03-24 14:51:32 728
原创 摄像头模组:CMOS图像传感器(Sensor)与镜头(Lens)参数指标
sensor尺寸指的是对角线的长度,单位是英寸。长宽比通常是4:3。由于历史原因sensor中16mm为1’'。
2023-03-24 14:44:00 19716
原创 VS2019智能感知卡顿不跟手的解决方法
最近一直用vscode做开发,今天需要用c#做个工具就打开了好久没用的vs2019。在开发的时候发现智能感知不跟手,要过好几秒才有反应。以为是电脑的问题,重启了没解决;又以为是vs2019的问题,用vs2017问题还是一样。猜测是vs的扩展在作怪,就打开安装的扩展,可疑都禁用掉,发现问题解决了;然后再一个一个排除,发现是Insight惹的祸:可能是在安装CUDA的时候引入的,禁用掉就好了。...
2021-08-19 15:29:05 1996
原创 c++ 宏定义日志输出
以下在linux下测试有效#include <stdio.h>#include <time.h>#include <chrono>using namespace std;static const char* tag = "main";static const char tag_debug = 1;static const char tag_user_milli_sec = 0;#define LOG (printf("%s (%d) - <%s&
2021-03-31 15:28:51 1395
原创 vscode+docker+ssh搭建开发环境
1. docker安装linux镜像拉取镜像:docker pull ubuntu:16.04运行容器,并设置ssh端口(容器22端口映射到主机9022)、文件夹映射(容器/host文件夹映射主机d:\docker_fold):docker run -itd --name ubuntu_vscode_dev -p 9022:22 -v /d/docker_fold:/host ubuntu:16.04 /bin/bash2. docker容器安装ssh和ubuntu中安装ssh一样的,不
2021-03-30 20:33:21 1839 1
原创 DirectShow实现USB相机预览和抓图例子(使用ICaptureGraphBuilder2)
关键概念:filterfilter graphfilter graph managerfilter interface (COM interface)filter Pin(输入输出端子)Pin Property及Pin MediaType系统设备枚举用于选择设备GraphEdit工具使用Video Capture及ICaptureGraphBuilder2使用视频采集设备、VFW和WDM及KsProxy使用驱动自带的设置窗口控制设备及视频设置IAMStreamConfig:设置帧率、
2020-11-27 12:16:19 2671 2
原创 DirectShow实现USB相机预览和抓图例子(手动构建filter链)
// show.cpp/** * 纯手工打造构建filter graph,实现视频预览和抓图 * * filter graph链路图: * video device(KsProxy) filter [OUT capture pin] --> [IN input pin] smart tee filter [OUT capture pin] --> [IN input pin] sample grabber filter [OUT output pin] --> [IN inpu
2020-11-27 12:16:04 1090
原创 DirectShow笔记
DirectShow是Windows平台的流媒体框架。CrossBar:a device might have multiple inputs,such as S-Video and composite video,The CrossBar filter enables the application to select the input.CrossBar可以在多路输入之间切换输入。device pin:设备引脚filter通过设备引脚连接,但是数据不是通过引脚连接移动。1. DirectSho
2020-11-27 12:15:35 634
原创 DirectShow图像和相机设置
参考:Configure the Video Quality - DirectShow图像质量设置逆光补偿亮度对比度色调饱和度清晰度伽马白平衡增益相机控制缩放调焦曝光光圈全景倾斜滚动低照度补偿 // 视频质量设置 IAMVideoProcAmp *pProcAmp = NULL; HRESULT hr = pDevFilter->QueryInterface(IID_IAMVideoProcAmp, (void **)&pP
2020-11-27 12:15:22 2211 1
原创 C++虚析构函数及delete操作分析
关键字:scalar deleting destructor、虚表通常我们在写一个基类的时候,若基类成员变量需要动态申请内存空间或基类成员变量引用了系统资源时,需定义类的析构函数来明确在删除对象时需要释放的成员。1. 析构函数析构函数在析构时调用。若在堆上申请的内存,则不需要调用delete释放内存,只需要调用析构函数。1.1 析构函数与delete在堆上申请的内存需要delete删除对象。在删除对象时既要执行析构又要释放内存。class A{public: ~A(){}};int m
2020-10-30 12:22:44 7086
原创 C++左值右值与右值引用
本文总结 C++ 左右值的定义,和 C++11 中右值引用的用途转载:C++11新特性3 - 左右值与右值引用C++ 11: Rvalue Reference – Move SematicsC++ 11: Rvalue Reference – Fowarding1. 左值与右值C++ 中,左右值的简化定义:左值:占用了一定内存,且拥有可辨认的地址的对象右值:左值以外的所有对象典型的左值,C++中绝大部分的变量都是左值int i = 1; // i 是左值int *p = &am
2020-10-27 09:50:37 510 1
原创 C++名字查找
在学习C++一开始,我们就知道在使用类型、变量和函数时需要先定义。名字查找的过程比较直截了当:首先,在名字所在的块中寻找其声明语句,而且只找名字使用之前出现的声明如果没有找到,继续查找外层作用域如果最终没有找到匹配的声明,则程序报错当然,对于定义在类内的成员函数中的名字与上述的查找规则有所区别,类的定义分两步处理:首先,编译成员的声明直到类全部可见后,才编译函数体。成员函数中使用的名字按照如下方式解析:首先,在成员函数内查找该名字的声明,只有在函数使用前出现的声明才被考虑若成员函
2020-10-23 12:43:57 1577
原创 thrift源码分析(四)TProtocol数据编码协议实现与CRTP
TProtocol是Thrift数据序列化和反序列化的工具类,与Google的ProtocolBuffer类似。1. Thrift TProtocol介绍可接受的数据类型实现了的序列化格式Thrift中实现了多种序列化格式:– TBinaryProcotol:自定义的二进制格式– TJSONProtocol:JSON2. TVirtualProtocol和TProtocolDefaults的源码分析在看完TVirtualProtocol和TProtocolDefaults后,我觉得这两个
2020-10-21 16:30:40 1794 1
原创 zookeeper笔记
zookeeper是一个分布式协调服务系统。分布式协调服务系统就是一个动物园。通常用于提供以下功能:命名服务发布/订阅配置管理分布式同步/分布式锁组服务/服务注册1. zookeeper基础1.1 文件系统zookeeper维护一个类似文件目录的结构(znode),和通常的文件目录不同的是,每个目录节点可以存储数据。目录结构有4种:永久目录,创建后永久存在永久顺序目录,创建后永久存在,且按序号顺序创建临时目录,创建者离线后将删除临时顺序目录,创建者离线后将删除1.2
2020-10-12 12:17:12 160
原创 操作系统文件管理及IO机制
1. 硬盘磁盘参数:磁头磁柱/磁道扇区(磁盘读写的最基本单位)扇区大小(常见的有512byte,4096byte)磁盘大小计算:磁头数 x 磁道数 x 扇区数 x 扇区大小2. 文件系统文件系统有多种格式:FAT32、NTFS等等操作系统中文件读写以簇(windows)或块(linux)为单位分配磁盘空间,通常一个簇/块由多个扇区组成。一个扇区只属于一个簇/块,一个簇/块只能由一个文件占用,一个文件可能占用多个簇/块。所以有时候我们看到一个文件,不管写1000还是2000个字节,占用
2020-09-29 11:24:27 990
原创 c#调用c++接口笔记
c#调用c++的函数在想通了之后就不难了,说是函数调用,其实就是参数传递的过程。只要能理解c#和c++中数据在内存中的存放形式,再奇葩的函数都不会有问题了。通常c++导出的接口都是extern c形式,即c语言形式接口。1. C++函数中的常见类型传递方式1.1 内置类型intshortchar内置类型通常有固定大小的内存,只需要在c#中找到对应的固定大小类型即可。1.2 数组/指针类型int i[100]char*void*数组或指针传递的都是地址,在接收时有多种方式:
2020-09-23 11:33:25 1846 2
原创 单片机及硬件知识点
1. 单片机keilkeil μVision是51单片机的c语言IDE。是51系列单片机软件开发系统,包括c语言编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器,通过μVision(集成开发环境)将这些部分组合在一起。ST-LINK:ST仿真器,用于调试2. 各种接口及总线经常听到各种线啊,口啊;一点都不懂,现在总结一下,可能不准确。串口、并口、COM口、RS232、RS422、RS485、USB、UART、I2C、SPI、GPIO根据数据传输方式分:串口:数据串形传输,单车道
2020-09-19 11:52:59 364
原创 c++ RAII的理解
RAII:Reource Acquisition Is Initializetion(资源获取即初始化),是利用C++类对象的生命周期管理资源的一种方式(包括:分配的堆内存、线程资源、socket、打开的文件、锁、磁盘空间、数据库连接等)。这种技术的另一个名称是SBRM(作用域绑定资源管理),RAII对象的生命周期由于作用域退出而结束。RAII可以总结如下:将每个资源封装到一个类中构造函数获取资源并创建类的所有变量,若不能完成则抛出异常析构函数释放资源同时不能抛出异常始终通过RAII类的实
2020-09-14 10:49:52 347
原创 c/c++中入栈顺序
c/c++中的都是从右往左入栈的,在调用函数时,若参数需要运算则先运算,然后入栈,再调用函数。分析下面代码的运算结果:int main(){ /* 1. 入栈顺序,参数从右往左入栈 2. 计算顺序,先入栈的先计算;计算完后再入栈 3. 传递的参数:实际变量,还是临时变量 */ int i=1; // 先计算,两次i++后i的值为3;传递的是实际变量i的值 printf("%d,%d\n", ++i, ++i); //3,3 // i+
2020-09-10 20:09:12 6210 6
原创 NSIS使用笔记
NSIS 使用笔记nsis是一个免费开源的Windows程序安装包生成工具。nsis可以创建带安装、卸载、系统设置、文件提取等功能的安装包。nsis采用脚本方式创建安装包,可以很方便的控制安装过程。查看NSIS手册是最好的学习方式。nsis几个概念nsis脚本包含的几个部分:Attributes安装包信息(名称、公司等等)Pages 安装向导页面Sections/FunctionsInstaller Attributes 安装器的属性NameInstallDirOutFile:
2020-08-27 16:43:15 1963
原创 C++类型转换
C++中有多种类型转换方式:强制类型转换static_castdynamic_castreinterpret_cast1. 强制类型转换想怎么转就怎么转,随便转,随心所欲的转:class A{}class B{}int main(){ A a; B *b = (B *)&a; // 这也可以转 int a1 = 100; void *p1 = (void *)&a1; char *p2 = (char *)&a1;
2020-07-21 12:23:40 1924
原创 Mysql知识点
索引:分类、数据结构、回表、索引覆盖(不需要回表)、组合索引、最左匹配、索引下推innodb索引:分类 主键、唯一、普通、全文、组合主键和唯一的区别:唯一可以有空值普通索引:既不是主键列、又不是唯一索引列组合索引:一个索引,包含多个列聚簇索引:B+树,以主键或唯一索引或行号为节点值建立B+树,叶子节点为行数据;每张表只能有一个聚簇索引。辅组索引:非聚簇索引,除了聚簇索引就是辅组索引;叶子节点存储的是主键值,通常需要二次查找。聚簇索引和非聚簇索引是什么?作用:提高查询速度为什么会慢?有i
2020-06-10 10:47:58 156
原创 相机自动曝光(AE)策略
根据图像区域灰度直方图调整曝光根据焦距调整曝光1. 灰度直方图自动曝光计算每帧图像感兴趣区域的灰度值,自动调节曝光。需要标定灰度值与曝光值的映射。2. 根据距离调整自动曝光需要有距离传感器,根据距离值调整自动曝光,需要标定。...
2020-06-06 10:55:35 2779
原创 如何学习一门新语言
语言基本概念及适用场景,与其他现有语言的异同,编译及运行环境语言语法,定义变量的语法、定义函数的语法、变量赋值的语法、函数调用的语法;局部变量、全局变量、静态变量、常量基本数据类型,数值型、字符型、数组;类型转换复杂数据类型,集合set、列表list、动态数组array、字典map、元组、迭代器运算符,例如:+、-、*、/、++、|、&、&&、||、–、^、!、%、>、==、<、>=、<=、!=条件语句:if else、switch case循环.
2020-06-04 14:41:11 207
原创 volatile的两个作用
volatile的两个作用:线程可见性内存屏障,保证指令不重排序volatile与线程可见性保证写后数据马上回写到系统内存写后通知其他CPU缓存数据过期,其他CPU读时需从内存中读取不能保证i++的原子性,即使声明了volidatevolidate int i ; i++应看成三个原子操作:1)从内存读取i至寄存器2)i自增13)写入i,回写到系统内存,通知CPU缓存过期volatile与cachelinevolatile为了保证线程可见性,每次修改volatile变量后都需
2020-05-15 14:30:52 641 1
原创 在vc++中使用vector后release版本的dll被debug的exe调用后出现异常
问题描述:生成的dll接口使用了std::vector,调用dll的程序与dll不是发布版本(dll是release,exe是debug;或dll是debug,exe是release),出现vector调用异常。项目代码链接:vcpp-vector-exportdll导出接口:struct Key{ char * key; int keySize;};/* 设备日志回调 */...
2020-04-15 09:34:24 758
原创 Spring表单验证
1. 自带表单验证@Null 被注释的元素必须为 null@NotNull 被注释的元素必须不为 null@AssertTrue 被注释的元素必须为 true@AssertFalse 被注释的元素必须为 false@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值@Decim...
2020-04-11 10:42:22 501
TA创建的收藏夹 TA关注的收藏夹
TA关注的人