Microsoft DirectX 8.0 |
タイムラインからフィルタ グラフを構築することにより、Microsoft® DirectShow® 編集サービス (DES) プロジェクトをレンダリングする。
DES は、このインターフェイスを実装する 2 つのコンポーネントを提供している。
スマート レンダリング エンジンは、ISmartRenderEngine インターフェイスもサポートしている。
アプリケーションでフィルタ グラフを作成してレンダリング エンジンに渡すことはできるが、通常の状況では、レンダリング エンジンにフィルタ グラフを作成させる。グラフの作成は、2 段階の処理で行われる。まず、ConnectFrontEnd メソッドを呼び出してフロント エンドを構築する。次に、フロント エンドの出力ピンを目的のレンダリング フィルタに接続する。
詳細については、「プロジェクトのレンダリング」を参照すること。
要件
Qedit.h が必要である。
vtable 順のメソッド
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを取得する。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IRenderEngine メソッド 説明 SetTimelineObject 使用するレンダリング エンジン用のタイムラインを設定する。 GetTimelineObject レンダリング エンジンが現在使用しているタイムラインを取得する。 GetFilterGraph レンダリング エンジンが構築したフィルタ グラフ (ある場合) を取得する。 SetFilterGraph 使用するレンダリング エンジン用のフィルタ グラフを指定する。 SetInterestRange サポートされていない。 SetInterestRange2 サポートされていない。 SetRenderRange タイムライン上の、レンダリングされる時間の範囲を設定する。 SetRenderRange2 SetRenderRange と同じ機能だが、double 型のパラメータをとる。 GetGroupOutputPin 指定されたグループの出力ピンを取得する。 ScrapIt レンダリング エンジンのフィルタ グラフおよび関連付けられているすべてのオブジェクトを破棄する。 RenderOutputPins フィルタ グラフのプレビュー部分を作成する。 GetVendorString ベンダー文字列を取得する。 ConnectFrontEnd 現在のタイムラインからフィルタ グラフのフロント エンドを構築する。 SetSourceConnectCallback サポートされていない。 SetDynamicReconnectLevel レンダリング時の動的再接続のレベルを設定する。 DoSmartRecompression サポートされていない。 UseInSmartRecompressionGraph サポートされていない。 SetSourceNameValidation レンダリング エンジンがファイル名を検証する方法を指定する。 Commit 実装されていない。 Decommit 実装されていない。 GetCaps 実装されていない。
実装されていない。
構文
HRESULT Commit( void );
現在のタイムラインからフィルタ グラフのフロント エンドを構築する。
構文
HRESULT ConnectFrontEnd( void );
戻り値
HRESULT 値を返す。可能な戻り値は次のとおりである。
S_OK 成功。 S_WARN_OUTPUTRESET フラフのレンダリング部分は削除された。 E_INVALIDARG このレンダリング エンジンにはタイムラインは設定されていない。 E_MUST_INIT_RENDERER レンダリング エンジンが初期化に失敗した。 E_RENDER_ENGINE_IS_BROKEN プロジェクトが正しくレンダリングされなかったため、処理に失敗。 E_UNEXPECTED 予期しないエラー。 VFW_E_INVALIDMEDIATYPE 無効なメディア タイプ。
注意
このメソッドは、フィルタ グラフのレンダリング部分を構築しない。アプリケーションでは、フロント エンドの出力ピンを目的のレンダリング フィルタに接続しなければならない。
- プレビューを行うには、RenderOutputPins メソッドを呼び出す。
- ファイルに出力するには、GetGroupOutputPin を呼び出してグループごとの出力ピンを取得してから、そのピンをマルチプレクサ フィルタに接続する。
基本レンダリング エンジンを使っている場合、フロント エンド上の出力ピンは非圧縮データを生成する。スマート レンダリング エンジンを使っている場合、出力ピンは圧縮データを出力する。
フィルタ グラフを構築した後でタイムラインを変更した場合は、ConnectFrontEnd をもう一度呼び出してフロント エンドを再構築しなければならない。このメソッドは、可能であればグラフのレンダリング部分を維持する。しかし、グループを追加または削除した場合、またはグループの順序を変更した場合は、ConnectFrontEnd はレンダリング部分を削除するため、アプリケーションはレンダリング部分を再構築しなければならない。レンダリング部分を削除した場合、このメソッドは S_WARN_OUTPUTRESET を返す。
実装されていない。
構文
HRESULT Decommit( void );
サポートされていない。
構文
HRESULT DoSmartRecompression( void );
実装されていない。
構文
HRESULT GetCaps( long Index, long *pReturn );
レンダリング エンジンが構築したフィルタ グラフ (ある場合) を取得する。
構文
HRESULT GetFilterGraph( IGraphBuilder **ppFG );
パラメータ
- ppFG
- [out] フィルタ グラフの IGraphBuilder インターフェイスを受け取るポインタのアドレス。フィルタ グラフがない場合は、値 NULL を受け取る。
戻り値
次のいずれかの HRESULT 値を返す。
S_OK 成功。 E_MUST_INIT_RENDERER レンダリング エンジンが初期化に失敗した。 E_POINTER 無効なポインタ。
注意
復帰時に *ppFG の値が NULL 以外の場合、IGraphBuilder インターフェイスは未処理のカウントを持つ。使い終わった場合は、インターフェイスを必ず解放すること。
指定されたグループの出力ピンを取得する。
構文
HRESULT GetGroupOutputPin( long Group, IPin **ppRenderPin );
パラメータ
- Group
- グループを指定する、ゼロから始まるインデックス。
- ppRenderPin
- [out] 出力ピンの IPin インターフェイスを受け取るポインタのアドレス。
戻り値
HRESULT 値を返す。可能な値は次のとおりである。
S_FALSE グループは出力ピンを持っていない。 S_OK 成功。 E_INVALIDARG 無効な引数。 E_MUST_INIT_RENDERER レンダリング エンジンが初期化に失敗した。 E_POINTER 無効なポインタ。 E_RENDER_ENGINE_IS_BROKEN プロジェクトが正しくレンダリングされなかったため、処理に失敗。 E_UNEXPECTED 予期しないエラー。
注意
このメソッドを呼び出す前に、ConnectFrontEnd を呼び出してグラフのフロント エンドを構築する。各グループは単一のメディア ストリームを表し、フロント エンドには対応する出力ピンがある。
このメソッドを使用して、ファイル書き込みグラフのレンダリング部分を作成できる。出力ピンをマルチプレクサおよびファイル ライタ フィルタに接続する。詳細については、「プロジェクトのレンダリング」を参照すること。
プレビューの場合は、このメソッドを呼び出す必要はない。単純に、ConnectFrontEnd の後に RenderOutputPins を呼び出せばよい。
メソッドが S_OK を返した場合、返される IPin インターフェイスは未処理の参照カウントを持つ。使い終わった場合は、インターフェイスを必ず解放すること。
レンダリング エンジンが現在使用しているタイムラインを取得する。
構文
HRESULT GetTimelineObject( IAMTimeline **ppTimeline );
パラメータ
- ppTimeline
- [out] タイムラインの IAMTimeline インターフェイスを受け取るポインタのアドレス。タイムラインがない場合は、値 NULL を受け取る。
戻り値
次のいずれかの HRESULT 値を返す。
S_OK 成功。 E_POINTER 無効なポインタ。 E_MUST_INIT_RENDERER レンダリング エンジンが初期化に失敗した。
注意
復帰時に *ppTimeline の値が NULL 以外の場合、IAMTimeline インターフェイスは未処理のカウントを持つ。使い終わった場合は、インターフェイスを必ず解放すること。
ベンダー文字列を取得する。
構文
HRESULT GetVendorString( BSTR *pVendorID );
パラメータ
- pVendorID
- [out, retval] ベンダー文字列を持つ BSTR を受け取る変数へのポインタ。
戻り値
成功した場合、メソッドは S_OK を返す。それ以外の場合は、エラーの発生を示す HRESULT 値を返す。
注意
このメソッドは、文字列に必要なメモリを割り当てる。アプリケーションは SysFreeString を呼び出して、メモリを解放しなければならない。
フィルタ グラフのプレビュー部分を作成する。
構文
HRESULT RenderOutputPins( void );
戻り値
HRESULT 値を返す。可能な値は次のとおりである。
S_OK 成功。 VFW_S_AUDIO_NOT_RENDERED オーディオ ストリームを再生できない。 E_INVALIDARG 無効な引数。 E_RENDER_ENGINE_IS_BROKEN プロジェクトが正しくレンダリングされなかったため、処理に失敗。 E_UNEXPECTED 予期しないエラー。
注意
このメソッドを呼び出す前に、ConnectFrontEnd を呼び出してグラフのフロント エンドを構築する。プレビュー以外の処理を行う場合は、このメソッドを呼び出してはならない。代わりに、GetGroupOutputPin を呼び出して出力ピンへのポインタを取得する。
ユーザーのコンピュータにサウンド カードがない場合、このメソッドは VFW_S_AUDIO_NOT_RENDERED を返す。この場合にはオーディオのプレビューは行われないが、ビデオ プレビューには影響はない。
ピンがビデオ グループからのものである場合、このメソッドはメッセージをディスパッチしなければならない、たとえばウィンドウを動かすには、ウィンドウのクライアント エリアのマウス クリックに対応しなければならない。
レンダリング エンジンのフィルタ グラフおよび関連付けられているすべてのオブジェクトを破棄する。
構文
HRESULT ScrapIt( void );
戻り値
次のいずれかの HRESULT 値を返す。
S_OK 成功。 E_MUST_INIT_RENDERER レンダリング エンジンが初期化に失敗した。
レンダリング時の動的再接続のレベルを設定する。
構文
HRESULT SetDynamicReconnectLevel( DWORD Level );
パラメータ
- Level
- 動的再接続フラグの組み合わせ。動的再接続のレベルを指定する。
戻り値
次のいずれかの HRESULT 値を返す。
S_OK 成功。 E_NOTIMPL 実装されていない。
注意
デフォルトでは、基本レンダリング エンジンはプロジェクトをレンダリングする前にすべてのソースをロードする。このため、起動時間が長くなることがある。動的再接続を使用した場合、ソースは必要なときにのみロードされる。これによって起動時間は短くなるが、スムースな再生が妨げられることがある。一般的には、プロジェクトで使用するソース クリップが多くなるに従い、動的再接続を使用するメリットが大きくなる。
スマート レンダリング エンジンは、このメソッドを実装していない。
使用するレンダリング エンジン用のフィルタ グラフを指定する。
構文
HRESULT SetFilterGraph( IGraphBuilder *pFG );
パラメータ
- pFG
- フィルタ グラフの IGraphBuilder インターフェイスへのポインタ。
戻り値
次のいずれかの HRESULT 値を返す。
S_OK 成功。 E_INVALIDARG 無効な引数。 E_MUST_INIT_RENDERER レンダリング エンジンが初期化に失敗した。
注意
ほとんどのアプリケーションではこのメソッドを呼び出す必要はない。より一般的な方法は、ConnectFrontEnd メソッドを呼び出すことにより、レンダリング エンジンにグラフを構築させることである。
レンダリング エンジンに既にフィルタ グラフがある場合、このメソッドは失敗する。
レンダリング エンジンが作成したフィルタ グラフへのポインタを取得し、それをパラメータとして別のレンダリング エンジンでこのメソッドを呼び出してはならない。それを行うと、予期できない結果を引き起こすことになる。
サポートされていない。
構文
HRESULT SetInterestRange( REFERENCE_TIME Start, REFERENCE_TIME Stop );
サポートされていない。
構文
HRESULT SetInterestRange2( double Start, double Stop );
タイムライン上の、レンダリングされる時間の範囲を設定する。指定された範囲の外にあるオブジェクトはレンダリングされず、それらに対してリソースは割り当てられない。
構文
HRESULT SetRenderRange( REFERENCE_TIME Start, REFERENCE_TIME Stop );
パラメータ
- Start
- 開始タイム (100 ナノ秒単位)。
- Stop
- 終了タイム (100 ナノ秒単位)。
戻り値
次のいずれかの HRESULT 値を返す。
S_OK 成功。 E_MUST_INIT_RENDERER レンダリング エンジンが初期化に失敗した。
タイムライン上の、レンダリングされる時間の範囲を設定する。このメソッドは SetRenderRange と同じ機能だが、double 型のパラメータをとる。
構文
HRESULT SetRenderRange2( double Start, double Stop );
パラメータ
- Start
- 開始タイム (秒単位)。
- Stop
- 終了タイム (秒単位)。
戻り値
次のいずれかの HRESULT 値を返す。
S_OK 成功。 E_MUST_INIT_RENDERER レンダリング エンジンが初期化に失敗した。
サポートされていない。
構文
HRESULT SetSourceConnectCallback( IGrfCache *pCallback );
レンダリング エンジンがファイル名を検証する方法を指定する。
構文
HRESULT SetSourceNameValidation( BSTR FilterString, IMediaLocator *pOverride, LONG Flags );
パラメータ
- FilterString
- Microsoft® Win32® の OPENFILENAME 構造体の lpstrFilter メンバで必要な書式に設定されたフィルタ文字列のペアを含む BSTR 値。メディア ロケータは、エンド ユーザーに [開く] ダイアログ ボックスを表示する場合に、このフィルタを使用する。
- pOverride
- デフォルトの代わりに使用するメディア ロケータの IMediaLocator インターフェイスへのオプションのポインタ。デフォルトのメディア ロケータを使用する場合は、このパラメータを NULL に設定する。詳細については、「注意」を参照すること。
- Flags
- メディア ロケータの動作を指定するフラグのビットごとの組み合わせ。SFN_VALIDATEF_CHECK フラグは、必ず設定されていなければならない。SFN_VALIDATEF_IGNOREMUTED フラグは、このメソッドでは意味を持たない。
戻り値
次のいずれかの HRESULT 値を返す。
S_OK 成功。 E_MUST_INIT_RENDERER レンダリング エンジンが初期化に失敗した。
注意
pOverride パラメータを使用すると、IMediaLocator インターフェイスの独自のカスタム実装を使用できる。たとえば、デフォルトのメディア ロケータは、見つかった (または見つからなかった) ファイルについてアプリケーションに通知を行わない。このような制限を回避するために、カスタム メディア ロケータを実装して、デフォルト バージョンのラッパーとすることができる。そして、デフォルト バージョンに IMediaLocator::FindMediaFile 呼び出しを直接渡して、その戻り値を調べる。
現在、このメソッドは動的にロードされたソースを検証しない。詳細については、「SetDynamicReconnectLevel」を参照すること。
使用するレンダリング エンジン用のタイムラインを設定する。
構文
HRESULT SetTimelineObject( IAMTimeline *pTimeline );
パラメータ
- pTimeline
- タイムライン オブジェクトの IAMTimeline インターフェイスへのポインタ。
戻り値
次のいずれかの HRESULT 値を返す。
S_OK 成功。 E_MUST_INIT_RENDERER レンダリング エンジンが初期化に失敗した。 E_OUTOFMEMORY メモリ不足。 E_POINTER 無効なポインタ。
サポートされていない。
構文
HRESULT UseInSmartRecompressionGraph( void );