ID3D11VideoDevice
COM公式ドキュメント
Microsoft Direct3D 11 デバイスのビデオデコードおよびビデオ処理機能を提供します。(ID3D11VideoDevice)
解説(Remarks)
Direct3D 11 デバイスはこのインターフェイスをサポートします。このインターフェイスへのポインターを取得するには、ID3D11Device インターフェイスポインターに対して QueryInterface を呼び出します。
ID3D11Device に対して ID3D11VideoDevice をクエリした際に、作成された Direct3D 11 デバイスがリファレンスラスタライザーまたは WARP を使用している場合、あるいはハードウェアデバイスであっても Microsoft Basic Display Adapter を使用している場合は、E_NOINTERFACE が返されます。
メソッド 17
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Microsoft Direct3D 11 用のビデオデコーダーデバイスを作成します。
| pVideoDesc | D3D11_VIDEO_DECODER_DESC* | in | ビデオストリームとデコーダープロファイルを記述する D3D11_VIDEO_DECODER_DESC 構造体へのポインター。 |
| pConfig | D3D11_VIDEO_DECODER_CONFIG* | in | デコーダーの構成を指定する D3D11_VIDEO_DECODER_CONFIG 構造体へのポインター。 |
| ppDecoder | ID3D11VideoDecoder** | out | ID3D11VideoDecoder インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
このメソッドは必要なデコーダーバッファーを割り当てます。
ID3D11DeviceContext::ClearState メソッドは、ビデオデコーダーの内部状態には影響しません。
Microsoft Direct3D 11 用のビデオプロセッサーデバイスを作成します。
| pEnum | ID3D11VideoProcessorEnumerator* | in | ID3D11VideoProcessorEnumerator インターフェイスへのポインター。このポインターを取得するには、ID3D11VideoDevice::CreateVideoProcessorEnumerator を呼び出します。 |
| RateConversionIndex | DWORD | in | ビデオプロセッサーのフレームレート変換機能を指定します。この値は 0 から始まるインデックスで、ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps メソッドの TypeIndex パラメーターに対応します。 |
| ppVideoProcessor | ID3D11VideoProcessor** | out | ID3D11VideoProcessor インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ID3D11DeviceContext::ClearState メソッドは、ビデオプロセッサーの内部状態には影響しません。
Microsoft Direct3D デバイスまたはグラフィックスドライバーと通信するためのチャネルを作成します。
| ChannelType | D3D11_AUTHENTICATED_CHANNEL_TYPE | in | チャネルの種類を D3D11_AUTHENTICATED_CHANNEL_TYPE 列挙型のメンバーとして指定します。 |
| ppAuthenticatedChannel | ID3D11AuthenticatedChannel** | out | ID3D11AuthenticatedChannel インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ChannelType パラメーターが D3D11_AUTHENTICATED_CHANNEL_D3D11 の場合、このメソッドは Direct3D デバイスとのチャネルを作成します。この種類のチャネルは認証をサポートしません。
ChannelType が D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE または D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE の場合、このメソッドはグラフィックスドライバーとの認証済みチャネルを作成します。
グラフィックスドライバーへ送信されるビデオコンテンツを暗号化するための暗号化セッションを作成します。
| pCryptoType | GUID* | in | 使用する暗号化の種類を指定する GUID へのポインター。次の GUID が定義されています。
| ||||
| pDecoderProfile | GUID* | inoptional | デコードプロファイルを指定する GUID へのポインター。指定可能な値の一覧については、ID3D11VideoDevice::GetVideoDecoderProfile を参照してください。デコードを使用しない場合は、このパラメーターに NULL を設定します。 | ||||
| pKeyExchangeType | GUID* | in | キー交換の種類を指定する GUID へのポインター。
| ||||
| ppCryptoSession | ID3D11CryptoSession** | out | ID3D11CryptoSession インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ID3D11DeviceContext::ClearState メソッドは、暗号化セッションの内部状態には影響しません。
デコード処理の出力サンプルを記述する、ビデオデコーダー用のリソースビューを作成します。
| pResource | ID3D11Resource* | in | デコーダーサーフェスの ID3D11Resource インターフェイスへのポインター。このリソースは D3D11_BIND_DECODER フラグを指定して作成されている必要があります。D3D11_BIND_FLAG を参照してください。 |
| pDesc | D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC* | in | ビューを記述する D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC 構造体へのポインター。 |
| ppVDOVView | ID3D11VideoDecoderOutputView** | outoptional | ID3D11VideoDecoderOutputView インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。このパラメーターが NULL の場合、メソッドはビューがサポートされているかどうかを確認しますが、ビューは作成しません。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ビューがサポートされているかどうかをテストするには、ppVDOVView パラメーターに NULL を設定します。
ビデオ処理操作の入力サンプルを記述する、ビデオプロセッサー用のリソースビューを作成します。
| pResource | ID3D11Resource* | in | 入力サーフェスの ID3D11Resource インターフェイスへのポインター。 |
| pEnum | ID3D11VideoProcessorEnumerator* | in | ビデオプロセッサーを指定する ID3D11VideoProcessorEnumerator インターフェイスへのポインター。このポインターを取得するには、ID3D11VideoDevice::CreateVideoProcessorEnumerator を呼び出します。 |
| pDesc | D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC* | in | ビューを記述する D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC 構造体へのポインター。 |
| ppVPIView | ID3D11VideoProcessorInputView** | outoptional | ID3D11VideoProcessorInputView インターフェイスへのポインターを受け取ります。呼び出し元はこのリソースを解放する必要があります。このパラメーターが NULL の場合、メソッドはビューがサポートされているかどうかを確認しますが、ビューは作成しません。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ビューがサポートされているかどうかをテストするには、ppVPIView パラメーターに NULL を設定します。
サーフェスの形式は、D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC 構造体の FourCC メンバーで指定します。ビデオプロセッサーがその形式を入力サンプルとしてサポートしていない場合、このメソッドは失敗します。機能レベル 9_1、9_2、9_3 を使用する場合、アプリは 0 を指定する必要があります。
ビデオプロセッサー入力ビューに使用するリソースは、次のバインドフラグの組み合わせを使用する必要があります。
- D3D11_BIND_DECODER、D3D11_BIND_VIDEO_ENCODER、D3D11_BIND_RENDER_TARGET、D3D11_BIND_UNORDERED_ACCESS_VIEW のいずれかを含むバインドフラグの組み合わせは、(他にどのバインドフラグが設定されていても) ビデオプロセッサー入力ビューとして使用できます。
- バインドフラグ = 0 も、ビデオプロセッサー入力ビューとして使用できます。
- その他に次のような制限が適用されます。
- マルチサンプリングは使用できません。
- Texture2D は D3D11_USAGE_DEFAULT を使用して作成されている必要があります。
ビデオ処理操作の出力サンプルを記述する、ビデオプロセッサー用のリソースビューを作成します。
| pResource | ID3D11Resource* | in | 出力サーフェスの ID3D11Resource インターフェイスへのポインター。このリソースは D3D11_BIND_RENDER_TARGET フラグを指定して作成されている必要があります。D3D11_BIND_FLAG を参照してください。 |
| pEnum | ID3D11VideoProcessorEnumerator* | in | ビデオプロセッサーを指定する ID3D11VideoProcessorEnumerator インターフェイスへのポインター。このポインターを取得するには、ID3D11VideoDevice::CreateVideoProcessorEnumerator を呼び出します。 |
| pDesc | D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC* | in | ビューを記述する D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC 構造体へのポインター。 |
| ppVPOView | ID3D11VideoProcessorOutputView** | outoptional | ID3D11VideoProcessorOutputView インターフェイスへのポインターを受け取ります。呼び出し元はこのリソースを解放する必要があります。このパラメーターが NULL の場合、メソッドはビューがサポートされているかどうかを確認しますが、ビューは作成しません。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ビューがサポートされているかどうかをテストするには、ppVPOView パラメーターに NULL を設定します。
ビデオプロセッサー出力ビューに使用するリソースは、次の D3D11_BIND_FLAG の組み合わせを使用する必要があります。
- D3D11_BIND_RENDER_TARGET は、そのリソースがビデオプロセッサー出力ビューとして使用できることを示します。D3D11_BIND_RENDER_TARGET と併せて設定できるバインドフラグは次のとおりです。
- その他に次のような制限が適用されます。
- マルチサンプリングは使用できません。
- Texture2D は D3D11_USAGE_DEFAULT を使用して作成されている必要があります。
- 一部の YUV 形式は、ビデオプロセッサー出力ビューとしてはサポートされていても、3D レンダーターゲットとしてはサポートされない場合があります。D3D11 はこれらの形式に対して D3D11_BIND_RENDER_TARGET フラグを許可しますが、CreateRenderTargetView は許可されません。
ドライバーのビデオプロセッサー機能を列挙します。
| pDesc | D3D11_VIDEO_PROCESSOR_CONTENT_DESC* | in | ビデオコンテンツを記述する D3D11_VIDEO_PROCESSOR_CONTENT_DESC 構造体へのポインター。 |
| ppEnum | ID3D11VideoProcessorEnumerator** | out | ID3D11VideoProcessorEnumerator インターフェイスへのポインターを受け取ります。呼び出し元はこのインターフェイスを解放する必要があります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ビデオプロセッサーデバイスを作成するには、ID3D11VideoProcessorEnumerator ポインターを ID3D11VideoDevice::CreateVideoProcessor メソッドに渡します。
ドライバーがサポートするプロファイルの数を取得します。
戻り値
プロファイルの数を返します。
解説(Remarks)
プロファイルを列挙するには、ID3D11VideoDevice::GetVideoDecoderProfile を呼び出します。
ドライバーがサポートするプロファイルを取得します。
| Index | DWORD | in | プロファイルの 0 から始まるインデックス。ドライバーがサポートするプロファイルの数を取得するには、ID3D11VideoDevice::GetVideoDecoderProfileCount を呼び出します。 |
| pDecoderProfile | GUID* | out | プロファイルを識別する GUID を受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
指定されたプロファイルについて、ドライバーが指定の出力形式をサポートしているかどうかを確認します。
| pDecoderProfile | GUID* | in | プロファイルを識別する GUID へのポインター。サポートされるプロファイルの一覧を取得するには、ID3D11VideoDevice::GetVideoDecoderProfile を呼び出します。 |
| Format | DXGI_FORMAT | in | 出力形式を指定する DXGI_FORMAT 値。代表的な値には DXGI_FORMAT_NV12 や DXGI_FORMAT_420_OPAQUE があります。 |
| pSupported | BOOL* | out | その形式がサポートされている場合は値 TRUE を、そうでない場合は FALSE を受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
pDecoderProfile で指定されたプロファイルをドライバーがサポートしていない場合、このメソッドは E_INVALIDARG を返します。ドライバーがそのプロファイルをサポートしていても、DXGI 形式がプロファイルと互換性がない場合は、メソッドは成功しますが pSupported に FALSE を返します。
指定されたビデオ記述に対して、ドライバーがサポートするデコーダー構成の数を取得します。
| pDesc | D3D11_VIDEO_DECODER_DESC* | in | ビデオストリームを記述する D3D11_VIDEO_DECODER_DESC 構造体へのポインター。 |
| pCount | DWORD* | out | デコーダー構成の数を受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
デコーダー構成を列挙するには、ID3D11VideoDevice::GetVideoDecoderConfig を呼び出します。
ドライバーがサポートするデコーダー構成を取得します。
| pDesc | D3D11_VIDEO_DECODER_DESC* | in | ビデオストリームを記述する D3D11_VIDEO_DECODER_DESC 構造体へのポインター。 |
| Index | DWORD | in | デコーダー構成の 0 から始まるインデックス。ドライバーがサポートする構成の数を取得するには、ID3D11VideoDevice::GetVideoDecoderConfigCount を呼び出します。 |
| pConfig | D3D11_VIDEO_DECODER_CONFIG* | out | D3D11_VIDEO_DECODER_CONFIG 構造体へのポインター。メソッドはこの構造体にデコーダー構成を格納します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
ドライバーのコンテンツ保護機能を照会します。
| pCryptoType | GUID* | inoptional | 使用する暗号化の種類を指定する GUID へのポインター。次の GUID が定義されています。
暗号化を使用しない場合は、このパラメーターに NULL を設定します。 | ||||
| pDecoderProfile | GUID* | inoptional | デコードプロファイルを指定する GUID へのポインター。ドライバーがサポートするプロファイルを取得するには、ID3D11VideoDevice::GetVideoDecoderProfile を呼び出します。デコードを使用しない場合は、このパラメーターに NULL を設定します。 ドライバーによっては、暗号化の種類とプロファイルの一部の組み合わせを許可しない場合があります。 | ||||
| pCaps | D3D11_VIDEO_CONTENT_PROTECTION_CAPS* | out | D3D11_VIDEO_CONTENT_PROTECTION_CAPS 構造体へのポインター。メソッドはこの構造体にドライバーのコンテンツ保護機能を格納します。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
ドライバーがサポートする暗号キー交換メカニズムを取得します。
| pCryptoType | GUID* | in | 使用する暗号化の種類を指定する GUID へのポインター。次の GUID が定義されています。
| ||||
| pDecoderProfile | GUID* | inoptional | デコードプロファイルを指定する GUID へのポインター。ドライバーがサポートするプロファイルを取得するには、ID3D11VideoDevice::GetVideoDecoderProfile を呼び出します。デコードを使用しない場合は、このパラメーターに NULL を設定します。 | ||||
| Index | DWORD | in | キー交換の種類の 0 から始まるインデックス。ドライバーは種類の数を D3D11_VIDEO_CONTENT_PROTECTION_CAPS 構造体の KeyExchangeTypeCount メンバーで報告します。 | ||||
| pKeyExchangeType | GUID* | out | キー交換の種類を識別する GUID を受け取ります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
ビデオデバイスにプライベートデータを設定し、そのデータを GUID に関連付けます。
| guid | GUID* | in | データに関連付ける GUID。 |
| DataSize | DWORD | in | データのサイズ (バイト単位)。 |
| pData | void* | inoptional | データへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
ビデオデバイスにプライベートな IUnknown ポインターを設定し、そのポインターを GUID に関連付けます。
| guid | GUID* | in | ポインターに関連付ける GUID。 |
| pData | IUnknown* | inoptional | IUnknown インターフェイスへのポインター。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D11VideoDevice "{10EC4D5B-975A-4689-B9E4-D0AAC30FE333}" #usecom global ID3D11VideoDevice IID_ID3D11VideoDevice "{}" #comfunc global ID3D11VideoDevice_CreateVideoDecoder 3 var,var,sptr #comfunc global ID3D11VideoDevice_CreateVideoProcessor 4 sptr,int,sptr #comfunc global ID3D11VideoDevice_CreateAuthenticatedChannel 5 int,sptr #comfunc global ID3D11VideoDevice_CreateCryptoSession 6 var,var,var,sptr #comfunc global ID3D11VideoDevice_CreateVideoDecoderOutputView 7 sptr,var,sptr #comfunc global ID3D11VideoDevice_CreateVideoProcessorInputView 8 sptr,sptr,var,sptr #comfunc global ID3D11VideoDevice_CreateVideoProcessorOutputView 9 sptr,sptr,var,sptr #comfunc global ID3D11VideoDevice_CreateVideoProcessorEnumerator 10 var,sptr #comfunc global ID3D11VideoDevice_GetVideoDecoderProfileCount 11 #comfunc global ID3D11VideoDevice_GetVideoDecoderProfile 12 int,var #comfunc global ID3D11VideoDevice_CheckVideoDecoderFormat 13 var,int,var #comfunc global ID3D11VideoDevice_GetVideoDecoderConfigCount 14 var,var #comfunc global ID3D11VideoDevice_GetVideoDecoderConfig 15 var,int,var #comfunc global ID3D11VideoDevice_GetContentProtectionCaps 16 var,var,var #comfunc global ID3D11VideoDevice_CheckCryptoKeyExchange 17 var,var,int,var #comfunc global ID3D11VideoDevice_SetPrivateData 18 var,int,sptr #comfunc global ID3D11VideoDevice_SetPrivateDataInterface 19 var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID3D11VideoDevice "{10EC4D5B-975A-4689-B9E4-D0AAC30FE333}" #usecom global ID3D11VideoDevice IID_ID3D11VideoDevice "{}" #comfunc global ID3D11VideoDevice_CreateVideoDecoder 3 sptr,sptr,sptr #comfunc global ID3D11VideoDevice_CreateVideoProcessor 4 sptr,int,sptr #comfunc global ID3D11VideoDevice_CreateAuthenticatedChannel 5 int,sptr #comfunc global ID3D11VideoDevice_CreateCryptoSession 6 sptr,sptr,sptr,sptr #comfunc global ID3D11VideoDevice_CreateVideoDecoderOutputView 7 sptr,sptr,sptr #comfunc global ID3D11VideoDevice_CreateVideoProcessorInputView 8 sptr,sptr,sptr,sptr #comfunc global ID3D11VideoDevice_CreateVideoProcessorOutputView 9 sptr,sptr,sptr,sptr #comfunc global ID3D11VideoDevice_CreateVideoProcessorEnumerator 10 sptr,sptr #comfunc global ID3D11VideoDevice_GetVideoDecoderProfileCount 11 #comfunc global ID3D11VideoDevice_GetVideoDecoderProfile 12 int,sptr #comfunc global ID3D11VideoDevice_CheckVideoDecoderFormat 13 sptr,int,sptr #comfunc global ID3D11VideoDevice_GetVideoDecoderConfigCount 14 sptr,sptr #comfunc global ID3D11VideoDevice_GetVideoDecoderConfig 15 sptr,int,sptr #comfunc global ID3D11VideoDevice_GetContentProtectionCaps 16 sptr,sptr,sptr #comfunc global ID3D11VideoDevice_CheckCryptoKeyExchange 17 sptr,sptr,int,sptr #comfunc global ID3D11VideoDevice_SetPrivateData 18 sptr,int,sptr #comfunc global ID3D11VideoDevice_SetPrivateDataInterface 19 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。