DirectShow操作摄像头和虚拟摄像头
DShow简介 DirectShow(简称 DShow) 是一个 Windows 平台上的流媒体框架,提供了高质量的多媒体流采集和回放功能。支持使用 WDM 驱动或早期的 VFW 驱动来进行多媒体流的采集。横跨WINXP,WIN7,WIN8,WIN10,适配性好,稳定性高。DirectShow位于应用层中。它使用一种叫Filter Graph的模型来管理整个数据流的处理过程;参与数据处理的各个功能模块叫Filter;各个Filter 在Filter Graph中按一定的顺序连接成一条”流水线”协同工作。( 可以看出TFilterGraph是个Filter的容器 )按照功能来分,Filter大致分为三类:Source Filters、Transform Filters和Rendering Filters。
Source Filters主要负责取得数据,数据源可以是文件、因特网、或者计算机里的采集卡、数字摄像机等;
Transform Fitlers主要负责数据的格式转换、传输;
Rendering Filtes主要负责数据的最终去向,我们可以将数据送给声卡、显卡进行多媒体的演示,也 ...
如何让你的EXE/DLL足够小
为了节省大量用户下载占用的带宽,又不便使用 P2P 技术,需要做一个尽量小的独立 EXE,这里是对如何让一个简单的 EXE 体积尽量小的部分方法与每一步的实际效果。
初始 DEMO用 VC++ 生成一个最简单的 Win32 Console Application,调用少量简单的 CRT 函数,因为要独立 EXE,所以使用 /MT,示例代码部分如下,然后 Release 编译看看体积。
1234567891011#include "stdafx.h"#include <string.h>int _tmain(int argc, _TCHAR* argv[]){ const char* pStr = "hello, world"; char szArray[64] = {0}; strcpy(szArray, pStr); return 0;}
现在大小是 40960 字节。
打开最小体积优化开关Project - Property - C/C++ - Optimization ...
Python如何给列表中的每个元素加双引号
如何给Python列表中的每个元素加双引号?
Python判断一个字符串中是否存在多个子串中的一个
在使用python的开发过程中,常常需要判断,字符串中是否存在子串的问题,但判断一个字符串中是否存在多个字串中的一个时,如if (a or b) in c或者if x contains a|b|c|d…,似乎就需要借助for做循环判断,那么这种情况有没有更pythonic的方法呢?
判断一个字符串中是否存在某一个子串判断一个字符串中是否存在子串通常使用in关键词,如下:
123456789>>> a = "I Love Crystal!And I Hate Tom!">>> b = "Crystal">>> c = "Tom">>> d = "Jessie">>> print(b in a)True>>> print(d in a)False>>>
in关键词可以用来判断一个字符串中是否含有一个子串,如"Crystal"在"I Love Crystal! ...
如何减小EXE、DLL文件的大小
本文介绍如何减小EXE、DLL文件的大小
C语言可变参数编程
在使用变长参数的函数(这里假设是func)实现部分其实用到了stdarg.h里面的多个宏来访问那些不确定的参数...
编写简单的C运行库(三)
在编写简单的C运行库(二)中主要实现了对有关文件操作函数的实现,接下来主要实现有关字符串的函数,如itoa,strcmp,strcpy,strlen函数,这些函数并没有用到系统调用,所以也就不用向实现文件操作的函数那样使用内嵌汇编,这些函数的定义都放在string.h中。实现了字符串函数之后,就大概实现了一个小型的c运行库,虽然很简略,但对于理解c库函数运行原理、所用的关键技术有了比较深刻的认识。最后用这个小的c运行库来编译运行一个简单的测试程序,用以测试我们的库能否正常的工作。
字符串函数 字符串函数中主要是实现itoa函数有点难度,其它的都还比较的简单,所以这里主要讲下itoa函数的实现。
12345678910111213141516171819202122232425262728293031323334char *itoa(int n, char *str, int radix){ char digit[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char *ptr = str, *ba ...
编写简单的C运行库(二)
在前面编写简单的C运行库(一)中主要实现了调用main函数前的初始化、获取参数和环境变量、退出程序等工作。接下来我们真正实现c标准库中的一些函数(主要是文件操作、字符串操作函数)。不过我们对这些函数的实现力争简单,对于效率方面考虑的不是很多,因为目的主要还是学习神秘的库是怎么实现的。
文件操作 c中的标准I/O库都是带有缓存的,我们在这里为了实现的简单,将缓存省略了,直接包装了有关文件操作的系统调用。现在我们直接看文件打开的函数:
12345678910111213static int open(const char *pathname, int flags, int mode){ int ret; __asm__ volatile( "int $0x80" :"=a"(ret) :"0"(5),"b"(pathname),"c"(flags),"d"(mode) ); if ...
编写简单的C运行库(一)
看了《程序员自我修养》这本书后,对目标文件、可执行文件的结构有了比较清晰的了解,对目标文件链接成可执行文件的过程和程序运行库有了大致的认识。不过正如“纸上得来终觉浅,绝知此事需恭行”,很多东西看似容易,但实践的时候却往往不是这样,在实践中往往能发现很多的问题。《程序员自我修养》这本书我觉得是理论与实践很好的结合了,它在最后一章给出了一个c和c++运行库的简单版的实现,通过实现这个可以更为深刻地理解可执行文件的结构、程序的执行、运行库的实现。参考这边书,我在linux下实现的一个简单的c运行库,这个运行库主要实现了文件操作、字符串操作、动态内存分配三个方面。
程序的入口函数实现 当被问到程序的入口函数是什么的时候,很多人都会回答是main函数。其实这是不准确的,因为如果main是第一个开始执行的函数,那么对于在main函数外面定义的变量,特别是c++中的对象,由谁来初始化它们呢?还有就是我们用atexit函数注册的清理函数在main函数结束之后才被调用。种种都说明在main函数之外还有函数,它负责建立程序执行所需的环境,包括变量的初始化和堆的初始化,清理函数的调用,构造函数和析构函数调 ...
使用VC和DirectShow从摄像头中读取图像
使用VC和DirectShow从摄像头中读取图像