开放原始码的回收与再利用内容摘要:

相同  其函式或類別的介面長相就會和你所需的不同  介面中的元素會較我們所需的為多  因為拆解的關係,有許多編譯錯誤會來自於未含入介面中額外多出的元素  去除一些不必要的元素,並且重新整理這些介面的長相  得到第一個可以編譯的版本 做好心理建設,面對混亂  就算張開眼睛也仍然看不見  別人的程式碼習慣風格和你必然不同  不要浪費時間在重新整理上  請先做好心理建設,讓自己能夠面對自己覺得混亂的程式碼,視眼前之混亂如無物  有空閒時間,再套用 refactoring的技巧,逐步的改善回收程式的結構 跨出成功的第一步  成功的達成第一個里程碑後,便逐一的依照同樣的方式加入  後續的里程碑達成的速度會愈來愈快 Case Study: 視訊檔案的格式探測  需求:檢查給定的視訊檔案是否屬於特定的數種格式  限制: C/C++,在 Win32上執行,編譯後大小必須在100KB以內 在網路上搜尋可用的原始碼,並選擇最適合的  ffmpeg有許多人使用,而且程式語言是 C,在 Win32平台上編譯不致於有太多問題  ffmpeg的 libavformat有提供此類的功能 了解程式架構,拆解出自己所需的部份  由上而下了解程式架構  先找到一段應用 libavformat的範例 av_register_all()。 // Open video file if(av_open_input_file(amp。 pFormatCtx, (char *) fileName, NULL, 0, NULL) !=0 ) return false。 // Retrieve stream information if(av_find_stream_info(pFormatCtx)0) return false。 // Couldn39。 t find stream information // Dump information about file onto standard error dump_format(pFormatCtx, 0, (char *) fileName, false)。 展開追蹤原始碼  善用 grep工具( Win32上可用 Windows Grep)  逐一檢查 dump_format()前的各個函式 void av_register_all(void) { static int inited = 0。 if (inited != 0) return。 inited = 1。 avcodec_init()。 avcodec_register_all()。 mpegps_init()。 mpegts_init()。 ... /* 一堆 xxxx_init() */ 採 DFS展開 -深度優先搜尋  接下來往 mpegps_init()展開 ,利用 grep找出它在 int mpegps_init(void) { ifdef CO。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。