如何用vc6編譯ffmpeg, 并單步調試。

如何用vc6編譯ffmpeg, 并單步調試。

目前官方ffmpeg的最新版本為0.9, 我們就以此為例:

1. 下載最新git版本的源代碼(http://ffmpeg.zeranoe.com/builds/, 本例下載的是2011-12-12版本)
2. 放到MSYS環境里配置,生成config.h文件。mingw gcc是能順利編譯通過整個項目的,并生成最新版的ffmpeg。
3. 建立vc6工程,把相關代碼都加入到工程中。由于在vc生成的obj都在一個目錄下,所以需要修改文件名,讓其不重名。
4. 安裝intel compiler 11編譯器,單獨提取其icl.exe及相關include目錄,替換掉vc6自帶的cl.exe, 在工程設置里加上/Qstd=c99,用于支持C99語法。
5. 安裝intel compiler 10編譯器,單獨提取lib目錄,因為此版本調試庫的結構能完美支持vc6的調試信息。
6. 在vc6的options里設置include/exe/lib查找目錄,指向intel編譯器。
7. 開始修改代碼,添加C99的相關linux頭文件, 用于支持vc6, (unistd.h, stdint.h, inttypes.h, getopt.h)
8. 添加C99和linux的相關實現代碼,ffmpeg需要用到: getopt_long, strtoll, gettimeofday, atoll, usleep等
9. 修改windows的相關兼容代碼,GetWindowLongPtr -> GetWindowLong, GWLP_USERDATA
10. 去除硬件加速libavcodec代碼,和依賴庫代碼。選擇所需要的模塊,修改相關的allcodec.c, alldevices.c, allfilters.c, allformats.c
11. 加上鏈接庫,sdl.lib, winmm.lib, dxguid.lib, wsock32.lib
12. 在os_support.c里,把<winsock2.h>移動到文件最前面。
13. 如果是ffmpeg, 已經能順利編譯了。如果是ffplay,還需要編譯靜態sdl, 并鏈接。
14. 等等,音頻運行不正確?有雪花聲?因為還需要替換所有文件里的<math.h>為<mathimf.h>, 默認的rint等數學函數和gcc不兼容。
15. ok, 大功告成,純C版本完美運行。
16. 由于ffmpeg0.9在c文件里,添加了一些intel compiler不支持的mmx語法,所以編譯mmx/sse加速版本時,一小部分.c文件需要依賴mingw gcc編譯成.o文件,再通過vc6的lib.exe工具轉換成lib,讓vc6鏈接上。當然還要加上yasm編譯的很多匯編obj.
17. 有興趣的,可以繼續以此方法編譯x264庫,官方最新代碼MMX版也可以順利通過。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449526.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449526.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449526.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

backtrader指標

添加分析指標 # 添加分析指標 # 返回年初至年末的年度收益率 cerebro.addanalyzer(bt.analyzers.AnnualReturn, _name_AnnualReturn) # 計算最大回撤相關指標 cerebro.addanalyzer(bt.analyzers.DrawDown, _name_DrawDown) # 計算年化收益&#xff1a;日度收益 cerebro.addana…

Javascript DOM對屬性的操作

獲得屬性值 itnode . 屬性名稱          //只能操作w3c規定內容 itnode . getAttribute(屬性名稱)    //規定的 和 自定義的都可以獲取 設置屬性值 itnode . 屬性名稱 值        //只能操作w3c規定的屬性 itnode . setAttribute(名稱&#xff0c;值) …

172開頭的IP不一定是局域網的地址

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 A類 10.0.0.0-10.255.255.255 網絡數&#xff1a;1B類 172.16.0.0-172.31.255.255 網絡數&#xff1a;16C類 192.168.0.0-192.168.255.…

微信屏蔽百度紅包活動頁面,誰在焦慮?

1月29日消息&#xff0c;百度與中央電視臺合作的百度紅包鏈接分享頁面被微信屏蔽&#xff0c;打開相關頁面顯示&#xff1a;網頁包含誘導分享、關注等誘導行為內容&#xff0c;被多人投訴&#xff0c;為維護綠色上網環境&#xff0c;已經停止訪問該網頁。 雷鋒網了解到&#x…

Visual C++利用Intel C++ 編譯器提升多核性能與多媒體指令支持獲取更高的程序效率與縮小程序體積

Intel c編譯器有下列優點&#xff0c;建議VC項目開發采用intel c編譯器取代VS自帶c編譯器&#xff1a; 與 Microsoft Visual C 相兼容&#xff0c;可以嵌入 Microsoft Visual Studio 開發環境。 支持最新的多核處理器&#xff0c;并提供安全功能&#xff0c;可以通過執行堆棧…

Backtrader交易基礎

查看賬戶情況&#xff1a; class TestStrategy(bt.Strategy):def next(self):print(當前可用資金, self.broker.getcash())print(當前總資產, self.broker.getvalue())print(當前持倉量, self.broker.getposition(self.data).size)print(當前持倉成本, self.broker.getpositio…

IP地址分類/IP地址10開頭和172開頭和192開頭的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 IP地址分類/IP地址10開頭和172開頭和192開頭的區別/判斷是否同一網段 簡單來說在公司或企業內部看到的就基本都是內網IP&#xff0c;AB…

Redis數據結構之簡單動態字符串SDS

Redis的底層數據結構非常多&#xff0c;其中包括SDS、ZipList、SkipList、LinkedList、HashTable、Intset等。如果你對Redis的理解還只停留在get、set的水平的話&#xff0c;是遠遠不足以應對面試提問的。本文簡單介紹了Redis底層最重要的數據結構 - 簡單動態字符串&#xff08…

Centos7 安裝OpenTSDB

Centos7 安裝OpenTSDB https://www.imzcy.cn/1697.html轉載于:https://www.cnblogs.com/RHadoop-Hive/p/10563385.html

職場潛規則冷思考:別讓老板“殺”了你

一位3年前共事過的同事走了&#xff0c;就在他以200多萬的房貸代價拿到大門鑰匙的時候&#xff0c;猝然倒在新房的樓梯上。另一個曾經在同一戰壕里沖鋒陷陣的同事被老板辭掉了&#xff0c;兢兢業業&#xff0c;起早貪黑&#xff0c;竟然沒有熬過35歲下崗這一關&#xff0c;這時…

Backtrader交易基礎2

成交價格確定&#xff1a; Order.Market 市價單&#xff0c;以當時市場價格成交的訂單&#xff0c;不需要自己設定價格。市價單能被快速達成交易&#xff0c;防止踏空&#xff0c;盡快止損/止盈&#xff1b; 按下一個 Bar &#xff08;即生成訂單的那個交易日的下一個交易日&…

windows 小技巧

2019獨角獸企業重金招聘Python工程師標準>>> 桌面圖標顯示不全、圖標呈現白色方塊 ie4uinit -show 關閉占用指定端口的進程 獲取進程: netstat -ano | findstr 端口號關閉進程&#xff1a;taskkill -f -pid 進程號文件被占用 打開任務管理器&#xff0c;切換到 性能…

進一步了解 apt-get 的幾個命令

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 用 apt-get 也很久了&#xff0c;沒多想它的實現&#xff0c;最近遇到 gstreamer 裝不上的問題&#xff0c;才多看看了它 apt-get 就是…

java學習筆記20(Arraylist復習,Collection接口方法,迭代器,增強型for循環)

集合&#xff1a;集合是Java提供的一種容器&#xff0c;可以用來存儲多個數據&#xff1b; 集合與數組的區別&#xff1a;集合的長度是可變的&#xff0c;數組的長度是固定的 集合中存儲的數據必須是引用類型數據&#xff1b; ArrayList回顧&#xff1a; public class Person {…

backtrader數據基礎

cerebro bt.Cerebro() cerebro.addstrategy(TestStrategy2) codes[600862.SH,300326.SZ,300394.SZ] #加載最近兩日交易數據 for code in codes:feed Addmoredata(dataname get_data(code,20200506),namecode)cerebro.adddata(feed) cerebro.run() 數據查看&#xff1a; cl…

談判學:三招了解對方底線

導讀&#xff1a;談判者都希望能了解對方的底線&#xff0c;最直接的一招就是將對手變成“朋友”&#xff0c;只是這種“內奸法”畢竟不是常規之法。大多數情況下&#xff0c;談判雙方也不可能像《無間道》一樣在對方陣營安放臥底&#xff0c;但是我們完全可以通過一些辦法來揣…

JSLint檢測Javascript語法規范

前端javascript代碼編寫中&#xff0c;有一個不錯的工具叫JSLint&#xff0c;可以檢查代碼規范化&#xff0c;壓縮JS&#xff0c;CSS等&#xff0c;但是他的語法規范檢查個人覺得太“苛刻”了&#xff0c;會提示各種各樣的問題修改建議&#xff0c;有時候提示的信息我們看的莫名…

Apt 命令解說(apt-get update、apt-cache search package、apt-get install package、apt-get remove )

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 高級打包工具&#xff08;英語&#xff1a;Advanced Packaging Tools&#xff0c;縮寫為APT&#xff09;是Debian及其派生發行版的軟件包…

SQL SERVER 2012 AlwaysOn - 維護篇 03

搭建 AlwaysOn 是件非常繁瑣的工作&#xff0c;需要從兩方面考慮&#xff0c;操作系統層面和數據庫層面&#xff0c;AlwaysOn 非常依賴于操作系統&#xff0c;域控&#xff0c;群集&#xff0c;節點等概念&#xff1b; DBA 不但要熟悉數據庫也要熟悉操作系統的一些概念&#xf…

指標研究與多周期

哪些地方會用到指標 &#xff1f; 回顧一下 Backtrader 的主要功能模塊和回測流程&#xff08;見&#xff1a;Backtrader 來了&#xff01;&#xff09;可以發現&#xff0c;只有在編寫策略Strategy 時才會涉及到指標的計算和使用&#xff0c;而且是 Strategy 中的 __init__()…