IMSVidPlayback
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
IMSVidPlayback インターフェイスは、Video Control の再生デバイスを制御します。
解説(Remarks)
このインターフェイスのインターフェイス識別子 (IID) を宣言するには、__uuidof 演算子を使用します: __uuidof(IMSVidPlayback)。
メソッド 14
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
get_EnableResetOnStop メソッドは、グラフが再構築された場合に再生をどのように再開するかを示します。
| pVal | VARIANT_BOOL* | out | 次のいずれかの値を受け取る変数へのポインター。
|
戻り値
解説(Remarks)
詳細については、IMSVidPlayback::put_EnableResetOnStop を参照してください。
put_EnableResetOnStop メソッドは、グラフが再構築された場合に再生をどのように再開するかを示します。
| newVal | VARIANT_BOOL | in | 次のいずれかの値を指定します。
|
戻り値
このメソッドは HRESULT を返します。指定できる値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
状況によっては、再生中にフィルターグラフが破棄されて再構築されることがあります。たとえば、モニターの解像度が変更されたときや、スクリーンセーバーが開始されたときにこれが発生する場合があります。put_EnableResetOnStop プロパティは、Video Control が中断された位置から再生を再開するか、ソースの先頭から再開するかを指定します。
既定では、再生は中断された位置から再開されます。ただし、newVal が VARIANT_TRUE の場合、Video Control は時刻ゼロへ戻るシークコマンドを発行します。このパラメーターを VARIANT_TRUE に設定しても、シークコマンドが成功することは保証されない点に注意してください。ソースによっては、シークコマンドが失敗することがあります。
Run メソッドは、再生デバイスを実行します。
戻り値
解説(Remarks)
このメソッドを使用すると、ソースを直接制御できます。ただし、基盤となるソースフィルターが標準の DirectShow IMediaControl インターフェイスを使用して制御されている場合、このメソッドは E_NOTIMPL を返します。
Pause メソッドは、再生デバイスを一時停止します。
戻り値
解説(Remarks)
このメソッドを使用すると、ソースを直接制御できます。ただし、基盤となるソースフィルターが標準の DirectShow IMediaControl インターフェイスを使用して制御されている場合、このメソッドは E_NOTIMPL を返します。
Stop メソッドは、再生デバイスを停止します。
戻り値
解説(Remarks)
このメソッドを使用すると、ソースを直接制御できます。ただし、基盤となるソースフィルターが標準の DirectShow IMediaControl インターフェイスを使用して制御されている場合、このメソッドは E_NOTIMPL を返します。
get_CanStep メソッドは、入力ソースがフレーム単位でステップ実行できるかどうかを照会します。
| fBackwards | VARIANT_BOOL | in | 次のいずれかの値を使用します。
| ||||||
| pfCan | VARIANT_BOOL* | out | 次のいずれかの値を受け取る変数へのポインター。
|
戻り値
このメソッドは HRESULT を返します。指定できる値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| グラフが構築されていません。Video Control で Build または View メソッドを呼び出してください。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドを呼び出す前に、IMSVidCtl::Build または IMSVidCtl::View メソッドを呼び出してください。
例
VARIANT_BOOL fCan = VARIANT_FALSE;
hr = m_pPlayback->get_CanStep(VARIANT_FALSE, &fCan);
Step メソッドは、指定されたフレーム数だけビデオストリームをステップ実行します。
| lStep | INT | in | ステップするフレーム数を指定します。lStep が 1 の場合、Video Control は 1 フレーム前方にステップします。lStep が 1 より大きい数 N の場合、Video Control は N - 1 フレームをスキップし、N 番目のフレームを表示します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| 実装されていません。 | |
| グラフが構築されていません。Video Control で Build または View メソッドを呼び出してください。 | |
| メソッドは成功しました。 |
解説(Remarks)
lStep の負の値は後方へのステップとして定義されていますが、その機能は現在実装されておらず、メソッドは E_NOTIMPL を返します。
このメソッドを呼び出す前に、IMSVidCtl::Build または IMSVidCtl::View メソッドを呼び出してください。
put_Rate メソッドは、再生レートを設定します。
| plRate | DOUBLE | in | 再生レートを、オーサリング時のレートに対する比率として指定します。たとえば、0.5 は通常の速度の半分、1.0 は通常の速度、2.0 は通常の速度の 2 倍を意味します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| ソースフィルターは指定されたレートをサポートしていません。 | |
| グラフが構築されていません。Video Control で Build または View メソッドを呼び出してください。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドを呼び出す前に、IMSVidCtl::Build または IMSVidCtl::View メソッドを呼び出してください。
get_Rate メソッドは、再生レートを取得します。
| plRate | DOUBLE* | out | 再生レートを、オーサリング時のレートに対する比率として受け取る変数へのポインター。たとえば、0.5 は通常の速度の半分、1.0 は通常の速度、2.0 は通常の速度の 2 倍を意味します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| グラフが構築されていません。Video Control で Build または View メソッドを呼び出してください。 | |
| メソッドは成功しました。 |
put_CurrentPosition メソッドは、ソース内の指定された位置にシークします。
| lPosition | INT | in | 新しい位置を指定します。このパラメーターの単位は、現在の位置モードによって決まります。
位置モードを設定するには、IMSVidPlayback::put_PositionMode を呼び出します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| グラフが構築されていません。Video Control で Build または View メソッドを呼び出してください。 | |
| 無効な引数です。 | |
| メソッドは成功しました。 |
解説(Remarks)
新しい位置が現在の位置より前で、ソースが後方にシークできない場合、メソッドは E_INVALIDARG を返します。
このメソッドを呼び出す前に、IMSVidCtl::Build または IMSVidCtl::View メソッドを呼び出してください。
get_CurrentPosition メソッドは、ソースの現在の再生位置を返します。
| lPosition | INT* | out | 再生位置を受け取る変数へのポインター。戻り値の単位は、現在の位置モードによって決まります。
位置モードを設定するには、IMSVidPlayback::put_PositionMode を呼び出します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| NULL ポインター引数です。 | |
| グラフが構築されていません。Video Control で Build または View メソッドを呼び出してください。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドを呼び出す前に、IMSVidCtl::Build または IMSVidCtl::View メソッドを呼び出してください。
put_PositionMode メソッドは、このインターフェイスによって位置の値がどのように解釈されるかを指定します。
| lPositionMode | PositionModeList | in | 次のいずれかの値を指定します。
|
戻り値
このメソッドは HRESULT を返します。指定できる値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| グラフが構築されていません。Video Control で Build または View メソッドを呼び出してください。 | |
| 失敗しました。ソースがこのモードをサポートしていない可能性があります。 | |
| 無効な引数です。 | |
| メソッドは成功しました。 |
解説(Remarks)
位置モードは、次のメソッドでパラメーターがどのように解釈されるかを決定します。
このメソッドを呼び出す前に、IMSVidCtl::Build または IMSVidCtl::View メソッドを呼び出してください。例
hr = m_pPlayback->put_PositionMode(TenthsSecondsMode);
get_PositionMode メソッドは、このインターフェイスによって位置の値がどのように解釈されるかを示します。
| lPositionMode | PositionModeList* | out | 次のいずれかの値を受け取る変数へのポインター。
|
戻り値
このメソッドは HRESULT を返します。指定できる値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| 失敗しました。 | |
| NULL ポインター引数です。 | |
| グラフが構築されていません。Video Control で Build または View メソッドを呼び出してください。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドが返す値は、次のメソッドでパラメーターがどのように解釈されるかを決定します。
このメソッドを呼び出す前に、IMSVidCtl::Build または IMSVidCtl::View メソッドを呼び出してください。get_Length メソッドは、再生ソースの長さを取得します。
| lLength | INT* | out | 長さを受け取る変数へのポインター。戻り値の単位は、現在の位置モードによって決まります。
位置モードを設定するには、IMSVidPlayback::put_PositionMode を呼び出します。 |
戻り値
このメソッドは HRESULT を返します。指定できる値には次のものがあります。
| リターンコード | 説明 |
|---|---|
| ソースは長さの取得をサポートしていません。 | |
| NULL ポインター引数です。 | |
| グラフが構築されていません。Video Control で Build または View メソッドを呼び出してください。 | |
| メソッドは成功しました。 |
解説(Remarks)
このメソッドを呼び出す前に、IMSVidCtl::Build または IMSVidCtl::View メソッドを呼び出してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMSVidPlayback "{37B03538-A4C8-11D2-B634-00C04F79498E}" #usecom global IMSVidPlayback IID_IMSVidPlayback "{}" #comfunc global IMSVidPlayback_get_EnableResetOnStop 18 var #comfunc global IMSVidPlayback_put_EnableResetOnStop 19 int #comfunc global IMSVidPlayback_Run 20 #comfunc global IMSVidPlayback_Pause 21 #comfunc global IMSVidPlayback_Stop 22 #comfunc global IMSVidPlayback_get_CanStep 23 int,var #comfunc global IMSVidPlayback_Step 24 int #comfunc global IMSVidPlayback_put_Rate 25 double #comfunc global IMSVidPlayback_get_Rate 26 var #comfunc global IMSVidPlayback_put_CurrentPosition 27 int #comfunc global IMSVidPlayback_get_CurrentPosition 28 var #comfunc global IMSVidPlayback_put_PositionMode 29 int #comfunc global IMSVidPlayback_get_PositionMode 30 var #comfunc global IMSVidPlayback_get_Length 31 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_IMSVidPlayback "{37B03538-A4C8-11D2-B634-00C04F79498E}" #usecom global IMSVidPlayback IID_IMSVidPlayback "{}" #comfunc global IMSVidPlayback_get_EnableResetOnStop 18 sptr #comfunc global IMSVidPlayback_put_EnableResetOnStop 19 int #comfunc global IMSVidPlayback_Run 20 #comfunc global IMSVidPlayback_Pause 21 #comfunc global IMSVidPlayback_Stop 22 #comfunc global IMSVidPlayback_get_CanStep 23 int,sptr #comfunc global IMSVidPlayback_Step 24 int #comfunc global IMSVidPlayback_put_Rate 25 double #comfunc global IMSVidPlayback_get_Rate 26 sptr #comfunc global IMSVidPlayback_put_CurrentPosition 27 int #comfunc global IMSVidPlayback_get_CurrentPosition 28 sptr #comfunc global IMSVidPlayback_put_PositionMode 29 int #comfunc global IMSVidPlayback_get_PositionMode 30 sptr #comfunc global IMSVidPlayback_get_Length 31 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。