September 23,2008

Create long filename Quicktime movie file under Windows

舊的(3.X)Quicktime SDK裡的CreateMovieFile受限於因為要吃 FSSpec 的關係,在 Windows 下最長的檔名只有 64 byte,在一些情形下很容易就爆檔

在QT6.5以及7.0後對於這種情形增加了一些API來替換原來的檔案操作API,在這篇文章裡有詳細的對照
Modernizing QuickTime Applications

所以我們必需將 CreateMovieFile 換成 CreateMovieStorage 來達成這個目的,但第一個問題是原來的 FSSpec 被替換成
Handle dataRef
OSType dataRefType
這兩個參數,但在7.0以後Apple提供了一些比較方便的function來獲得這兩個參數

EX: QTNewDataReferenceFromFullPathCFString 可以由 Windows 的路徑來獲取 data reference 物件

但問題又來了,裡頭的 CFStringRef 是屬於 Core Fundation 下面的基本 string 物件,我們得自己把它 new 出來

ASCII版,From CString
CFStringRef file_string = CFStringCreateWithCString(NULL, filename, ::kCFStringEncodingASCII);

Unicdoe string 用這個
CFStringCreateWithCharacters(NULL, (UniChar*) filename, lstrlenW(filename));

有這這個 file_string 就可以一路串回去了

  • PS.1 Core Fundation 的header檔沒宣告 calling conversion,但實際上是 cdcel,link不過時可以試試改 calling conversion。
  • PS.2 CreateMovieStorage 預設會建立一個同名的 .#ref 檔案,在呼叫時的flag上加上createMovieFileDontCreateResFile可以避免建立這個檔案


Posted by toki_kanno at 樂多Roodo! │10:19 │回應(0)引用(0)Quicktime
樂多分類:日記/一般 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/7230259