WMF SDK例程wmvcopy中的錯誤

2021-08-22 12:27:20 字數 1095 閱讀 4756

wmf sdk例程wmvcopy中的錯誤

wmvcopy是其乙個例程,實現了從頭部開始擷取n秒另存為檔案。

我曾對wmvcopy簡單修改,實現了從m秒到n秒的擷取。見:

windows media format sdk 切割wmv/wma檔案

但在使用中發現有些錯誤。

乙個是明顯的錯誤,不能處理大檔案,只能擷取214秒。見:

請問有大俠發現format sdk 例子 wmvcopy debug error麼?

wmvcopy 有個嚴重的debug error, 在**找了半天,沒有看到有誰提出來。 而且還有乙個很奇怪的問題,wmvcopy -i c:/input.wmv -o c:/output.wmv -d 214 沒有問題,能正常將input.wmv 剪下為214s output.wmv, 但是wmv -i c:/input.wmv -o c:/output.wmv -d 215 / 216 / 230 都不能正常剪下,output.wmv 就是input.wmv 的copy.

請哪位大俠解釋一下?

還有乙個是剛發現的,檔案儲存結束後,偶爾會崩潰。找個幾百k的大檔案,擷取頭部幾十秒試試。寫個批處理執行一百次,執行中啟動關閉一些其它程式,應該會有一兩個報錯誤出來。(省去一大堆的錯誤跟蹤過程。並且,vc的單步除錯可能不會出錯。)錯誤定位在ontime()的這一語句上:

hresult hr = m_preaderadvanced->delivertime( m_qwreadertime );

原來是複製結束後,m_preaderadvanced已釋放,而m_feof還未設定,所以出錯。

這樣可以讓你把錯誤看的更清楚點:

assert(m_preaderadvanced);

hresult hr = m_preaderadvanced->delivertime( m_qwreadertime );

粗略地檢視一下wmvcopy的邏輯,ontime()每次讓reader讀取1秒的資料,直到檔案結束。

實際情況是,指定了擷取的長度,一般都不會到達檔案尾部。

所以應該另設乙個標誌:m_fmaxduration,到達maxduration時就可以結束檔案的讀取,而不必一直讀到檔案尾。一可解決崩潰錯誤,二可提高效率。

Delphi 例程 字元操縱例程

字元操縱例程 1.chr函式 返回指定的ascii碼的字元 單元 system 原型function chr x byte char 描述chr返回位元組型別表示式x的順序值 ascii值 示例key chr vk back vk back 8 相應於 key 8 2.fillchar過程 用指定的...

halcon例程講解 halcon例程解讀2

例程解讀 二維物體識別 autobahn.hdev 關閉視窗自動更新 dev update window off 關閉影象視窗 dev close window 開啟指定大小的視窗 dev open window 0,0,768,575,black windowid 賦值。以後的網格線步長用到,後面...

Delphi 基礎(例程 例程返回值)

一 例程 delphi中獨有的稱呼,例程是將具體某個功能的 進行封裝表現形式 1 過程 2 函式 過程和函式的區別在於有沒有返回值 二 例程的作用 1 可以解決命名衝突問題 2 提高 的重複使用率 3 提高 可維護性 三 使用歷程 1 定義 1 procedure demo1 過程2 begin34...