IStreamSample
COM公式ドキュメント
メモ このインターフェイスは非推奨です。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
メモ このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。現在のサンプルを作成したメディアストリームオブジェクトへのポインターを取得します。
| ppMediaStream | IMediaStream** | in | 現在のサンプルを作成したメディアストリームを指す IMediaStream インターフェイスへのポインターのアドレス。 |
戻り値
解説(Remarks)
成功した場合、このメソッドは ppMediaStream で指定されたメディアストリームの参照カウントをインクリメントします。
メモ このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。現在のサンプルの開始時刻と終了時刻を取得します。サンプルが更新中の場合、このメソッドは更新完了後の時刻を返します。
| pStartTime | LONGLONG* | out | サンプルの開始時刻を格納する STREAM_TIME 値へのポインター。 |
| pEndTime | LONGLONG* | out | サンプルの終了時刻を格納する STREAM_TIME 値へのポインター。 |
| pCurrentTime | LONGLONG* | out | メディアストリームの現在のメディア時刻を格納する STREAM_TIME 値へのポインター。 |
戻り値
解説(Remarks)
クロックを持つストリームの場合、開始時刻と終了時刻はストリームの現在時刻を基準とした相対値になります。ストリームがクロックを持たない場合、これらの時刻はメディアを基準とした相対値となり、現在時刻は 0 になります。
pCurrentTime パラメーターを使用すると、メディアストリームの現在時刻を手軽に追跡できるため、IMultiMediaStream::GetTime を呼び出す必要がありません。ただし GetTime とは異なり、ストリームがクロックを持たない場合、このメソッドは S_OK を返します(GetTime は S_FALSE を返します)。pCurrentTime に代入される値は、次のコード断片が生成する値と同じです。
IMediaStream *pMediaStream = 0;
hr = pSample->GetMediaStream(&pMediaStream);
if (SUCCEEDED(hr))
{
IMultiMediaStream *pMultiMediaStream = 0;
hr = pMediaStream->GetMultiMediaStream(&pMultiMediaStream);
pMediaStream->Release();
if (SUCCEEDED(hr))
{
STREAM_TIME CurrentTime = 0;
hr = pMultiMediaStream->GetTime(&CurrentTime);
pMultiMediaStream->Release();
}
}
メモ このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。現在のサンプルの開始時刻と終了時刻を設定します。このメソッドはサンプルを更新する前に呼び出すことができます。
| pStartTime | LONGLONG* | in | サンプルの新しい開始時刻を格納する STREAM_TIME 値へのポインター。 |
| pEndTime | LONGLONG* | in | サンプルの新しい終了時刻を格納する STREAM_TIME 値へのポインター。 |
戻り値
解説(Remarks)
クロックを持つストリームの場合、これらの時刻はストリームの現在時刻を基準とした相対値でなければなりません。ストリームがクロックを持たない場合、これらの時刻はメディアを基準とした相対値にする必要があります。
このメソッドは書き込み可能なストリームにのみ適用されます。
メモ このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。現在のサンプルに対して同期更新または非同期更新を実行します。
| dwFlags | DWORD | in | 更新を同期で行うか非同期で行うかを指定するフラグ。SSUPDATE_ASYNC フラグは非同期更新を指定し、hEvent と pfnAPC の両方が NULL の場合に設定できます。IStreamSample::CompletionStatus メソッドを呼び出すまでサンプルを継続的に更新するには、SSUPDATE_CONTINUOUS を使用します。 |
| hEvent | HANDLE | in | 更新が完了したときにこのメソッドがシグナル状態にするイベントのハンドル。 |
| pfnAPC | PAPCFUNC | in | サンプルの更新を完了した後にこのメソッドが呼び出す Win32 非同期プロシージャ呼び出し (APC) 関数へのポインター。 |
| dwAPCData | UINT_PTR | in | このメソッドが pfnAPC パラメーターで指定された関数に渡す値。 |
戻り値
次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 更新が中止されました。 | |
| いずれかのパラメーターが無効です。 | |
| いずれかのパラメーターが無効です。 | |
|
このサンプルには既に保留中の更新があります。 |
|
ストリームの終端に達しました。サンプルは更新されませんでした。 |
|
非同期更新が保留中です。 |
| 成功しました。 | |
| アロケーターがコミットされていないため、サンプルを割り当てることができません。 |
解説(Remarks)
このメソッドは、サンプルの同期更新または非同期更新を実行するために使用できます。hEvent と pfnAPC の両方が NULL の場合、SSUPDATE_ASYNC または SSUPDATE_CONTINUOUS フラグのいずれかが指定されていない限り、更新は同期で行われます。同期更新が復帰すると、関数の結果には I/O 完了ステータスが格納されます。
hEvent と pfnAPC の両方に値を指定することはできません。指定した場合、このメソッドは失敗します。
非同期更新は、更新が復帰する前に完了する場合があります。その場合、戻り値は S_OK になります。イベントを指定していて更新が S_OK を返す場合、このメソッドは復帰時にそのイベントをシグナル状態にします。APC 関数を指定していて更新が S_OK を返す場合、APC はキューに登録されず、関数は呼び出されません。
復帰前に完了しない非同期更新は、MS_S_PENDING の値を返します。
アプリケーションが複数のストリームを作成する場合は、各ストリームに対して非同期更新を実行する必要があります。次の更新を行う前に、各ストリームの更新が完了するのを待つには WaitForMultipleObjects を呼び出します。そうしないと、アプリケーションがブロックされる可能性があります。
メモ このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。現在のサンプルの最新の非同期更新のステータスを取得します。更新が完了していない場合は、強制的に完了させることができます。
| dwFlags | DWORD | in | 更新を強制的に完了させるかどうかを指定する値。この値は、次のフラグの 1 つ以上を組み合わせたものです。
| ||||||||
| dwMilliseconds | DWORD | in | dwFlags パラメーターが COMPSTAT_WAIT の場合、この値は更新の完了を待つミリ秒数です。この呼び出しが復帰する前にサンプルが更新されるまで待機することを示すには、INFINITE を指定します。 |
戻り値
次のいずれかの値を返します。
| 戻り値 | 説明 |
|---|---|
| 更新が中止されました。 | |
|
ストリームの終端に達したため、サンプルは更新されませんでした。 |
|
更新が強制的に完了されました。サンプルはストリームによって更新されませんでした。 |
|
非同期更新が保留中です。 |
| 成功しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IStreamSample "{B502D1BE-9A57-11D0-8FDE-00C04FD9189D}" #usecom global IStreamSample IID_IStreamSample "{}" #comfunc global IStreamSample_GetMediaStream 3 sptr #comfunc global IStreamSample_GetSampleTimes 4 var,var,var #comfunc global IStreamSample_SetSampleTimes 5 var,var #comfunc global IStreamSample_Update 6 int,sptr,sptr,sptr #comfunc global IStreamSample_CompletionStatus 7 int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IStreamSample "{B502D1BE-9A57-11D0-8FDE-00C04FD9189D}" #usecom global IStreamSample IID_IStreamSample "{}" #comfunc global IStreamSample_GetMediaStream 3 sptr #comfunc global IStreamSample_GetSampleTimes 4 sptr,sptr,sptr #comfunc global IStreamSample_SetSampleTimes 5 sptr,sptr #comfunc global IStreamSample_Update 6 int,sptr,sptr,sptr #comfunc global IStreamSample_CompletionStatus 7 int,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。