Win32 API 日本語リファレンス
ホームMedia.DirectShow › IAMPushSource

IAMPushSource

COM
IIDf185fe76-e64e-11d2-b76e-00c04fb6bd3d継承元IAMLatency自前メソッド開始 vtbl4

公式ドキュメント

IAMPushSource インターフェイスは、ライブソースをレンダリングするフィルターグラフを同期します。

解説(Remarks)

Filter Graph Manager は、このインターフェイスのメソッドを使用して、ライブソースのレンダリング時に一般的に発生する 2 つの問題に対処します。

レイテンシを補正するために、フィルターグラフは IAMPushSource インターフェイスを公開している各出力ピンに対して IAMLatency::GetLatency を呼び出し、グラフ内の最大レイテンシを判定します。次に、最大レイテンシより小さいレイテンシを持つフィルターに対して IAMPushSource::SetStreamOffset を呼び出し、それらのフィルターが生成するタイムスタンプを正しいオフセットで調整するようにします。

レートマッチングを実行するために、フィルターグラフは、レンダラーフィルターがソースフィルターとクロックレートを一致させられるかどうかを判定する必要があります。IAMPushSource::GetPushSourceFlags メソッドは、レンダラーがソースとレートを一致させても安全かどうかを示す一連のフラグを返します。

これらの問題は、ファイルへのキャプチャには影響しません。File Writer フィルターは、ファイルを正しく書き込むために、受信サンプルのタイムスタンプに依存します。ストリームは再生時に同期されます。レートマッチングについては、データは常に可能な限り高速にファイルへ書き込まれます。

メソッド 6

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 4 HRESULT GetPushSourceFlags(DWORD* pFlags)

GetPushSourceFlags メソッドは、フィルターの動作を記述するフラグの組み合わせを取得します。

pFlagsDWORD*outAM_PUSHSOURCE_FLAGS 列挙型のフラグの組み合わせを受け取る変数へのポインター。

戻り値

インターフェイスの実装に依存する HRESULT 値を返します。

解説(Remarks)

レンダラーフィルターがこのソースフィルターと安全にクロックレートを一致させられるかどうかを判定するには、このメソッドを呼び出します。

vtbl 5 HRESULT SetPushSourceFlags(DWORD Flags)

SetPushSourceFlags メソッドは、フィルターの動作を指定するフラグを設定します。現在のところ、要求フラグはサポートされておらず、またアプリケーションがフィルターによって設定されたフラグをオーバーライドすべきではないため、アプリケーションはこのメソッドを呼び出すべきではありません。

FlagsDWORDinAM_PUSHSOURCE_FLAGS 列挙型のフラグの組み合わせ。

戻り値

インターフェイスの実装に依存する HRESULT 値を返します。

vtbl 6 HRESULT SetStreamOffset(LONGLONG rtOffset)

SetStreamOffset メソッドは、このフィルターが生成するタイムスタンプのオフセットを設定します。

rtOffsetLONGLONGinフィルターの新しいストリームオフセット。

戻り値

指定されたオフセットがフィルターの最大優先オフセットより大きい場合は S_FALSE を返します。それ以外の場合は、成功時に S_OK を返すか、エラーの原因を示す HRESULT 値を返します。

解説(Remarks)

フィルターグラフは、異なるレイテンシ値を持つストリームを同期させるために、フィルターのストリームオフセットを調整する目的でこのメソッドを呼び出します。

戻り値が S_FALSE の場合、フィルターは要求されたオフセットに十分な大きさのバッファーをサポートしていない可能性があります。ダウンストリームに別のバッファーがない限り、データが失われる可能性があります。フィルターの最大優先オフセットを取得するには、IAMPushSource::GetMaxStreamOffset メソッドを呼び出します。

vtbl 7 HRESULT GetStreamOffset(LONGLONG* prtOffset)

GetStreamOffset メソッドは、フィルターがタイムスタンプを生成する際に使用するオフセットを取得します。

prtOffsetLONGLONG*out現在のストリームオフセットを示す参照時間を受け取る変数へのポインター。

戻り値

インターフェイスの実装に依存する HRESULT 値を返します。

vtbl 8 HRESULT GetMaxStreamOffset(LONGLONG* prtMaxOffset)

GetMaxStreamOffset メソッドは、フィルターがサポートできる最大ストリームオフセットを取得します。

prtMaxOffsetLONGLONG*outフィルターがサポートできる最大オフセットを示す参照時間を受け取る変数へのポインター。

戻り値

インターフェイスの実装に依存する HRESULT 値を返します。DirectShow の実装では E_POINTER または S_OK を返します。

解説(Remarks)

ストリームオフセットがサポートされる最大オフセットより大きい値に設定された場合、フィルターがオフセット全体分のデータを保持できる十分な大きさのバッファーを持つことは保証されません。ダウンストリームに別のバッファーがない限り、データが失われる可能性があります。

vtbl 9 HRESULT SetMaxStreamOffset(LONGLONG rtMaxOffset)

SetMaxStreamOffset メソッドは、フィルターグラフで許可されるストリームオフセットを指定します。

rtMaxOffsetLONGLONGin最大ストリームオフセットを指定する参照時間。

戻り値

インターフェイスの実装に依存する HRESULT 値を返します。

解説(Remarks)

フィルターを接続する前にこのメソッドを呼び出すと、フィルターは適切なサイズのバッファーを割り当てることができます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IAMPushSource "{F185FE76-E64E-11D2-B76E-00C04FB6BD3D}"
#usecom global IAMPushSource IID_IAMPushSource "{}"
#comfunc global IAMPushSource_GetPushSourceFlags  4 var
#comfunc global IAMPushSource_SetPushSourceFlags  5 int
#comfunc global IAMPushSource_SetStreamOffset     6 int64
#comfunc global IAMPushSource_GetStreamOffset     7 var
#comfunc global IAMPushSource_GetMaxStreamOffset  8 var
#comfunc global IAMPushSource_SetMaxStreamOffset  9 int64
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。