自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

David

烂笔头

  • 博客(229)
  • 资源 (2)
  • 论坛 (1)
  • 问答 (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 159

原创 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 130

原创 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 46

原创 DirectShow图像和相机设置

参考:Configure the Video Quality - DirectShow图像质量设置逆光补偿亮度对比度色调饱和度清晰度伽马白平衡增益相机控制缩放调焦曝光光圈全景倾斜滚动低照度补偿 // 视频质量设置 IAMVideoProcAmp *pProcAmp = NULL; HRESULT hr = pDevFilter->QueryInterface(IID_IAMVideoProcAmp, (void **)&pP

2020-11-27 12:15:22 132

原创 C++虚析构函数及delete操作分析

关键字:scalar deleting destructor、虚表通常我们在写一个基类的时候,若基类成员变量需要动态申请内存空间或基类成员变量引用了系统资源时,需定义类的析构函数来明确在删除对象时需要释放的成员。1. 析构函数析构函数在析构时调用。若在堆上申请的内存,则不需要调用delete释放内存,只需要调用析构函数。1.1 析构函数与delete在堆上申请的内存需要delete删除对象。在删除对象时既要执行析构又要释放内存。class A{public: ~A(){}};int m

2020-10-30 12:22:44 85

原创 C++异常处理

《C++ primer》第五版 18.1 异常处理

2020-10-28 14:11:03 34

原创 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 36

原创 C++名字查找

在学习C++一开始,我们就知道在使用类型、变量和函数时需要先定义。名字查找的过程比较直截了当:首先,在名字所在的块中寻找其声明语句,而且只找名字使用之前出现的声明如果没有找到,继续查找外层作用域如果最终没有找到匹配的声明,则程序报错当然,对于定义在类内的成员函数中的名字与上述的查找规则有所区别,类的定义分两步处理:首先,编译成员的声明直到类全部可见后,才编译函数体。成员函数中使用的名字按照如下方式解析:首先,在成员函数内查找该名字的声明,只有在函数使用前出现的声明才被考虑若成员函

2020-10-23 12:43:57 170

原创 thrift源码分析(四)TProtocol数据编码协议实现

TProtocol是Thrift数据序列化和反序列化的工具类,与Google的ProtocolBuffer类似。1. Thrift TProtocol介绍可接受的数据类型实现了的序列化格式Thrift中实现了多种序列化格式:– TBinaryProcotol:自定义的二进制格式– TJSONProtocol:JSON2. TVirtualProtocol和TProtocolDefaults的源码分析在看完TVirtualProtocol和TProtocolDefaults后,我觉得这两个

2020-10-21 16:30:40 473

原创 zookeeper笔记

zookeeper是一个分布式协调服务系统。分布式协调服务系统就是一个动物园。通常用于提供以下功能:命名服务发布/订阅配置管理分布式同步/分布式锁组服务/服务注册1. zookeeper基础1.1 文件系统zookeeper维护一个类似文件目录的结构(znode),和通常的文件目录不同的是,每个目录节点可以存储数据。目录结构有4种:永久目录,创建后永久存在永久顺序目录,创建后永久存在,且按序号顺序创建临时目录,创建者离线后将删除临时顺序目录,创建者离线后将删除1.2

2020-10-12 12:17:12 51

原创 操作系统文件管理及IO机制

1. 硬盘磁盘参数:磁头磁柱/磁道扇区(磁盘读写的最基本单位)扇区大小(常见的有512byte,4096byte)磁盘大小计算:磁头数 x 磁道数 x 扇区数 x 扇区大小2. 文件系统文件系统有多种格式:FAT32、NTFS等等操作系统中文件读写以簇(windows)或块(linux)为单位分配磁盘空间,通常一个簇/块由多个扇区组成。一个扇区只属于一个簇/块,一个簇/块只能由一个文件占用,一个文件可能占用多个簇/块。所以有时候我们看到一个文件,不管写1000还是2000个字节,占用

2020-09-29 11:24:27 276

原创 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 125 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 53

原创 c++ RAII的理解

RAII:Reource Acquisition Is Initializetion(资源获取即初始化),是利用C++类对象的生命周期管理资源的一种方式(包括:分配的堆内存、线程资源、socket、打开的文件、锁、磁盘空间、数据库连接等)。这种技术的另一个名称是SBRM(作用域绑定资源管理),RAII对象的生命周期由于作用域退出而结束。RAII可以总结如下:将每个资源封装到一个类中构造函数获取资源并创建类的所有变量,若不能完成则抛出异常析构函数释放资源同时不能抛出异常始终通过RAII类的实

2020-09-14 10:49:52 39

原创 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 152

原创 NSIS使用笔记

NSIS 使用笔记nsis是一个免费开源的Windows程序安装包生成工具。nsis可以创建带安装、卸载、系统设置、文件提取等功能的安装包。nsis采用脚本方式创建安装包,可以很方便的控制安装过程。查看NSIS手册是最好的学习方式。nsis几个概念nsis脚本包含的几个部分:Attributes安装包信息(名称、公司等等)Pages 安装向导页面Sections/FunctionsInstaller Attributes 安装器的属性NameInstallDirOutFile:

2020-08-27 16:43:15 134

原创 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 50

原创 Mysql知识点

索引:分类、数据结构、回表、索引覆盖(不需要回表)、组合索引、最左匹配、索引下推innodb索引:分类 主键、唯一、普通、全文、组合主键和唯一的区别:唯一可以有空值普通索引:既不是主键列、又不是唯一索引列组合索引:一个索引,包含多个列聚簇索引:B+树,以主键或唯一索引或行号为节点值建立B+树,叶子节点为行数据;每张表只能有一个聚簇索引。辅组索引:非聚簇索引,除了聚簇索引就是辅组索引;叶子节点存储的是主键值,通常需要二次查找。聚簇索引和非聚簇索引是什么?作用:提高查询速度为什么会慢?有i

2020-06-10 10:47:58 71

原创 相机自动曝光(AE)策略

根据图像区域灰度直方图调整曝光根据焦距调整曝光1. 灰度直方图自动曝光计算每帧图像感兴趣区域的灰度值,自动调节曝光。需要标定灰度值与曝光值的映射。2. 根据距离调整自动曝光需要有距离传感器,根据距离值调整自动曝光,需要标定。...

2020-06-06 10:55:35 698

原创 如何学习一门新语言

语言基本概念及适用场景,与其他现有语言的异同,编译及运行环境语言语法,定义变量的语法、定义函数的语法、变量赋值的语法、函数调用的语法;局部变量、全局变量、静态变量、常量基本数据类型,数值型、字符型、数组;类型转换复杂数据类型,集合set、列表list、动态数组array、字典map、元组、迭代器运算符,例如:+、-、*、/、++、|、&、&&、||、–、^、!、%、>、==、<、>=、<=、!=条件语句:if else、switch case循环.

2020-06-04 14:41:11 82

原创 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 184

原创 在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 144

原创 Spring表单验证

1. 自带表单验证@Null 被注释的元素必须为 null@NotNull 被注释的元素必须不为 null@AssertTrue 被注释的元素必须为 true@AssertFalse 被注释的元素必须为 false@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值@Decim...

2020-04-11 10:42:22 93

原创 C#Struct结构体内存对齐

在c/c++中内存对齐是个经常遇到的问题,现在的CPU一次读取64bit,所以Struct编译时会自动8byte对齐。c#同样的结构体也是8byte对齐。using System;struct ss{ public int a; // 4字节 // public int aa; // 4字节 public Int64 aaa; public In...

2020-03-18 10:59:31 664

原创 docker安装nginx+rtmp模块搭建服务器实现ffmpeg推流+ffplay播放

docker可是一个好东西。在开发和测试的时候经常需要安装环境,而且在安装过程中可能出现非常多的问题,有了docker一切都不是问题了,一定要用好docker。在windows中也能使用docker。1. 在docker中安装nginx+rtmp拉取镜像docker pull alfg/nginx-rtmp创建并运行容器,映射出两个端口1935、80docker run -itd -p...

2020-03-16 17:18:42 2989

原创 使用C#与GO语言开发高性能且安全的Windows桌面应用程序

在Windows上开发桌面应用程序最快的方式无疑是使用C#,前有WinForm现有WPF,都是很好的开发框架,不管是MFC还是QT总还是复杂了一些。但是C#有一个最最大的缺点,就是没办法避免反编译,虽然我也经常反编译别人程序,但是绝不愿意看到自己的程序被别人反编译。曾经我考虑过用C/C++做核心的功能,界面用C#做。虽然也是一种办法,但是C/C++还是麻烦了一些,而且在部署时,需要同时安装.NE...

2020-03-12 17:18:25 1041

原创 c++ traits编程/基于特性的泛型模板编程

/** * traits编程的精髓: * 1. 在不同类中定义不同类型但是同名的别名 * 2. 函数使用不同类型重载,此类型不做任何传参,只用于重载区分 * 3. 定义一个对外的函数,内部获取输入类的类型区分别名,使用此别名类型创建对象,调用实际的重载函数 * * traits编程还可以用于函数返回值的定义,因为c++无法像java和c#那样反射,可通过traits技法实现 ...

2020-01-18 09:49:22 113

原创 c++ lamdba表达式

语法形式:[函数对象参数] [(表达式参数)] [mutable/exception声明] [->返回值类型] {函数体}/** * c++ lambda表达式 * * 语法形式:[函数对象参数] [(表达式参数)] [mutable/exception声明] [->返回值类型] {函数体} * * 1. 函数对象参数 * [] :无参数 * [=] :值传...

2020-01-16 11:39:09 70

原创 vscode+msvc调试c++程序

1. 打开vs工具命令提示我的在文件夹C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts中:选行x86或其他几个都行,双击运行2. 执行code打开vscode3. 配置settings.json{ "terminal.integrated.shell.windows": "C...

2020-01-13 19:41:36 636

原创 相机VCM调焦(AF)策略

为了采集到清晰的图像,必须通过调整镜头改变焦点位置,获得清晰图像。通过外置音圈马达调节镜头是一种可行的方式。调焦分3个过程:粗调阶段,VCM调整步长就大,用于快速定位到焦点附近精调阶段,VCM调整步长比粗调阶段小,近一步定位准确焦点微调阶段,VCM在焦点附近移动,采集清晰图像调节VCM时还有很多细节需要注意:距离较远时,VCM的小变化回引起焦点的较大变化;距离较远和较近时的步长...

2020-01-06 12:06:04 847

原创 数码相机成像原理

需要了解的知识: 1. 主要名词:焦点、焦距、景深、物距、成像面、成像点、光学中心、弥散圆、焦深、光圈 2. raw数据格式 3. RGB滤光层(柯达 赖斯-拜尔) 4. Sensor(cmos/ccd) 5. ISP 图像信号处理成像过程: 光->电->数字 光线->镜头->滤光层->感光片->raw数据(带马赛克)->正常图像各相机厂家的raw数据格式不一致,所以不能通用。 因为

2020-01-06 12:04:53 1680

原创 相机摄像头组成及参数

1. 摄像头由三部分组成镜头lens、图像传感器(sensor)、数字图像处理芯片(dsp)。摄像头工作的原理:光线通过镜头投射到图像传感器,图像传感器将光信号转为电信号,经过A/D转换后,转为数字信号输入到DSP,数字信号经dsp处理后,将图像数据输出。在安防应用中,还会加上一层红外滤光片;滤光片的位置可在镜头和sensor之间,或在镜头前。镜头前通常还会有一个玻璃盖板。下图是一...

2020-01-06 12:00:51 472

原创 常用数据结构与算法

布隆过滤器(判断值是否已存在,需要多个哈希函数(不精确))布谷过滤器(判断值是否已存在,精确判断,哈希的一种应用,二维哈希)跳表skiplist(多级有序数据结构)hyperloglog(计数器,根据概论统计(不精确))...

2019-12-31 16:02:28 34

原创 do{...}while(0)的应用

参考:《do{…}while(0)的妙用》1. 帮助定义宏在看redis源码时,发现很多宏都用了do{…}while(0),例如在zmalloc.c中用于统计内存使用量时的宏:#define update_zmalloc_stat_add(__n) do { \ pthread_mutex_lock(&used_memory_mutex); \ used_memor...

2019-12-03 12:24:59 69 1

原创 Redis源码分析(1)内存管理

Redis在zmalloc.h和zmalloc.c实现了底层的内存管理,代码很简洁。Redis的内存管理提供了以下几个函数:// 申请内存,封装mallocvoid *zmalloc(size_t size);// 申请内存并初始化为0,封装callocvoid *zcalloc(size_t size);// 调整内存大小,封装reallocvoid *zrealloc(void...

2019-11-26 20:10:27 61

原创 vscode+wsl调试c++程序

1. 在wsl中打开vscode进入wsl,找到程序目录,在目录下打开vscode> cd /mnt/d/vscode/> code .ok,打开了vscode,并且进入了wsl。在vscode的左下角可以看到:2. 在vscode中配置c++环境创建main.cpp文件:#include<stdio.h>int main(){ int ...

2019-11-26 15:32:29 945

原创 C结构体中的位域

之前没发现,竟然有这么个东西。一般存储数据都是以byte为单位,如果要表示0或1,最小也只能用char;但char占用了8个bit,有7个是浪费的。下面写代码,看看位域是什么东西:// sizeof : 4typedef struct bit_filed{ // 定义使用1个bit的位域 unsigned a : 1; int b : 1;};sizeof一下这...

2019-11-25 20:26:58 107

原创 数据结构与算法(五)检索(查找)基本算法

概念检索表:待查找的数据容器,例如线性表、树表(树、二叉树、B/B+树)等关键字:key关键字值:key对应的value检索/查找:Search1. 线性表的检索1.1 顺序检索可用于所有线性表,包括顺序表和链表。1.2 二分法检索只能用于顺序表(数组)。1.2.1 黄金分割点检索与二分法检索类似,但是分割检索区间的方式不同;二分法以二等分的方式分割检索区间,黄金分割点以...

2019-11-23 10:38:26 133

原创 汇编入门

1. 笔记1.1 常用寄存器8086有14个寄存器,物理地址 = 段地址*16+偏移地址,注意:一般不支持将输入直接送入段寄存器,例如 mov ds:1000H 是非法的入栈时,栈顶从高地址向低地址方向增长,出栈则相反;使用时应注意栈顶超界栈空时SP = 0 ,栈满时也是 SP = 0 ,超界时,栈顶将环绕寄存器名称说明示例AX通用寄存器16位寄存器,分...

2019-11-21 20:42:32 231

原创 cmake笔记

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件cmake可根据CMakeLists.txt文件生成vs工程和makefile文件(通过-G 设置输出生成的文件类型)注意:本文使用vscode,使用nmake在vc++2013环境下测试。参考:Cmake 详解1. 基本语法# 运行...

2019-11-21 20:41:57 64

Thrift 在Windows下的安装与实例 vs2010

Thrift,Windows,vs2010,c/c++

2017-08-21

CSS层叠样式

比较实用的CSS课件,个人感觉还比较简单易懂,喜欢的朋友可以下下来看一下。

2012-10-31

博客被封,怎么破

发表于 2017-08-29 最后回复 2017-08-30

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

TA关注的人 TA的粉丝

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