技术标签: filter SampleGrabber 内存泄露 callback buffer DirectShow BUFFER
这篇文章主要针对《DirectShow中利用SampleGrabber捕获摄像头每一帧图像,并转为BMP文件信息写入内存》所写,记录了开发过程中遇到的比较深刻的问题。文中代码均来自上文。欢迎大家交流斧正。
P1:如何合理放置SampleGrabber在Filter Graph中的位置?
S1:在放置SampleGrabber位置时应该很小心,因为SampleGrabber通常是作为一个TransformFilter存在的,而不是一个RendererFilter存在。当然,它也能作为一个RendererFilter存在,但是这样一来就不能实现通常所要求的预览功能了。写法如下:hr = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,m_pBF, NULL, pGrabBase);
hr = m_pCapture->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, m_pBF, pGrabBase, m_pVMR);
memset( m_pImgFileData, 0, nDataWidth*nImgHeight ) ;
memcpy( m_pImgFileData, lpImageData, nImgWidth*nImgHeight) ;
if (!cb.pBuffer)
{
cb.pBuffer = new BYTE[lBufferSize];
cb.lBufferSize = lBufferSize;
}
memset( m_pImgFileData, 0, nDataWidth*nImgHeight ) ;
memcpy( m_pImgFileData, lpImageData, cb.lBufferSize) ;
BYTE* pImageData = new BYTE[cb.lBufferSize];
CopyMemory(pImageData, cb.pBuffer, cb.lBufferSize);
if (mCB.FormatImage(pImageData, 24, cb.bih.biWidth, cb.bih.biHeight))
{
ScaleRgb24BmpData(TransformBuffer, 320, 240,( mCB.GetImgFileData()),cb.bih.biWidth, cb.bih.biHeight);
ZeroMemory(m_pData, BUFFER_SIZE);
CopyMemory(m_pData, TransformBuffer, BUFFER_SIZE);
}
//to free memory
cb.pBuffer = NULL;
delete pImageData;
if (!cb.pBuffer)
{
cb.pBuffer = new BYTE[lBufferSize];
cb.lBufferSize = lBufferSize;
}
这就是说,如果cb.pBuffer为空的话,就会重新new一次,就会重新分配一块IBufferSize大小的内存。与此同时,你别以为之前那个cb.pBuffer所分配的内存已经回收了,它只是被只设置为NULL了而已!接着,你就会使用new出来的内存,之前的cb.pBuffer内存就泄露了。事实上,BufferCB函数会自己处理内存释放的问题,你不用瞎操心,要不然就画蛇添足了。所以做法应该是删除cb.pBuffer = NULL;这句。
//END ICTwangbiao
岭回归用于处理下面两类问题:1.数据点少于变量个数2.变量间存在共线性岭回归的原理岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价,获得回归系数更为符合实际、更可靠的回归方法,对病态数据的耐受性远远强于最小二乘法。岭回归的原理较为复杂。根据高斯马尔科夫定力,多重相关性并不
本科时便接触过miRNA,那个时候还查过一些关于miRNA相关的内容,准备在一个学习小组中讲讲,可惜的是,当时的自己也没有搞懂。而最近一次的miRNA-seq数据分析,终于让自己对它有一些理解。miRNA的长度一般在20~24 nt 之间,通过调节下游靶基因来调控生物的发育,抗逆等。2002年的一篇Cell中指出[1],动物的miRNA和mRNA并没有非常严格的碱基配对,因...
今天想着给自己的微服务项目添加一个熔断的功能,正好项目内远程调用是用的feign,那就直接用hystrix好了,也比较方便。然后呢,我以为比较简单的东西,却一直不生效,资料查了个遍,硬是弄了我一上午+一下午的时间,所以记录一下,给大家避坑。
关键词:MediaWiki-1.34.2、Ubuntu 18.04、腾讯云、Wiki、VisualEditor、Parsoid包含:打开VisualEditor时,Parsoid 404的一个解决办法,详见文末。大家好,我是johnbriton。最近我在为学院的一个竞赛团队搭建一个团队wiki,用来储存并分享我们前期调研所收集到的各种信息。作为一种知识管理系统,wiki的内链做的相当方便,而且方便设置权限,便于多人协同工作,适合团队使用。由于本人的专业与计算机完全不相关,所以在搭建站点的时候踩了很多坑
转载地址:http://lindows.iteye.com/blog/1725279loadrunner 学习笔记--Web Serviceshttp://www.byywee.com/page/M0/S227/227297.html使用loadrunner测试Web Services的程序http://blog.sina.com.cn/s/blog_7833c845010
String与List互转,List转ListString与List互转List转ListString与List互转 String strs = "1,2"; String str[] = strs.split(","); List<String> list = Arrays.asList(str); String joinStr = Joiner.on(",").join(list); List转List
摘要 HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介 Java为数据结构中的映射定义了一个接口java.util.Map,
/*** * pull解析 **/ public void parseXMLWithPull(String xmlData) { try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser par
互联网有很多接口可以实现通过ip查询到具体的位置,如下:通过淘宝IP地址库获取IP位置1. 请求接口(GET):http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]2. 响应信息:(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商3. 返回数据格式:{"code":0,"data":{"ip":"210.75...
通过以下4个阶段的训练, 没有任何编程基础人就可以成为一名普通的程序员。 第一阶段:掌握一种编程语言 学习内容:学习任意一种主流的编程语言。例如C++语言。 学习目标:熟练掌握一种语言的语法和基本的编程技巧。 学习时间:3个月左右 注意事项:编程语言和编程工具是两回事情,编程语言是指C++、Basic、Object P...
蜗牛式的前进也是前进