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

IMFASFContentInfo

COM
IIDb1dca5cd-d5da-4451-8e9e-db5c59914ead継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Advanced Systems Format (ASF) 仕様に準拠したファイルのヘッダーセクションを操作するためのメソッドを提供します。

メソッド 7

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

vtbl 3 HRESULT GetHeaderSize(IMFMediaBuffer* pIStartOfContent, ULONGLONG* cbHeaderSize)

Advanced Systems Format (ASF) ファイルのヘッダーセクションのサイズを取得します。

pIStartOfContentIMFMediaBuffer*inASF コンテンツの先頭部分を含むバッファーオブジェクトの IMFMediaBuffer インターフェイス。バッファー内の有効なデータのサイズは、少なくとも MFASF_MIN_HEADER_BYTES バイト以上でなければなりません。
cbHeaderSizeULONGLONG*outコンテンツのヘッダーセクションのサイズ (バイト単位) を受け取ります。この値には、ASF Header Object のサイズに Data Object のヘッダーセクションのサイズを加えた値が含まれます。したがって、得られる値は ASF Data Object 内のデータパケットの開始位置までのオフセットになります。

戻り値

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

Return code Description
S_OK
メソッドは成功しました。
MF_E_ASF_INVALIDDATA
バッファーに有効な ASF データが含まれていません。
MF_E_BUFFERTOOSMALL
バッファーに十分な有効データが含まれていません。

解説(Remarks)

ASF ファイルまたはストリームのヘッダーを IMFASFContentInfo::ParseHeader メソッドに渡すことで、ヘッダー情報を ContentInfo オブジェクトに設定できます。

vtbl 4 HRESULT ParseHeader(IMFMediaBuffer* pIHeaderBuffer, ULONGLONG cbOffsetWithinHeader)

ASF ヘッダー内の情報を解析し、その情報を使用して ContentInfo オブジェクトの値を設定します。ヘッダー全体を単一のバッファーで渡すことも、複数に分割して送信することもできます。

pIHeaderBufferIMFMediaBuffer*inヘッダーの一部または全体を含むバッファーオブジェクトの IMFMediaBuffer インターフェイスへのポインター。バッファーには、Header Object のサイズである少なくとも 30 バイトを含める必要があります。これは Header Object に含まれるオブジェクトを含まないサイズです (つまり、Header Object の Reserved2 フィールドまでとそれを含むすべて)。
cbOffsetWithinHeaderULONGLONGinヘッダーの先頭を基準とした、バッファー内の最初のバイトのオフセット (バイト単位)。

戻り値

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

Return code Description
S_OK
ヘッダーは完全に解析され、検証されました。
MF_E_ASF_INVALIDDATA
入力バッファーに有効な ASF データが含まれていません。
MF_E_BUFFERTOOSMALL
入力バッファーが小さすぎます。
MF_S_ASF_PARSEINPROGRESS
メソッドは成功しましたが、渡されたヘッダーは不完全でした。これは、ヘッダーを分割して渡す場合に、最後の呼び出し以外のすべての呼び出しで返される成功コードです。

解説(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 バイトを必要とします。)

vtbl 5 HRESULT GenerateHeader(IMFMediaBuffer* pIHeader, DWORD* pcbHeader)

MFASFContentInfo オブジェクト内のデータをバイナリの Advanced Systems Format (ASF) ヘッダーにエンコードします。

pIHeaderIMFMediaBuffer*inエンコードされたヘッダーを受け取るバッファーオブジェクトの IMFMediaBuffer インターフェイスへのポインター。ヘッダーのサイズを取得するには NULL を設定します。
pcbHeaderDWORD*outエンコードされた ASF ヘッダーのサイズ (バイト単位)。pIHeaderNULL の場合、この値にはエンコードされたヘッダーを格納するために必要なバッファーサイズが設定されます。

戻り値

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

Return code Description
S_OK
メソッドは成功しました。
MF_E_INVALIDREQUEST
ContentInfo オブジェクトが参照を保持しているメディアに対する ASF Header Object が存在しません。
MF_E_ASF_INVALIDDATA
ASF Header Object のサイズが 10 MB を超えています。
MF_E_BUFFERTOOSMALL
pIHeader に渡されたバッファーが、ASF Header Object 情報を格納するのに十分な大きさではありません。

解説(Remarks)

pcbHeader パラメーターで受け取るサイズには、パディングのサイズが含まれます。コンテンツ情報は、ASF Header Object のサイズに応じてパディングデータを縮小または拡大します。

この呼び出しの間に、プロファイルのエンコードプロパティに基づいてストリームプロパティが設定されます。これらのプロパティは IMFMetadata インターフェイスを通じて利用できます。

vtbl 6 HRESULT GetProfile(IMFASFProfile** ppIProfile)

ASF コンテンツを記述する Advanced Systems Format (ASF) プロファイルを取得します。

ppIProfileIMFASFProfile**outIMFASFProfile インターフェイスポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。オブジェクトが ASF プロファイルを持たない場合、このパラメーターは値 NULL を受け取ります。

戻り値

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

Return code Description
S_OK
メソッドは成功しました。

解説(Remarks)

プロファイルは、IMFASFContentInfo::SetProfile または IMFASFContentInfo::ParseHeader のいずれかを呼び出すことで設定されます。

このメソッドが返す ASF プロファイルオブジェクトには、MF_PD_ASF_xxx 属性 (Presentation Descriptor Attributes を参照) は含まれません。これらの属性を取得するには、次の手順を実行します。

  1. IMFASFContentInfo::GeneratePresentationDescriptor を呼び出して ASF プレゼンテーション記述子を取得します。プレゼンテーション記述子に対して MF_PD_ASF_xxx 属性を照会できます。
  2. (省略可能。) MFCreateASFProfileFromPresentationDescriptor を呼び出して、プレゼンテーション記述子を ASF プロファイルに変換します。この関数によって作成されるプロファイルオブジェクトには MF_PD_ASF_xxx 属性が含まれます。
ASF プロファイルはファイルエンコードのテンプレートであり、主に ASF コンテンツの作成を目的としています。既存の ASF ファイルを読み取る場合は、プレゼンテーション記述子を使用してファイルに関する情報を取得することをお勧めします。例外として、プロファイルには相互排他 (mutual exclusion) およびストリーム優先順位付け (stream prioritization) オブジェクトが含まれ、これらはプレゼンテーション記述子から直接公開されません。
vtbl 7 HRESULT SetProfile(IMFASFProfile* pIProfile)

プロファイルオブジェクトのプロファイルデータを使用して、ContentInfo オブジェクトの設定を構成します。

pIProfileIMFASFProfile*inプロファイルオブジェクトの IMFASFProfile インターフェイス。

戻り値

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

Return code Description
S_OK
メソッドは成功しました。

解説(Remarks)

このメソッドを呼び出したときに ContentInfo オブジェクトにすでに情報が存在する場合、その情報はプロファイルオブジェクトからの情報で置き換えられます。

vtbl 8 HRESULT GeneratePresentationDescriptor(IMFPresentationDescriptor** ppIPresentationDescriptor)

ASF コンテンツのプレゼンテーション記述子を作成します。

ppIPresentationDescriptorIMFPresentationDescriptor**outIMFPresentationDescriptor インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。

戻り値

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

Return code Description
S_OK
メソッドは成功しました。
vtbl 9 HRESULT GetEncodingConfigurationPropertyStore(WORD wStreamNumber, IPropertyStore** ppIStore)

エンコードプロパティの設定に使用できるプロパティストアを取得します。

wStreamNumberWORDin構成するストリーム番号。ファイルレベルのエンコードプロパティを構成するにはゼロを設定します。
ppIStoreIPropertyStore**outIPropertyStore インターフェイスへのポインターを受け取ります。呼び出し元はインターフェイスを解放する必要があります。

戻り値

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

Return code Description
S_OK
メソッドは成功しました。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 指定が可能。