Microsoft DirectX 8.0

DirectShow グラフ ファイル フォーマット

ここでは、GraphEdit によって作成されて保存された Microsoft® DirectShow® グラフ ファイル (.grf) のフォーマットについて説明する。

docfile (保存ファイル) は、ActiveMovieGraph という名前のストリームを格納している。この単独のストリームの中に、すべてのフィルタ、フィルタ名、ファイル名、接続などが含まれている。

グラフをロードするには :

または、

  1. (StgOpenStorage を使用して) 保存ファイルを開く。
  2. フィルタ グラフ マネージャに対して IPersistStream を照会する。
  3. (IStorage::OpenStream を使用して) L"ActiveMovieGraph" ストリームを開く。
  4. (IPersistStream::Load を使用して) ストリームをフィルタ グラフに渡す。

ストリーム内のグラフの構文を以下に示す。

<graph> ::= <version3><filters><connections><clock>END | <version2><filters><connections>END
<version3> ::= 0003\r\n
<version2> ::= 0002\r\n
<clock> ::= CLOCK <b> <required><b><clockid>\r\n
<required> ::= 1|0
<clockid> ::= <n>|<class id>
<filters ::= FILTERS <b>[<filter list><b>]
<connections> ::= CONNECTIONS [<b> <connection list>]
<filter list> ::= [<filter> <b>] <filter list>
<connection list> ::= [<connection><b>]<connection list>
<filter> ::= <n><b>"<name>"<b><class id><b>[<file>]<length><b1><filter data>
<file> ::= SOURCE "<name>"<b> | SINK "<name>"<b>
<class id> ::= 標準文字列フォーマットのフィルタのクラス ID。
<name> ::= " を含まない任意の文字シーケンス。
<length> ::= 符号なし 10 進数 (たとえば 23) を表す文字列。
これは、空白をはさんで後に続くデータのバイト数である。
<b> ::= 空白、\t、\r、または \n の任意の組み合わせ。
<b1> ::= 1 つの空白文字。
<n> ::= 整数 (たとえば 0001、0002、0003) の識別子。
<connection> ::= <n1><b>"<pin1 id>"<b><n2><b>"<pin2 id>" <media type>
<n1> ::= 1 番目のフィルタの識別子。
<n2> ::= 2 番目のフィルタの識別子。
<pin1 id> ::= <name>
<pin2 id> ::= <name>
<media type> ::= <major type><b><sub type><b><flags><length><b1><format>
<major type> ::= <class id>
<sub type> ::= <class id>
<flags> ::= <FixedSizeSamples><b><TemporalCompression><b>
<FixedSizeSamples> ::= 1|0
<TemporalCompression> ::= 1|0
<Format> ::= <SampleSize><b><FormatType><b><FormatLength><b1><FormatData>
<FormatType> ::= 標準文字列フォーマットのフォーマットのクラス ID。
<FormatLength> ::= 符号なし 10 進数 (たとえば 23) を表す文字列。
これは、空白をはさんで後に続くデータのバイト数である。
<FormatData> ::= バイナリ データ。

出力では、フィルタごと、接続ごと、およびキーワード FILTERS と CONNECTIONS ごとに復帰改行 (\r\n) が挿入される。それ以外の <B> は 1 つの空白である。キーワード FILTERS、CONNECTIONS、および END はローカライズ可能ではない。フィルタ データとフォーマット データはバイナリなので、不適切な改行や NULL 値などを含むことがある。

以下に、出力の例を示す (接続行は長いのでここでは分割している。コメントは、<コメント> のフォーマットで示してある)。

0002
<構文のバージョン 2>
FILTERS
0001 "Source" {00000000-0000-0000-0000-000000000001} SOURCE "MyFile.mpg" 0000000000
<ID   名前   フィルタの GUID (ロードに必要)   
         ソース ファイル名   プライベート データなし>
0002 "another filter" {00000000-0000-0000-0000-000000000002} 0000000008 XXXXXXXX
<ID   名前   GUID   (これはファイル ソースまたはシンクではない)   8 バイト プライベート データ>
CONNECTIONS
0001 "Output pin" 0002 "In"   <ここには改行なし>
<フィルタ ID ピン ID   フィルタ ID ピン ID  (出力ピンが先でその次に入力ピン)>
    0000000172 {00000000-0000-0000-0000-000000000003}   <ここには改行なし>
<サンプル サイズ、   メディア タイプ メジャー タイプ>
    {00000000-0000-0000-0000-000000000004} 1 0   <ここには改行なし>
<メディア タイプ サブタイプ、 固定サイズ サンプル、時系列圧縮なし>
    0000000093 {00000000-0000-0000-0000-000000000005} 18 YYYYYYYYYYYYYYYYYY
<フォーマットの長さ   フォーマット タイプ   18 バイトのバイナリ フォーマット データ>
END

ここで、

ファイル内の文字列および文字は常に Unicode™ で表される。