IMFASFContentInfo
COM公式ドキュメント
Advanced Systems Format (ASF) 仕様に準拠したファイルのヘッダーセクションを操作するためのメソッドを提供します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Advanced Systems Format (ASF) ファイルのヘッダーセクションのサイズを取得します。
| pIStartOfContent | IMFMediaBuffer* | in | ASF コンテンツの先頭部分を含むバッファーオブジェクトの IMFMediaBuffer インターフェイス。バッファー内の有効なデータのサイズは、少なくとも MFASF_MIN_HEADER_BYTES バイト以上でなければなりません。 |
| cbHeaderSize | ULONGLONG* | out | コンテンツのヘッダーセクションのサイズ (バイト単位) を受け取ります。この値には、ASF Header Object のサイズに Data Object のヘッダーセクションのサイズを加えた値が含まれます。したがって、得られる値は ASF Data Object 内のデータパケットの開始位置までのオフセットになります。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、以下の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| バッファーに有効な ASF データが含まれていません。 | |
| バッファーに十分な有効データが含まれていません。 |
解説(Remarks)
ASF ファイルまたはストリームのヘッダーを IMFASFContentInfo::ParseHeader メソッドに渡すことで、ヘッダー情報を ContentInfo オブジェクトに設定できます。
ASF ヘッダー内の情報を解析し、その情報を使用して ContentInfo オブジェクトの値を設定します。ヘッダー全体を単一のバッファーで渡すことも、複数に分割して送信することもできます。
| pIHeaderBuffer | IMFMediaBuffer* | in | ヘッダーの一部または全体を含むバッファーオブジェクトの IMFMediaBuffer インターフェイスへのポインター。バッファーには、Header Object のサイズである少なくとも 30 バイトを含める必要があります。これは Header Object に含まれるオブジェクトを含まないサイズです (つまり、Header Object の Reserved2 フィールドまでとそれを含むすべて)。 |
| cbOffsetWithinHeader | ULONGLONG | in | ヘッダーの先頭を基準とした、バッファー内の最初のバイトのオフセット (バイト単位)。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、以下の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| ヘッダーは完全に解析され、検証されました。 | |
| 入力バッファーに有効な ASF データが含まれていません。 | |
| 入力バッファーが小さすぎます。 | |
| メソッドは成功しましたが、渡されたヘッダーは不完全でした。これは、ヘッダーを分割して渡す場合に、最後の呼び出し以外のすべての呼び出しで返される成功コードです。 |
解説(Remarks)
ヘッダーを分割して渡す場合、ContentInfo オブジェクトはヘッダー全体が解析されるまでバッファーオブジェクトへの参照を保持します。したがって、このメソッドに渡したバッファーを上書きしないでください。
Header オブジェクトの先頭は、メモリ上で次のレイアウトを持ちます。
| Field Name | Size in bytes |
|---|---|
| Object ID | 16 |
| Object Size | 8 |
| Number of Header Objects | 4 |
| Reserved1 | 1 |
| Reserved2 | 1 |
ParseHeader の最初の呼び出しは Reserved2 までとそれを含むすべてを読み取るため、最低 30 バイトを必要とします。(なお、IMFASFContentInfo::GetHeaderSize メソッドは Object ID フィールドと Object Size フィールドのみを読み取るため、このメソッドは最低 24 バイトを必要とします。)
MFASFContentInfo オブジェクト内のデータをバイナリの Advanced Systems Format (ASF) ヘッダーにエンコードします。
| pIHeader | IMFMediaBuffer* | in | エンコードされたヘッダーを受け取るバッファーオブジェクトの IMFMediaBuffer インターフェイスへのポインター。ヘッダーのサイズを取得するには NULL を設定します。 |
| pcbHeader | DWORD* | out | エンコードされた ASF ヘッダーのサイズ (バイト単位)。pIHeader が NULL の場合、この値にはエンコードされたヘッダーを格納するために必要なバッファーサイズが設定されます。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、以下の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 | |
| ContentInfo オブジェクトが参照を保持しているメディアに対する ASF Header Object が存在しません。 | |
| ASF Header Object のサイズが 10 MB を超えています。 | |
| pIHeader に渡されたバッファーが、ASF Header Object 情報を格納するのに十分な大きさではありません。 |
解説(Remarks)
pcbHeader パラメーターで受け取るサイズには、パディングのサイズが含まれます。コンテンツ情報は、ASF Header Object のサイズに応じてパディングデータを縮小または拡大します。
この呼び出しの間に、プロファイルのエンコードプロパティに基づいてストリームプロパティが設定されます。これらのプロパティは IMFMetadata インターフェイスを通じて利用できます。
ASF コンテンツを記述する Advanced Systems Format (ASF) プロファイルを取得します。
| ppIProfile | IMFASFProfile** | out | IMFASFProfile インターフェイスポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。オブジェクトが ASF プロファイルを持たない場合、このパラメーターは値 NULL を受け取ります。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、以下の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
プロファイルは、IMFASFContentInfo::SetProfile または IMFASFContentInfo::ParseHeader のいずれかを呼び出すことで設定されます。
このメソッドが返す ASF プロファイルオブジェクトには、MF_PD_ASF_xxx 属性 (Presentation Descriptor Attributes を参照) は含まれません。これらの属性を取得するには、次の手順を実行します。
- IMFASFContentInfo::GeneratePresentationDescriptor を呼び出して ASF プレゼンテーション記述子を取得します。プレゼンテーション記述子に対して MF_PD_ASF_xxx 属性を照会できます。
- (省略可能。) MFCreateASFProfileFromPresentationDescriptor を呼び出して、プレゼンテーション記述子を ASF プロファイルに変換します。この関数によって作成されるプロファイルオブジェクトには MF_PD_ASF_xxx 属性が含まれます。
プロファイルオブジェクトのプロファイルデータを使用して、ContentInfo オブジェクトの設定を構成します。
| pIProfile | IMFASFProfile* | in | プロファイルオブジェクトの IMFASFProfile インターフェイス。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、以下の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 |
解説(Remarks)
このメソッドを呼び出したときに ContentInfo オブジェクトにすでに情報が存在する場合、その情報はプロファイルオブジェクトからの情報で置き換えられます。
ASF コンテンツのプレゼンテーション記述子を作成します。
| ppIPresentationDescriptor | IMFPresentationDescriptor** | out | IMFPresentationDescriptor インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、以下の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 |
エンコードプロパティの設定に使用できるプロパティストアを取得します。
| wStreamNumber | WORD | in | 構成するストリーム番号。ファイルレベルのエンコードプロパティを構成するにはゼロを設定します。 |
| ppIStore | IPropertyStore** | out | IPropertyStore インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。 |
戻り値
このメソッドは HRESULT を返します。可能な値には、以下の表に示すものが含まれますが、これらに限定されません。
| Return code | Description |
|---|---|
| メソッドは成功しました。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFASFContentInfo "{B1DCA5CD-D5DA-4451-8E9E-DB5C59914EAD}" #usecom global IMFASFContentInfo IID_IMFASFContentInfo "{}" #comfunc global IMFASFContentInfo_GetHeaderSize 3 sptr,var #comfunc global IMFASFContentInfo_ParseHeader 4 sptr,int64 #comfunc global IMFASFContentInfo_GenerateHeader 5 sptr,var #comfunc global IMFASFContentInfo_GetProfile 6 sptr #comfunc global IMFASFContentInfo_SetProfile 7 sptr #comfunc global IMFASFContentInfo_GeneratePresentationDescriptor 8 sptr #comfunc global IMFASFContentInfo_GetEncodingConfigurationPropertyStore 9 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IMFASFContentInfo "{B1DCA5CD-D5DA-4451-8E9E-DB5C59914EAD}" #usecom global IMFASFContentInfo IID_IMFASFContentInfo "{}" #comfunc global IMFASFContentInfo_GetHeaderSize 3 sptr,sptr #comfunc global IMFASFContentInfo_ParseHeader 4 sptr,int64 #comfunc global IMFASFContentInfo_GenerateHeader 5 sptr,sptr #comfunc global IMFASFContentInfo_GetProfile 6 sptr #comfunc global IMFASFContentInfo_SetProfile 7 sptr #comfunc global IMFASFContentInfo_GeneratePresentationDescriptor 8 sptr #comfunc global IMFASFContentInfo_GetEncodingConfigurationPropertyStore 9 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。