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)
        // ストリームは逆方向にシークできる。
}

参照