Win32 API 日本語リファレンス
ホームMedia.WindowsMediaFormat › IWMProfile3

IWMProfile3

COM
IID00ef96cc-a461-4546-8bcd-c9a28f0e06f5継承元IWMProfile2自前メソッド開始 vtbl22

公式ドキュメント

IWMProfile3 インターフェイスは、プロファイルに対する拡張機能を提供します。

メソッド 12

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 22 HRESULT GetStorageFormat(WMT_STORAGE_FORMAT* pnStorageFormat)

GetStorageFormat メソッドは実装されていません。

pnStorageFormatWMT_STORAGE_FORMAT*outストレージ形式。

戻り値

このメソッドは E_NOTIMPL を返します。

解説(Remarks)

ストレージ形式を取得するには、WM/ContainerFormat 属性を使用してください。

vtbl 23 HRESULT SetStorageFormat(WMT_STORAGE_FORMAT nStorageFormat)

SetStorageFormat メソッドは実装されていません。

nStorageFormatWMT_STORAGE_FORMATinストレージ形式。

戻り値

このメソッドは E_NOTIMPL を返します。

解説(Remarks)

ストレージ形式を取得するには、WM/ContainerFormat 属性を使用してください。

vtbl 24 HRESULT GetBandwidthSharingCount(DWORD* pcBS)

GetBandwidthSharingCount メソッドは、プロファイルに追加された帯域幅共有オブジェクトの総数を取得します。

pcBSDWORD*out帯域幅共有オブジェクトの総数を受け取るポインター。

戻り値

このメソッドは HRESULT を返します。使用可能な値には、次の表に示すものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pcBSNULL です。
vtbl 25 HRESULT GetBandwidthSharing(DWORD dwBSIndex, IWMBandwidthSharing** ppBS)

GetBandwidthSharing メソッドは、プロファイルから帯域幅共有オブジェクトを取得します。

dwBSIndexDWORDin取得する帯域幅共有オブジェクトのインデックス番号を格納する DWORD
ppBSIWMBandwidthSharing**out要求したオブジェクトの IWMBandwidthSharing インターフェイスのアドレスを受け取るポインター。

戻り値

このメソッドは HRESULT を返します。使用可能な値には、次の表に示すものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppBSNULL です。

または

dwBSIndex が無効なインデックス番号を参照しています。

E_OUTOFMEMORY
帯域幅共有オブジェクトのためのメモリを割り当てられませんでした。

解説(Remarks)

プロファイル内の帯域幅共有オブジェクトには、プロファイルに追加された順に連続したインデックス番号が割り当てられます。1 つのプロファイルに対して複数の帯域幅共有オブジェクトを作成する場合は、それぞれの内容を把握しておく必要があります。そうしないと、設定を確認するために各オブジェクトを個別に調べなければなりません。

vtbl 26 HRESULT RemoveBandwidthSharing(IWMBandwidthSharing* pBS)

RemoveBandwidthSharing メソッドは、プロファイルから帯域幅共有オブジェクトを削除します。

pBSIWMBandwidthSharing*in帯域幅共有オブジェクトへのポインター。

戻り値

このメソッドは HRESULT を返します。使用可能な値には、次の表に示すものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pBSNULL です。

または

pBS が指す帯域幅共有オブジェクトがプロファイルに含まれていません。

解説(Remarks)

このメソッドは、帯域幅共有オブジェクトをメモリから解放しません。Release メソッドを呼び出す必要があります。

vtbl 27 HRESULT AddBandwidthSharing(IWMBandwidthSharing* pBS)

AddBandwidthSharing メソッドは、既存の帯域幅共有オブジェクトをプロファイルに追加します。帯域幅共有オブジェクトは CreateNewBandwidthSharing の呼び出しによって作成されます。プロファイルに追加する前に、帯域幅共有オブジェクトを構成しておく必要があります。

pBSIWMBandwidthSharing*in帯域幅共有オブジェクトの IWMBandwidthSharing インターフェイスへのポインター。

戻り値

このメソッドは HRESULT を返します。使用可能な値には、次の表に示すものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pBSNULL です。

または

帯域幅共有オブジェクトの帯域幅共有タイプの値が無効です。

E_UNEXPECTED
帯域幅共有オブジェクトをプロファイル内部のコレクションに追加する際に、不明なエラーが発生しました。
E_OUTOFMEMORY
メソッドがメモリを割り当てられませんでした。
NS_E_NO_STREAM
帯域幅共有オブジェクトにストリームが 1 つも含まれていません。

解説(Remarks)

先に IWMBandwidthSharing のメソッドを使用して帯域幅共有オブジェクトを構成せずに AddBandwidthSharing を呼び出すと、エラーになります。

vtbl 28 HRESULT CreateNewBandwidthSharing(IWMBandwidthSharing** ppBS)

CreateNewBandwidthSharing メソッドは、新しい帯域幅共有オブジェクトを作成します。

ppBSIWMBandwidthSharing**out新しいオブジェクトの IWMBandwidthSharing インターフェイスのアドレスを受け取る変数へのポインター。

戻り値

このメソッドは HRESULT を返します。使用可能な値には、次の表に示すものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppBSNULL です。
E_OUTOFMEMORY
新しいオブジェクトのためのメモリを割り当てられませんでした。

解説(Remarks)

帯域幅共有オブジェクトを使用するには、AddBandwidthSharing を呼び出してプロファイルに追加する必要があります。帯域幅共有オブジェクトは単独で存在することはできません。帯域幅共有オブジェクトをプロファイルに追加せずにプロファイルオブジェクトを解放すると、帯域幅共有オブジェクトは失われます。

AddBandwidthSharing を使用して帯域幅共有オブジェクトをプロファイルに含める前に、帯域幅共有オブジェクトを構成しておく必要があります。帯域幅共有オブジェクトの構成の詳細については、IWMBandwidthSharing インターフェイスを参照してください。

vtbl 29 HRESULT GetStreamPrioritization(IWMStreamPrioritization** ppSP)

GetStreamPrioritization メソッドは、プロファイル内に存在するストリーム優先順位付けを取得します。

ppSPIWMStreamPrioritization**outプロファイル内のストリーム優先順位付けオブジェクトの IWMStreamPrioritization インターフェイスのアドレスを受け取るポインター。

戻り値

このメソッドは HRESULT を返します。使用可能な値には、次の表に示すものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppSPNULL です。
E_OUTOFMEMORY
ストリーム優先順位付けオブジェクトのためのメモリを割り当てられませんでした

解説(Remarks)

多くのプロファイルには、ストリーム優先順位付けが割り当てられていません。そのようなプロファイルに対して GetStreamPrioritization を呼び出しても、エラーは返されませんが、取得されるアドレスは NULL になります。

vtbl 30 HRESULT SetStreamPrioritization(IWMStreamPrioritization* pSP)

SetStreamPrioritization メソッドは、ストリーム優先順位付けオブジェクトをプロファイルに割り当てます。プロファイルには、一度に 1 つのストリーム優先順位付けオブジェクトのみを含めることができます。

pSPIWMStreamPrioritization*inプロファイルに割り当てるストリーム優先順位付けオブジェクトの IWMStreamPrioritization インターフェイスへのポインター。

戻り値

このメソッドは HRESULT を返します。使用可能な値には、次の表に示すものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_INVALID_ARG
pSPNULL です。

または

メソッドがストリーム優先順位付けオブジェクトを検証できませんでした。

E_OUTOFMEMORY
メソッドがプロファイル内にオブジェクト用のメモリを割り当てられませんでした。

解説(Remarks)

プロファイルにすでにストリーム優先順位付けオブジェクトが存在する場合、それは失われます。

vtbl 31 HRESULT RemoveStreamPrioritization()

RemoveStreamPrioritization メソッドは、プロファイルからストリーム優先順位付けオブジェクトを削除します。

戻り値

このメソッドは HRESULT を返します。使用可能な値には、次の表に示すものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
ASF_E_NOTFOUND
プロファイルにストリーム優先順位付けオブジェクトが存在しません。
vtbl 32 HRESULT CreateNewStreamPrioritization(IWMStreamPrioritization** ppSP)

CreateNewStreamPrioritization メソッドは、新しいストリーム優先順位付けオブジェクトを作成します。

ppSPIWMStreamPrioritization**out新しいオブジェクトの IWMStreamPrioritization インターフェイスのアドレスを受け取るポインター。

戻り値

このメソッドは HRESULT を返します。使用可能な値には、次の表に示すものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
ppSP として NULL が渡されました。
E_OUTOFMEMORY
新しいオブジェクトのためのメモリを割り当てられませんでした。

解説(Remarks)

プロファイルには 1 つのストリーム優先順位付けしか含めることができません。新しいストリーム優先順位付けをプロファイルに割り当てると、以前のものは失われます。

vtbl 33 HRESULT GetExpectedPacketCount(ULONGLONG msDuration, ULONGLONG* pcPackets)

GetExpectedPacketCount メソッドは、指定された期間に予想されるパケット数を計算します。返されるパケット数はあくまで推定値であり、この呼び出しが行われた時点のプロファイルの設定に基づきます。

msDurationULONGLONGin期間をミリ秒単位で指定します。
pcPacketsULONGLONG*outmsDuration ミリ秒間に予想されるパケット数を受け取るポインター。

戻り値

このメソッドは HRESULT を返します。使用可能な値には、次の表に示すものが含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
pcPacketsNULL です。
E_OUTOFMEMORY
メソッドが必要とする内部オブジェクトの 1 つを初期化できませんでした。
E_NOTIMPL
プロファイルオブジェクト内のプロファイルは、このメソッドと互換性がありません。

解説(Remarks)

msDuration に渡す値が正のミリ秒数でない場合、問題が発生します。メソッドは通常どおり S_OK を返しますが、返されるパケット数は正しくありません。

エンコードされたファイル内のインターリーブされたデータを考慮する方法がないため、このメソッドが正確な数を返すことは不可能です。返されるパケット数は、オーディオストリームが 1 つだけのファイルで最も正確になります。プロファイルが複雑になるほど、パケット数の正確さは低下します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IWMProfile3 "{00EF96CC-A461-4546-8BCD-C9A28F0E06F5}"
#usecom global IWMProfile3 IID_IWMProfile3 "{}"
#comfunc global IWMProfile3_GetStorageFormat               22 var
#comfunc global IWMProfile3_SetStorageFormat               23 int
#comfunc global IWMProfile3_GetBandwidthSharingCount       24 var
#comfunc global IWMProfile3_GetBandwidthSharing            25 int,sptr
#comfunc global IWMProfile3_RemoveBandwidthSharing         26 sptr
#comfunc global IWMProfile3_AddBandwidthSharing            27 sptr
#comfunc global IWMProfile3_CreateNewBandwidthSharing      28 sptr
#comfunc global IWMProfile3_GetStreamPrioritization        29 sptr
#comfunc global IWMProfile3_SetStreamPrioritization        30 sptr
#comfunc global IWMProfile3_RemoveStreamPrioritization     31
#comfunc global IWMProfile3_CreateNewStreamPrioritization  32 sptr
#comfunc global IWMProfile3_GetExpectedPacketCount         33 int64,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。