为opencv贡献代码
本文记录本人从发现bug,提交bug,到修复bug的过程。下面enjoy:
1.发现bug
由于项目需要,开发了一个视频检测demo,类似于扫一扫二维码的程序,不过不是这个程序不是扫二维码。具体实现参照了这篇文章
2016年10月20号,发现了第一个bug:在多次start,stop后,大约是6次,在iphone6平台上,程序就会闪退。检测了一下代码,发现不是自己造成的。再查看一下内存,发现opencv 的CvVideoCamera类在停止后不会销毁内存,导致内存泄漏(如图1)。于是向opencv维护组提交了第一个bug#7527

图1:内存泄漏
2.修复bug
2016年10月24号,周一早上,迫于压力(项目快要交付了,但是这个问题还没修复,等官方修复都不知道要等到猴年马月,于是决定自己动手解决),把oepncv 的官方源码拷贝到自己的工程下,然后xcode 就发现代码用了dealloc 方法和release方法,因为我的xcode环境用的ARC,所以MRC的手动内存管理方法不能使用,去掉后编译发现app没有问题了,于是开心的提交的解决方法。
但是很快就发现,代码虽然能在工程下完美运行,但是到了opencv的framework后不能工作了。一开始以为是自己编译的问题,所以搞了好久都没解决。
下班后,一直都在纠结这个问题的原因所在,晚上洗澡时,突然想起:xcdoe在ARC模式下不是没有内存管理代码,而是由xcode在编译时自动加上去的,所以把dealloc删除后编译的framework里面的代码就缺少内存管理代码了,这就能解释为什么代码在工程里面时工作正常,但是到了framework后就不正常了。
第二天,迫不及待的回来把代码改了,编译进framework,测试通过(如图2)。
图2:修复内存泄漏
3.合并
提交pull request#7568


图3:代码被合并到master分支
note:
1.在xcode下编译的framework里面不需要内存管理代码,因为xcode自动添加上去了,但是oepncv的framework是使用Python脚本编译的
2.opencv for ios 的framework是通过opencv/platforms/ios/目录下的buil_framework.py脚本编译的,具体命令参照该目录下的readme.txt
3.第二个bug其实就是多次stop后,第二次时release的对象已经被释放了,所以导致程序crash #7570
4.第二个bug的PR #7571
为opencv贡献代码的更多相关文章
- 如何为PHP贡献代码
PHP在之前把源代码迁移到了git下管理, 同时也在github(https://github.com/php/php-src)上做了镜像, 这样一来, 就方便了更多的开发者为PHP来贡献代码. 今天 ...
- 如何在github上fork一个项目来贡献代码以及同步原作者的修改
[-] 如何贡献自己的力量 如何让自己的项目与原作者的项目保持同步 作为一个IT人,通过github进行学习是最快的成长手 段.我们可以浏览别人的优秀代码.但只看不动手还是成长得很慢,因此为别人贡献代 ...
- 花20分钟写的-大白话讲解如何给github上项目贡献代码
原文地址:http://site.douban.com/196781/widget/notes/12161495/note/269163206/ 本文献给对git很迷茫的新手,注意是新手,但至少会点基 ...
- 【转】如何在github上fork一个项目来贡献代码以及同步原作者的修改 -- 不错
原文网址:http://www.cnblogs.com/astwish/articles/3548844.html 作为一个IT人,通过github进行学习是最快的成长手段.我们可以浏览别人的优秀代码 ...
- 为微软samples-for-ai贡献代码是种怎么样的体验?
推送原文链接:传送门 关注SomedayWill,了解为微软项目贡献代码的始终. 还记得微软神器samples-for-ai吗?它可不仅仅可以用来安装框架,它其实是个开源的AI样例库,以Visual ...
- GitHub上fork一个项目贡献代码以及同步原作者的修改【转】
如何贡献自己的力量 首先你总得有自己的github帐号吧,注册一个,非常简单,只需用户名,邮箱,密码,邮箱只是用来找回密码的,不做验证.因此注册后立即能用!比如我现在新注册一个叫JsLouvre的示范 ...
- (转)大白话讲解如何给github上项目贡献代码
转自:https://site.douban.com/196781/widget/notes/12161495/note/269163206/ 2013-03-30 22:53:55 本文献给对g ...
- 如何为 smartraiden 贡献代码
如何为 smartRaiden 贡献代码 1.Fork 项目 登录 github 账号,并访问https://github.com/SmartMeshFoundation/SmartRaiden,然后 ...
- 大白话讲解如何给github上项目贡献代码
本文献给对git很迷茫的新手,注意是新手,但至少会点基本操作,有点基本概念的新手,我不会从怎么用github和git是什么开始讲的.如果作为新手你看书又看不进去,原理又太复杂,又没有直接了当告诉我们怎 ...
随机推荐
- At.js – 用于 Web 应用程序的自动完成库
At.js 是一个自动完成库,用来实现自动完成提示,表情等,就像你在 Github 或 Twitter 上看到的一样.它支持 HTML5 contentEditable 元素.你可以听任何字符,而不仅 ...
- Cytoscape.js – 用于数据分析和可视化的交互图形库
Cytoscape.js 是一个开源的 JavaScript 图形库,您可以使用 Cytoscape.js 进行数据分析和可视化.Cytoscape.js 可以轻松的继承到你的网站或者 Web 应用 ...
- JavaScript学习笔记-函数
函数的两种创建方式:函数定义表达式.函数声明语句 编译时,函数声明语句创建的函数会‘被提前’至外部函数的作用域顶部,在该作用域内可以被随意调用: 而函数表达式创建的函数,要调用它必须赋值给一个变量,编 ...
- jQuery中ajax的4种常用请求方式
jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...
- 渗透测试报告收集、生成工具MagicTree
0x00 软件介绍: MagicTree是Gremwell开发的一个Java程序,支持主动收集数据和生成报告的工具.他通过树形结构节点来管理数据,这种分层存储的方法对管理主机和网络数据特别有效. 其分 ...
- CalloutManager
在SharePoint中很多弹出的提示样式挺好看,不仅想整一个耍耍.如下图: 老办法,看一下html中的class名字得知为:Callout 谷歌之---官方文档:http://msdn.micros ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q4-Q5)
Question 4 You are designing a SharePoint 2010 application to store 50 GB of digital assets, includi ...
- Android自定义ScrollView分段加载大文本数据到TextView
以下内容为原创,转载时请注明链接地址:http://www.cnblogs.com/tiantianbyconan/p/3311658.html 这是我现在碰到的一个问题,如果需要在TextView中 ...
- 遍历NSArray, NSDictionary, NSSet的方法总结
1,for循环读取 NSArray: NSArray *array = /*…*/ ; i<array.count; i++) { id object = array[i]; // do sth ...
- iOS-公司开发者账号的申请和注册(博主原创+亲身经历+2016年申请+附带与邓白氏公司的往来邮件截图)
不吹不黑,此篇博客真乃我的良心之作啊,希望对大家有所帮助! 链接在简书:http://www.jianshu.com/p/9de6a8eb4d88