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

ICodecAPI

COM
IID901db4c7-31ce-41a2-85dc-8fa0bf41b8da継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ICodecAPI インターフェイス (strmif.h) は、エンコーダーまたはデコーダーフィルターの設定を取得および設定します。

解説(Remarks)

このインターフェイスは、コーデック (エンコーダーまたはデコーダー) にプロパティを設定するための汎用的なメカニズムを定義します。コーデックプロパティはキー/値のペアであり、キーは GUID、値は VARIANT です。VARIANT データの解釈は、プロパティ GUID に依存します。コーデックプロパティ GUID の一覧については、Codec API Properties を参照してください。

コーデックプロファイル

コーデックは、プロファイルおよび機能情報をシステムレジストリに保存できます (省略可能)。この情報により、アプリケーションはデバイスの列挙時にデバイスを照会できます。既定のプロファイルは、次のレジストリキーに保存されます。
HKEY_LOCAL_MACHINE
   Software
      Classes
         CLSID
            Category
               Profiles
各プロファイルはレジストリキーであり、その既定文字列はプロファイルのテキスト説明です。各値は GUID 名を持ち、その後に数値の GUID 値を含む文字列値が続きます。例:
C++
  HLKM\Software\Classes\CLSID\<category>\Profiles\DVD
    default "HQ DVD"
    REG_SZ {...} = "0"
    REG_SZ {...} = "1234"
ここで {...} は、アプリケーションがユーザーインターフェイスにマッピングできるプロパティ GUID です。Microsoft は現在、標準プロファイルのセットの定義を検討中です。

既定のコーデック機能は、HLKM\Software\Classes\CLSID&lt;category>\Instance&lt;Filter CLSID>\Capabilities に保存されます。各値は GUID 名を持ち、その後に数値の GUID 値を含む文字列値が続きます。例:

C++
HLKM\Software\Classes\CLSID\<category>\Instance\<My DVD encoder>\Capabilities
     default "My DVD encoder"
     REG_SZ_MULTI {...}
ここで {...} は、アプリケーションがユーザーインターフェイスにマッピングできるプロパティ GUID です。

メソッド 15

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

vtbl 3 HRESULT IsSupported(GUID* Api)

IsSupported メソッドは、コーデックが指定されたプロパティをサポートしているかどうかを照会します。(ICodecAPI.IsSupported)

ApiGUID*in照会するプロパティを指定する GUID へのポインター。標準コーデックプロパティの一覧については、Codec API Properties を参照してください。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_FALSE
コーデックはこのプロパティをサポートしていません。
S_OK
コーデックはこのプロパティをサポートしています。
E_NOTIMPL
コーデックはこのプロパティをサポートしていません。

解説(Remarks)

上記の表に記載されているもの以外のエラーは、呼び出しを処理できないことを示します。

注意 コーデックがプロパティをサポートしていない場合、このメソッドは S_FALSE または E_NOTIMPL のいずれかを返すことができます。E_NOTIMPL が推奨されますが、以前のドキュメントでは S_FALSE のみが記載されていたため、一部のコーデックはその値を返す場合があります。アプリケーションは、明示的に S_OK の値をテストする必要があります。
vtbl 4 HRESULT IsModifiable(GUID* Api)

IsModifiable メソッドは、コーデックの現在の構成において、コーデックプロパティを変更できるかどうかを照会します。(ICodecAPI.IsModifiable)

ApiGUID*inプロパティを指定する GUID へのポインター。標準コーデックプロパティの一覧については、Codec API Properties を参照してください。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_FALSE
このプロパティの値は変更できません。
S_OK
このプロパティの値は変更できます。

解説(Remarks)

上記の表に記載されているもの以外のエラーは、呼び出しを処理できないことを示します。

vtbl 5 HRESULT GetParameterRange(GUID* Api, VARIANT* ValueMin, VARIANT* ValueMax, VARIANT* SteppingDelta)

GetParameterRange メソッドは、コーデックプロパティの値の範囲を取得します。(ICodecAPI.GetParameterRange)

ApiGUID*in照会するプロパティを指定する GUID へのポインター。標準コーデックプロパティの一覧については、Codec API Properties を参照してください。
ValueMinVARIANT*outプロパティの最小値を受け取る VARIANT へのポインター。呼び出し元は VariantClear を呼び出して VARIANT を解放する必要があります。
ValueMaxVARIANT*outプロパティの最大値を受け取る VARIANT へのポインター。呼び出し元は VariantClear を呼び出して VARIANT を解放する必要があります。
SteppingDeltaVARIANT*out

ステッピングデルタを受け取る VARIANT へのポインター。ステッピングデルタは、ValueMin から ValueMax までの有効な増分を定義します。呼び出し元は VariantClear を呼び出して VARIANT を解放する必要があります。

VARIANT の型が VT_EMPTY の場合、任意の増分が有効です。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
E_INVALIDARG
引数が無効です。
S_OK
メソッドは成功しました。
VFW_E_CODECAPI_ENUMERATED
このプロパティは、線形範囲ではなく、指定可能な値のリストをサポートしています。

解説(Remarks)

プロパティの有効な範囲は [ValueMin... ValueMax] であり、増分は SteppingDelta です。プロパティが値の線形範囲をサポートしている場合、そのプロパティは次のいずれかの variant 型を使用する必要があります。

プロパティが範囲ではなく値のリストをサポートしている場合、このメソッドは VFW_E_CODECAPI_ENUMERATED を返します。その場合は、ICodecAPI::GetParameterValues を呼び出して値のリストを取得してください。
vtbl 6 HRESULT GetParameterValues(GUID* Api, VARIANT** Values, DWORD* ValuesCount)

GetParameterValues メソッドは、コーデックプロパティに指定可能な値のリストを取得します。(ICodecAPI.GetParameterValues)

ApiGUID*in照会するプロパティを指定する GUID へのポインター。標準コーデックプロパティの一覧については、Codec API Properties を参照してください。
ValuesVARIANT**outVARIANT 型の配列へのポインターを受け取ります。この配列には、エンコーダーがこのプロパティに対してサポートする値のリストが含まれます。呼び出し元は VariantClear を呼び出して各 VARIANT を解放する必要があります。また、呼び出し元は CoTaskMemFree を呼び出して配列を解放する必要もあります。
ValuesCountDWORD*outValues 配列内の要素数を受け取ります。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_INVALIDARG
引数が無効です。
VFW_E_CODECAPI_LINEAR_RANGE
このプロパティは、リストではなく値の範囲をサポートしています。

解説(Remarks)

プロパティがリストではなく値の範囲をサポートしている場合、このメソッドは VFW_E_CODECAPI_LINEAR_RANGE を返します。その場合は、ICodecAPI::GetParameterRange を呼び出して値の範囲を取得してください。

vtbl 7 HRESULT GetDefaultValue(GUID* Api, VARIANT* Value)

GetDefaultValue メソッドは、コーデックプロパティの既定値を取得します。(ICodecAPI.GetDefaultValue)

ApiGUID*inプロパティを指定する GUID へのポインター。標準コーデックプロパティの一覧については、Codec API Properties を参照してください。
ValueVARIANT*out既定値を受け取る VARIANT へのポインター。呼び出し元は VariantClear を呼び出して VARIANT を解放する必要があります。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_OK
メソッドは成功しました。
VFW_E_CODECAPI_NO_DEFAULT
指定されたプロパティには既定値がありません。
vtbl 8 HRESULT GetValue(GUID* Api, VARIANT* Value)

GetValue メソッドは、コーデックプロパティの現在の値を取得します。

ApiGUID*inプロパティを指定する GUID へのポインター。標準コーデックプロパティの一覧については、Codec API Properties を参照してください。
ValueVARIANT*outプロパティの値を受け取る VARIANT へのポインター。呼び出し元は VariantClear を呼び出して VARIANT を解放する必要があります。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_OK
メソッドは成功しました。
VFW_E_CODECAPI_NO_CURRENT_VALUE
このプロパティには現在値がありません。
vtbl 9 HRESULT SetValue(GUID* Api, VARIANT* Value)

SetValue メソッドは、コーデックプロパティの値を設定します。(ICodecAPI.SetValue)

ApiGUID*in設定するプロパティを指定する GUID へのポインター。 標準コーデックプロパティの一覧については、Codec API Properties を参照してください。
ValueVARIANT*inプロパティの新しい値を含む VARIANT へのポインター。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_OK
メソッドは成功しました。
S_FALSE
このプロパティは読み取り専用です。
E_INVALIDARG
プロパティ GUID または値が無効です。
vtbl 10 HRESULT RegisterForEvent(GUID* Api, INT_PTR userData)

RegisterForEvent メソッドは、コーデックからイベントを受信するようにアプリケーションを登録します。(ICodecAPI.RegisterForEvent)

ApiGUID*in

イベントを指定する GUID へのポインター。 イベントには 3 つのカテゴリがあります。

意味
CODECAPI_CHANGELISTS
コーデックのプロパティが変更されたときに、コーデックがアプリケーションに通知します。イベントデータは、変更されたプロパティの GUID のリストです。
codecapi.h で定義されているプロパティ GUID のいずれか。(Codec API Properties を参照してください。)
指定されたプロパティが変更されたときに、コーデックがアプリケーションに通知します。通常、コーデックはこの種類の通知を、サポートする場合でも限られたプロパティのセットに対してのみサポートします。
コーデックによって定義された独自のイベント GUID。
実装依存です。
userDataINT_PTRin呼び出し元が定義したデータへのポインター。アプリケーションは、このポインターを lParam1 イベントパラメーターで受け取ります。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_NOTIMPL
実装されていません。コーデックがイベント通知をサポートしていないか、Api パラメーターで指定されたイベント GUID をサポートしていません。

解説(Remarks)

エンコーダーコーデックがイベントを送信するたびに、アプリケーションは EC_CODECAPI_EVENT イベント通知を受け取ります。イベントを取得するには、IMediaEventEx インターフェイスを使用します。

イベントの lParam2 パラメーターは、CodecAPIEventData 構造体へのポインターです。この構造体の後には、イベント GUID に応じて追加データが続く場合があります。このデータのサイズは、dataLength メンバーによって示されます。

GUID イベントデータ
CODECAPI_CHANGELISTS GUID の配列。各 GUID は、現在値または有効範囲が変更されたコーデックプロパティを指定します。配列のサイズは dataLength / sizeof(GUID) です。
codecapi.h で定義されているプロパティ GUID。 なし。
独自のイベント GUID。 実装依存です。

コーデックが指定されたイベントをサポートしていない場合、このメソッドは E_NOTIMPL を返します。コーデックは他のイベントをサポートしている可能性があります。

イベントの通知を無効にするには、ICodecAPI::UnregisterForEvent を呼び出してください。

vtbl 11 HRESULT UnregisterForEvent(GUID* Api)

UnregisterForEvent メソッドは、指定されたエンコーダーイベントに対するアプリケーションの登録を解除します。(ICodecAPI.UnregisterForEvent)

ApiGUID*inイベントを指定する GUID へのポインター。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

vtbl 12 HRESULT SetAllDefaults()

SetAllDefaults メソッドは、すべてのコーデックプロパティを既定値にリセットします。(ICodecAPI.SetAllDefaults)

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 13 HRESULT SetValueWithNotify(GUID* Api, VARIANT* Value, GUID** ChangedParam, DWORD* ChangedParamCount)

SetValueWithNotify メソッドは、コーデックにプロパティを設定し、その結果として変更された他のプロパティのリストを返します。(ICodecAPI.SetValueWithNotify)

ApiGUID*in設定するプロパティを指定する GUID へのポインター。 標準コーデックプロパティの一覧については、Codec API Properties を参照してください。
ValueVARIANT*inプロパティの新しい値を含む VARIANT へのポインター。
ChangedParamGUID**outGUID の配列へのポインターを受け取ります。この配列には、このメソッド呼び出しの結果として変更されたプロパティの GUID が含まれます。呼び出し元は CoTaskMemFree を呼び出して配列を解放する必要があります。
ChangedParamCountDWORD*outChangedParam 配列内の要素数を受け取ります。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_NOTIMPL
実装されていません。

解説(Remarks)

ICodecAPI を実装するコーデックは、このメソッドをサポートする必要はありません。

vtbl 14 HRESULT SetAllDefaultsWithNotify(GUID** ChangedParam, DWORD* ChangedParamCount)

SetAllDefaultsWithNotify メソッドは、すべてのコーデックプロパティを既定値にリセットし、変更されたプロパティのリストを返します。(ICodecAPI.SetAllDefaultsWithNotify)

ChangedParamGUID**outGUID の配列へのポインターを受け取ります。この配列には、このメソッド呼び出しの結果として変更されたプロパティの GUID が含まれます。呼び出し元は CoTaskMemFree を呼び出して配列を解放する必要があります。
ChangedParamCountDWORD*outChangedParam 配列内の要素数を受け取ります。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_NOTIMPL
実装されていません。

解説(Remarks)

ICodecAPI を実装するコーデックは、このメソッドをサポートする必要はありません。

vtbl 15 HRESULT GetAllSettings(IStream* __MIDL__ICodecAPI0000)

GetAllSettings メソッドは、コーデックの現在のプロパティを取得し、ストリームに書き込みます。(ICodecAPI.GetAllSettings)

__MIDL__ICodecAPI0000IStream*inストリームの IStream インターフェイスへのポインター。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_NOTIMPL
実装されていません。

解説(Remarks)

ICodecAPI を実装するコーデックは、このメソッドをサポートする必要はありません。

ストリームからプロパティを読み込んでコーデックに戻すには、ICodecAPI::SetAllSettings または ICodecAPI::SetAllSettingsWithNotify を呼び出してください。

ストリームに書き込まれるデータの形式は、コーデックの実装に依存します。標準的なシリアル化形式はありません。アプリケーションは、あるコーデックからプロパティを保存し、それを別のコーデックに読み込もうとしてはなりません。

vtbl 16 HRESULT SetAllSettings(IStream* __MIDL__ICodecAPI0001)

SetAllSettings メソッドは、ストリームからコーデックプロパティを読み取り、コーデックに設定します。(ICodecAPI.SetAllSettings)

__MIDL__ICodecAPI0001IStream*inストリームの IStream インターフェイスへのポインター。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_NOTIMPL
実装されていません。

解説(Remarks)

ICodecAPI を実装するコーデックは、このメソッドをサポートする必要はありません。

vtbl 17 HRESULT SetAllSettingsWithNotify(IStream* __MIDL__ICodecAPI0002, GUID** ChangedParam, DWORD* ChangedParamCount)

SetAllSettingsWithNotify メソッドは、ストリームからコーデックプロパティを読み取ってコーデックに設定し、変更されたプロパティのリストを返します。(ICodecAPI.SetAllSettingsWithNotify)

__MIDL__ICodecAPI0002IStream*inストリームの IStream インターフェイスへのポインター。
ChangedParamGUID**outGUID の配列へのポインターを受け取ります。この配列には、このメソッド呼び出しの結果として変更されたプロパティの GUID が含まれます。呼び出し元は CoTaskMemFree を呼び出して配列を解放する必要があります。
ChangedParamCountDWORD*outChangedParam 配列内の要素数を受け取ります。

戻り値

このメソッドは、次のいずれかの値を返すことができます。

戻り値コード 説明
S_OK
メソッドは成功しました。
E_NOTIMPL
実装されていません。

解説(Remarks)

ICodecAPI を実装するコーデックは、このメソッドをサポートする必要はありません。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ICodecAPI "{901DB4C7-31CE-41A2-85DC-8FA0BF41B8DA}"
#usecom global ICodecAPI IID_ICodecAPI "{}"
#comfunc global ICodecAPI_IsSupported               3 var
#comfunc global ICodecAPI_IsModifiable              4 var
#comfunc global ICodecAPI_GetParameterRange         5 var,var,var,var
#comfunc global ICodecAPI_GetParameterValues        6 var,var,var
#comfunc global ICodecAPI_GetDefaultValue           7 var,var
#comfunc global ICodecAPI_GetValue                  8 var,var
#comfunc global ICodecAPI_SetValue                  9 var,var
#comfunc global ICodecAPI_RegisterForEvent          10 var,sptr
#comfunc global ICodecAPI_UnregisterForEvent        11 var
#comfunc global ICodecAPI_SetAllDefaults            12
#comfunc global ICodecAPI_SetValueWithNotify        13 var,var,var,var
#comfunc global ICodecAPI_SetAllDefaultsWithNotify  14 var,var
#comfunc global ICodecAPI_GetAllSettings            15 sptr
#comfunc global ICodecAPI_SetAllSettings            16 sptr
#comfunc global ICodecAPI_SetAllSettingsWithNotify  17 sptr,var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。