Microsoft DirectX 8.0

IPropertySetter インターフェイス

Microsoft® DirectShow® 編集サービス (DES) のエフェクトまたはトランジションのプロパティを設定する。

このインターフェイスを使用するには、プロパティ セッター オブジェクト (CLSID_PropertySetter) のインスタンスを作成し、IAMTimelineObj::SetPropertySetter メソッドを呼び出すことにより、そのインスタンスにエフェクトまたはトランジションを関連付ける。詳細については、「エフェクトとトランジションの操作」を参照すること。

通常、アプリケーションでは ClearProps メソッドを呼び出して既存のプロパティをクリアし、AddProp メソッドを呼び出して新しいプロパティを追加するだけでよい。このインターフェイスの他のメソッドは、他の DES コンポーネントによって呼び出される。

要件

Qedit.h が必要である。

vtable 順のメソッド

IUnknown メソッド説明
QueryInterfaceサポートされているインターフェイスへのポインタを取得する。
AddRef参照カウントをインクリメントする。
Release参照カウントをデクリメントする。
IPropertySetter メソッド説明
LoadXML拡張可能マークアップ言語 (XML) で表現されたプロパティ データをロードする。
PrintXMLプロパティ データを XML 文字列に変換する。
ClonePropsこのプロパティ セッターからプロパティのセットの複製を作成し、新しいプロパティ セッターに追加する。
AddPropプロパティが適用される時間の範囲を定義するタイム値ペアの配列と共に、プロパティをプロパティ セッターに追加する。
GetPropsこのオブジェクトのプロパティ セットを、対応する値と共に取得する。
FreePropsGetProps メソッドによって割り当てられたリソースを解放する。
ClearPropsプロパティ セッターから、すべてのプロパティ データをクリアする。
SaveToBlobプロパティ データを永続性フォーマットに保存する。
LoadFromBlob永続性フォーマットからプロパティ データをロードする。
SetPropsターゲット オブジェクトのプロパティを、指定された時間の適切な状態に設定する。

IPropertySetter::AddProp

IPropertySetter インターフェイス

プロパティが適用される時間の範囲を定義するタイム値ペアの配列と共に、プロパティをプロパティ セッターに追加する。

構文

HRESULT AddProp(
    DEXTER_PARAM Param,
    DEXTER_VALUE *paValue
);

パラメータ

Param
[in] プロパティを指定する DEXTER_PARAM 構造体。この構造体の nValues メンバは、paValue パラメータで渡される配列のサイズと等しくなければならない。
paValue
[in] タイム値ペアを保持する DEXTER_VALUE 構造体の配列へのポインタ。この配列内の時間は、昇順で並んでいなければならない。この時間は、エフェクトまたはトランジションの開始タイム相対である。

戻り値

次のいずれかの HRESULT 値を返す。

S_OK成功。
E_INVALIDARG無効な引数。
E_OUTOFMEMORYメモリ不足。
E_POINTERNULL ポインタ引数。

注意

最初の DEXTER_VALUE 構造体は、ゼロの基準タイムおよび DEXTERF_JUMP の補間フラグ (dwInterp) を指定しなければならない。そうでない場合、メソッドはエラーを返す。

IPropertySetter::ClearProps

IPropertySetter インターフェイス

プロパティ セッターから、すべてのプロパティ データをクリアする。アプリケーションでは、この関数の呼び出し後に、新しいプロパティ データを設定できる。

構文

HRESULT ClearProps( void );

戻り値

S_OK を返す。

IPropertySetter::CloneProps

IPropertySetter インターフェイス

このプロパティ セッターからプロパティのセットの複製を作成し、新しいプロパティ セッターに追加する。

構文

HRESULT CloneProps(
    IPropertySetter **ppSetter,
    REFERENCE_TIME rtStart,
    REFERENCE_TIME rtStop
);

パラメータ

ppSetter
[out] 新しいプロパティ セッターの IPropertySetter インターフェイスを受け取るポインタのアドレス。
rtStart
複製する値の範囲の開始タイム (100 ナノ秒単位)。
rtStop
[in] 予約済み。

戻り値

成功した場合は、S_OK を返す。それ以外の場合は、エラーの発生を示す HRESULT 値を返す。可能なエラー コードは次のとおりである。

E_INVALIDARG無効な引数。
E_OUTOFMEMORYメモリ不足。
E_POINTERNULL ポインタ引数。

注意

指定された開始タイムより後の値だけが複製される。複製された値の時間は、開始タイム相対に調整される。たとえば、rtStart が 20000000 (2 秒) の場合、タイム 30000000 (3 秒) の値は、複製されるとタイム 10000000 (1 秒) となる。最後に、複製された各プロパティには、開始タイムの元のプロパティの値に等しい初期値が与えられる (必要であれば適切な補間が行われる)。実質的に、プロパティ データは指定された開始タイムで分割される。

メソッドが成功した場合、返される IPropertySetter インターフェイスは未処理の参照カウントを持つ。使い終わった場合は、インターフェイスを必ず解放すること。

IPropertySetter::FreeProps

IPropertySetter インターフェイス

GetProps メソッドによって割り当てられたリソースを解放する。GetProps を呼び出した後でこのメソッドを呼び出し、GetProps によって返された構造体を渡す。

構文

HRESULT FreeProps(
    LONG cParams,
    DEXTER_PARAM *paParam,
    DEXTER_VALUE *paValue
);

パラメータ

cParams
[in] paParam パラメータで与えられる配列のサイズを指定する値。
paParam
[in] DEXTER_PARAM 構造体の配列へのポインタ。
paValue
[in] DEXTER_VALUE 構造体の配列へのポインタ。

戻り値

S_OK を返す。

IPropertySetter::GetProps

IPropertySetter インターフェイス

このオブジェクトのプロパティ セットを、対応する値と共に取得する。

構文

HRESULT GetProps(
    LONG *pcParams,
    DEXTER_PARAM **paParam,
    DEXTER_VALUE **paValue
);

パラメータ

pcParams
[out] paParam に返される構造体の個数を受け取る変数へのポインタ。
paParam
[in] DEXTER_PARAM 構造体の配列へのポインタのアドレス。
paValue
[in] DEXTER_VALUE 構造体の配列へのポインタのアドレス。

戻り値

次のいずれかの HRESULT 値を返す。

S_OK成功。
E_OUTOFMEMORYメモリ不足。
E_POINTERNULL ポインタ引数。

注意

paParam に返される各プロパティごとに、nValues メンバはそのプロパティに関連付けられている DEXTER_VALUE 構造体の個数を示す。これらのペアは、各プロパティごとに時間の昇順で返される。

たとえば、次のサンプル コードは、すべての値を繰り返し処理する方法を示している。

DEXTER_PARAM *pParam;
DEXTER_VALUE *pValue;
LONG count;

hr = pSetter->GetProps(&count, &pParam, &pValue);

LONG num = 0;
for (LONG i = 0; i < count; i++)
{
    for (LONG j = 0; j < pParam[i].nValues; j++)
    {
        // pValue[num] は、pParam[i] のシーケンス内の次の値である。
    }
    num += pParam[i].nValues;
}

返された構造体の使用が終わったら、FreeProps を呼び出して、このメソッドによって割り当てられていたリソースを解放する。

IPropertySetter::LoadFromBlob

IPropertySetter インターフェイス

永続性フォーマットからプロパティ データをロードする。

構文

HRESULT LoadFromBlob(
    LONG cSize,
    BYTE *pb
);

パラメータ

cSize
[in] データのサイズ (バイト単位)。
pb
[in] データを保持するバイトの配列へのポインタ。

戻り値

成功した場合は、S_OK を返す。それ以外の場合は、E_OUTOFMEMORY または他のエラー コードを返す。

IPropertySetter::LoadXML

IPropertySetter インターフェイス

拡張可能マークアップ言語 (XML) で表現されたプロパティ データをロードする。

構文

HRESULT LoadXML(
    IUnknown *pxml
);

パラメータ

pxml
[in] Microsoft XML パーサによって作成された XML 要素の IUnknown インターフェイスへのポインタ。

戻り値

HRESULT 値を返す。 可能な値は次のとおりである。

S_FALSEプロパティ データなし。
S_OK成功。
E_OUTOFMEMORYメモリ不足。
VFW_E_INVALID_FILE_FORMAT無効なフォーマット。

注意

通常、アプリケーションはこのメソッドを使用しない。DES では、このメソッドを内部的に使って XTL ファイルからプロパティをロードする。

このメソッドを使用するには、IXMLDocument オブジェクトを作成し、このオブジェクトを使って XML ファイルを解析する。次に、IXMLDocument オブジェクトを使って IXMLElement オブジェクトを取得する。このオブジェクトにプロパティがある場合は、IXMLElement ポインタを LoadXML メソッドに渡すことができる。このメソッドは、プロパティ セッターにプロパティをロードする。

IPropertySetter::PrintXML

IPropertySetter インターフェイス

プロパティ データを拡張可能マークアップ言語 (XML) 文字列に変換する。

構文

HRESULT PrintXML(
    char *pszXML,
    int cbXML,
    int *pcbPrinted,
    int indent
);

パラメータ

pszXML
[out] XML 文字列を受け取るバッファへのポインタ。
cbXML
[in] pszXML が指すバッファのサイズ (バイト単位)。
pcbPrinted
[out] XML 文字列の長さを受け取る変数へのポインタ。NULL の場合がある。
indent
[in] 最も外側のタグのインデント レベル数。

戻り値

成功した場合は、S_OK を返す。それ以外の場合は、エラーの発生を示す HRESULT 値を返す。XML 文字列がバッファより長かった場合、このメソッドは E_OUTOFMEMORY を返す。

IPropertySetter::SaveToBlob

IPropertySetter インターフェイス

プロパティ データを永続性フォーマットに保存する。

構文

HRESULT SaveToBlob(
    LONG *pcSize,
    BYTE **ppb
);

パラメータ

pcSize
[out] データのサイズ (バイト単位) を受け取る変数へのポインタ。
ppb
[in] データを受け取るバイトの配列へのポインタのアドレス。

戻り値

HRESULT 値を返す。可能な値は次のとおりである。

S_OK成功。
E_OUTOFMEMORYメモリ不足。
E_POINTERNULL ポインタ引数。

注意

このメソッドは、バイト配列に必要なメモリを割り当てる。呼び出し元は CoTaskMemFree 関数を使って、メモリを解放しなければならない。

IPropertySetter::SetProps

IPropertySetter インターフェイス

ターゲット オブジェクトのプロパティを、指定された時間の適切な状態に設定する。

構文

HRESULT SetProps(
    IUnknown *pTarget,
    REFERENCE_TIME rtNow
);

パラメータ

pTarget
[in] プロパティを設定するターゲット オブジェクトへのポインタ。
rtNow
[in] プロパティを設定するタイム (100 ナノ秒単位)。スタティック プロパティ (時間の経過によって変化しないプロパティ) を設定する場合は -1。

戻り値

HRESULT 値を返す。

注意

このメソッドは、DES によって呼び出され、トランジションまたはエフェクトのプロパティを設定する。通常、アプリケーションではこのメソッドを呼び出さない。

pTarget で指定されるオブジェクトは、IDispatch インターフェイスを実装していなければならない。