IMediaSeeking::CheckCapabilities
CheckCapabilities メソッドは、指定したシーク能力をストリームが持っているかどうかを照会する。
構文
HRESULT CheckCapabilities(
DWORD *pCapabilities
);
パラメータ
pCapabilities
[in, out] AM_SEEKING_SEEKING_CAPABILITIES 属性の 1 つまたは複数のビットごとの組み合わせへのポインタ。メソッドが返ったとき、その値はどの属性が利用可能であるかを示す。
戻り値
HRESULT 値を返す。可能な値は次のとおりである。
値 | 説明 |
S_FALSE | pCapabilities のすべての能力を持っているわけではない。 |
S_OK | pCapabilities のすべての能力が存在する。 |
E_FAIL | pCapabilities の能力がまったくない。 |
E_POINTER | NULL ポインタ引数。 |
注意
2 ~ 3 の能力だけが必要な場合、すべてのストリームのシーク能力をチェックする IMediaSeeking::GetCapabilities を呼び出すよりも、このメソッドを呼び出す方が効率的である。
テストする AM_SEEKING_SEEKING_CAPABILITIES 属性のビットごとの OR の組み合わせと等しい DWORD 値を宣言する。pCapabilities 引数にこの値へのポインタを渡す。メソッドが返ったとき、pCapabilities には元のビットのサブセットが入り、実際にどの能力があるかを示す。戻り値は、要求した能力がない、いくつかある、またはすべてあることを示している。
次のサンプル コードは、ストリームが順方向シーク、逆方向シーク、絶対シークをサポートしているかどうかを調べる方法を示している。
// 調べる能力のフラグを設定する。
DWORD dwCaps = AM_SEEKING_CanSeekAbsolute |
AM_SEEKING_CanSeekForwards |
AM_SEEKING_CanSeekBackwards;
HRESULT hr = pMediaSeeking->CheckCapabilities(&dwCaps);
if(FAILED(hr))
{
// ストリームはシークできない。
}
else if (hr == S_OK)
{
// ストリームは順方向、逆方向、絶対位置にシークできる。
}
else if (hr == S_FALSE) // ストリームは能力を持っている可能性がある。
{
if (dwCaps & AM_SEEKING_CanSeekAbsolute)
// ストリームは絶対位置にシークできる。
if (dwCaps & AM_SEEKING_CanSeekAbsolute)
// ストリームは順方向にシークできる。
if (dwCaps & AM_SEEKING_CanSeekBackwards)
// ストリームは逆方向にシークできる。
}
参照