Video and Vision Processing Suite Intel® FPGA IPユーザーガイド

ID 683329
日付 6/26/2023
Public
ドキュメント目次
1. Video and Vision Processing Suiteについて 2. Video and Vision Processing IPのスタートガイド 3. Video and Vision Processing IPの機能の説明 4. Video and Vision Processing IPインターフェイス 5. Video and Vision Processing IPレジスター 6. Video and Vision Processing IPのソフトウェア・プログラミング・モデル 7. Protocol Converter Intel® FPGA IP 8. 3D LUT Intel® FPGA IP 9. AXI-Stream Broadcaster Intel® FPGA IP 10. Bits per Color Sample Adapter Intel FPGA IP 11. Chroma Key Intel® FPGA IP 12. Chroma Resampler Intel® FPGA IP 13. Clipper Intel® FPGA IP 14. Clocked Video Input Intel® FPGA IP 15. Clocked Video to Full-Raster Converter Intel® FPGA IP 16. Clocked Video Output Intel® FPGA IP 17. Color Space Converter Intel® FPGA IP 18. Deinterlacer Intel® FPGA IP 19. FIR Filter Intel® FPGA IP 20. Frame Cleaner Intel® FPGA IP 21. Full-Raster to Clocked Video Converter Intel® FPGA IP 22. Full-Raster to Streaming Converter Intel® FPGA IP 23. Genlock Controller Intel® FPGA IP 24. Generic Crosspoint Intel® FPGA IP 25. Genlock Signal Router Intel® FPGA IP 26. Guard Bands Intel® FPGA IP 27. Interlacer Intel® FPGA IP 28. Mixer Intel® FPGA IP 29. Parallel Converter Intel® FPGA IPのピクセル 30. Scaler Intel® FPGA IP 31. Stream Cleaner Intel® FPGA IP 32. Switch Intel® FPGA IP 33. Tone Mapping Operator Intel® FPGA IP 34. Test Pattern Generator Intel® FPGA IP 35. Video and Vision Monitor Intel FPGA IP 36. Video Frame Buffer Intel® FPGA IP 37. Video Frame Reader Intel FPGA IP 38. Video Frame Writer Intel FPGA IP 39. Video Streaming FIFO Intel® FPGA IP 40. Video Timing Generator Intel® FPGA IP 41. Warp Intel® FPGA IP 42. デザイン・セキュリティー 43. Video and Vision Processing Suiteユーザーガイドの文書改訂履歴

41.5. Warp IPのソフトウェアAPI

Warp IPソフトウェアはCおよびC++で実装されています。このトピックでは、コード内のAPI関数について説明し、コード例を示します。
図 112. Warpソフトウェアのアーキテクチャー

ソフトウェアには、以下が含まれます。

  • intel_vvp_warp_driver
  • intel_vvp_warp_data
  • intel_vvp_warp_mesh

intel_vvp_warp_driver はワープIPドライバーです。ワープIPの初期化、コンフィグレーション、コントロール、ワープ・ビデオ・チャネル管理、およびデバッグ機能の使用のためのAPIを提供します。

intel_vvp_warp_data は、ワープIPに必要なメッシュ、キャッシュ、フィルター係数データを生成するソフトウェア・コンポーネントです。生成されたデータは、ワープIPによってアクセスされるRAMの領域に配置されます。この位置とその他の必要なパラメーターはワープドライバーに渡されます。

このコンポーネントには、メインの入力データとして、定義済みの形式の変換メッシュが必要です。また、いくつかのIPパラメーター (使用可能なエンジンの数、処理ブロックのサイズ、ブロックキャッシュのサイズなど) も必要です。

intel_vvp_warp_mesh は、移動、回転、ズーム; 視点変換 (例: :キーストーンと放射状の歪み (魚眼))、および一連のカーブで定義された任意のワープなどの一般的なアフィン変換用のワープメッシュを生成するソフトウェア・コンポーネントです。メッシュは intel_vvp_warp_data インターフェイスで必要な形式で生成されます。

このリファレンス・ソフトウェアは、実際のさまざまなアプリケーションで使用できます。ただし、より複雑な場合には、外部ソフトウェアを使用して変換メッシュを生成する必要がある場合があります。例えば、複雑な表面に画像を投影する場合などです。

ソフトウェアはNios IIベースのシステムに導入できます。ただし、メッシュとデータ生成コンポーネントの計算負荷が高いため、インテルではインテルArria 10 SXデバイスなどの専用CPUを搭載したSoCをお勧めしています。

intel_vvp_warp_driver

表 859.   intel_vvp_warp_driver APIのリファレンス

Warp IPのソフトウェア・ドライバーは、次のAPI関数のセットを提供します。

名前 説明
intel_vvp_warp_init_instance ドライバー・インスタンスを初期化します。
intel_vvp_warp_create_channel 単一エンジンのビデオ処理チャネルを作成します。
intel_vvp_warp_create_double_channel 二重エンジンのビデオ処理チャネルを作成します。
intel_vvp_warp_create_easy_warp_channel 簡単なワープビデオ処理チャネルを作成します。
intel_vvp_warp_add_engine_to_channel 既存のチャネルにワープエンジンを追加します。
intel_vvp_warp_free_channel 制限のないビデオ処理チャネル
intel_vvp_warp_configure_channel ビデオ処理チャネルをコンフィグレーションします。
intel_vvp_warp_apply_transform ビデオ変換を適用します。
intel_vvp_warp_bypass ビデオ処理をバイパスします。
intel_vvp_warp_reset_skip_ram スキップRAMページをリセットします。
intel_vvp_warp_check_easy_warp_capable ワープチャネルがEasy warpを実行できるかどうかを確認します。
intel_vvp_warp_set_easy_warp 簡単なワープ変換を設定します。
intel_vvp_warp_set_output_latency ワープ出力レイテンシを設定します。
intel_vvp_warp_get_debug_register ワープ・デバッグレジスターの内容を取得します。
intel_vvp_warp_get_input_debug_register ワープ入力デバッグレジスターの内容を取得します。
intel_vvp_warp_get_output_debug_register ワープ出力デバッグレジスターの内容を取得します。
intel_vvp_warp_get_engine_debug_register ワープ・エンジン・デバッグレジスターの内容を取得します。
intel_vvp_warp_get_engine_status ワープエンジンの現在のステータスフラグを取得します。

intel_vvp_warp_init_instance

int intel_vvp_warp_init_instance( intel_vvp_warp_instance_t* instance, intel_vvp_warp_base_t base)
説明
intel_vvp_warpドライバーインスタンスを初期化します。
引数
インスタンス – intel_vvp_warpソフトウェア・ドライバー・インスタンス構造体へのポインター
ベース – ハードウェア・アクセス・ハンドラー。Nios IIなどのベアメタル環境では、CPUバス上のintel_vvp_warp IPの物理アドレスを表す32ビットの符号なし整数として定義されます。
戻り値
成功した場合はゼロ、それ以外の場合は負の整数

intel_vvp_warp_create_channel intel_vvp_warp_create_double_channel

intel_vvp_warp_channel_t* intel_vvp_warp_create_channel(intel_vvp_warp_instance_t *instance, uint32_t input_idx, uint32_t engine_idx, uint32_t output_idx) intel_vvp_warp_channel_t* intel_vvp_warp_create_double_channel(intel_vvp_warp_instance_t *instance, uint32_t input_idx, uint32_t engine1_idx, uint32_t engine2_idx, uint32_t output_idx)
説明
ビデオ処理チャネルを作成します。関数はハードウェア・リソースの割り当てを行い、最大3840 x 2160ピクセルのビデオストリームの処理に必要なドライバーデータ構造を初期化します。
引数

インスタンス – 初期化されたintel_vvp_warp_instance_t構造体へのポインター

input_idx, engine_idx, engine2_idx, ouput_idx – このチャネルで使用するワープIP入力、エンジン、および出力のインデックス

単一のワープIPをコンフィグレーションして、複数の入力、出力、および処理エンジンブロックを提供できます。これらのブロックは、ブロックのインデックスを使用して、任意にビデオ処理チャネルにグループ化されます。

インデックスは0..num_inputs (それぞれnum_outputsまたはnum_engines) の範囲内である必要があります。ドライバー・インスタンスを初期化した後、intel_vvp_warp_instance_t構造体を通じてnum_inputs、num_outputs、およびnum_enginesを取得できます。

戻り値
成功した場合は初期化されたintel_vvp_warp_channel_t構造体への有効なポインター、それ以外の場合はヌルポインター

intel_vvp_warp_create_easy_warp_channel

intel_vvp_warp_channel_t* intel_vvp_warp_create_easy_warp_channel(intel_vvp_warp_instance_t *instance, uint32_t input_idx, uint32_t output_idx)
説明
簡単なワープビデオ処理チャネルを作成します。この関数は、ハードウェア・リソースの割り当てを行い、簡単なワープ・コンフィグレーションを使用して最大3840x2160ピクセルまでのビデオストリームを処理するために必要なドライバーデータ構造を初期化します。
引数

インスタンス – 初期化されたintel_vvp_warp_instance_t構造体へのポインター

input_idx、ouput_idx – このチャネルで使用するワープIP入力と出力のインデックス

戻り値
成功した場合は初期化されたintel_vvp_warp_channel_t構造体への有効なポインター、それ以外の場合はヌルポインター

intel_vvp_warp_add_engine_to_channel

int intel_vvp_warp_add_engine_to_channel(intel_vvp_warp_channel_t* channel, uint32_t engine_idx)
説明

既存のチャネルにワープエンジンを追加します。

Warp IPを使用すると、複数のエンジン間でビデオ処理を分割できます。この機能は、すでに割り当てられているチャネルに追加のエンジンを追加し、それに応じてドライバーとチャネルのデータ構造を更新します。

引数

インスタンス – intel_vvp_warソフトウェア・ドライバー・インスタンス構造体へのポインター

engine_idx – チャネルに追加するワープIPエンジンのインデックス

戻り値
成功した場合はゼロ、それ以外の場合は負の整数

intel_vvp_warp_free_channel

void intel_vvp_warp_free_channel(intel_vvp_warp_channel_t* channel)
説明
ビデオ処理チャネルを削除し、それに割り当てられたハードウェア・リソースとドライバーデータ構造を解放します。
引数
チャネル – 初期化されたintel_vvp_warp_channel_t構造体への有効なポインター
戻り値
なし

intel_vvp_warp_configure_channel

int intel_vvp_warp_configure_channel(intel_vvp_warp_channel_t* channel, intel_vvp_warp_channel_config_t* cfg)
説明
入力/出力解像度、フレームバッファーの位置などの必要なパラメーターを指定して、ビデオ処理チャネルのデータ構造と割り当てられたハードウェアをコンフィグレーションします。
引数

チャネル – 初期化されたビデオ処理チャネルへの有効なポインター

cfg – 初期化されたintel_vvp_warp_channel_config_t構造体への有効なポインター

戻り値
成功した場合はゼロ、それ以外の場合は負の整数

intel_vvp_warp_apply_transform

int intel_vvp_warp_apply_transform(intel_vvp_warp_channel_t* channel, intel_vvp_warp_data_t* data)
説明
提供されたワープデータ係数を使用するようにチャネルをコンフィグレーションしてビデオのワープを開始します。
引数

チャネル – 初期化されたビデオ処理チャネルへの有効なポインター

データ – 初期化されたintel_vvp_warp_data_t構造体への有効なポインター

戻り値
成功した場合はゼロ、それ以外の場合は負の整数

intel_vvp_warp_bypass

int intel_vvp_warp_bypass(intel_vvp_warp_channel_t* channel, uint32_t bypass, uint32_t skip_ram_page, uint32_t width, uint32_t height

説明
入力ビデオを処理せずにそのまま表示するビデオバイパスをイネーブルまたはディスエーブルします。
引数

チャネル – 初期化されたビデオ処理チャネルへの有効なポインター

バイパス – ビデオバイパスをイネーブルするにはゼロ以外の値、ディスエーブルするにはゼロ

skip_ram_page – バイパスをイネーブル/ディスエーブルした後に使用するスキップRAMページの数

幅、高さ – 必要に応じて出力解像度を上書きします。幅と高さは両方とも0以外である必要があります。通常、ビデオバイパスをイネーブルするときに入力解像度と一致させるために使用します。

戻り値
成功した場合はゼロ、それ以外の場合は負の整数

intel_vvp_warp_reset_skip_ram

void intel_vvp_warp_reset_skip_ram(intel_vvp_warp_channel_t* channel, uint32_t skip_ram_page)
説明

スキップRAMページをリセットし、すべての値をゼロに設定します。

スキップRAMページは、intel_vvp_warp_apply_transform() の一部としてプログラムされます。使用シナリオによっては、スキップRAMを明示的にリセットする必要がある場合があります。この関数はそれを行うことが可能です。

引数

チャネル – 初期化されたビデオ処理チャネルへの有効なポインター

ram_page – RAMページのスキップおよびリセット

戻り値
なし

intel_vvp_warp_check_easy_warp_capable

int intel_vvp_warp_check_easy_warp_capable(intel_vvp_warp_channel_t* channel)
説明
チャネルが簡単なワープ変換を実行できるかどうかを確認します。
引数
チャネル – 初期化されたビデオ処理チャネルへの有効なポインター
戻り値
チャネルが簡単なワープ変換を実行できる場合は0、それ以外の場合は負の整数

intel_vvp_warp_set_easy_warp

int intel_vvp_warp_set_easy_warp (intel_vvp_warp_channel_t* channel, uint32_t easy_warp)
説明
入力ビデオに簡単なワープ変換を適用します。
引数

チャネル - 初期化された簡単なワープ対応ビデオ処理チャネルへの有効なポインター

easy_warp – 次のようにエンコードされた32ビットの符号なし整数としての、目的の簡単なワープ変換

31 3 2 1 0
予約済み ミラーリング 回転
  • ビット 1:0 Rotationフィールドには次の値を指定できます。
    • 00b – 回転なし;
    • 01b – 反時計回りに90度回転
    • 10b – 180度回転
    • 11b – 反時計回りに270度回転
  • ビット2: 設定されている場合、入力ビデオをミラーリングします。回転と組み合わせる場合、ミラーリングが最初に適用されます。
戻り値
成功した場合はゼロ、それ以外の場合は負の整数

intel_vvp_warp_set_output_latency

void intel_vvp_warp_set_output_latency (intel_vvp_warp_channel_t* channel, uint32_t clock_offset)
説明
ワープ出力の処理開始と出力の開始を、指定されたシステム・クロック・サイクル数だけオフセットします。詳細については、ワープのLowレイテンシーを参照してください。
引数

チャネル – 初期化されたビデオ処理チャネルへの有効なポインター

clock_offset – 出力処理開始をオフセットするシステム・クロック・サイクル数

戻り値
なし

intel_vvp_warp_get_debug_register

uint32_t intel_vvp_warp_get_debug_register (intel_vvp_warp_instance_t* instance, uint32_t reg_offset)
説明
ワープデバッグおよび測定レジスターの内容を読み出します。ワープデバッグおよび測定レジスターを参照してください。
引数

インスタンス – 初期化されたintel_vvp_warp_instance_t構造体へのポインター

reg_offset – ゼロベースのレジスターオフセット。この引数には、次のレジスター・オフセット・マクロを使用します。

マクロ
INTEL_VVP_WARP_DEBUG_MEM_WR_QUEUES0 0
INTEL_VVP_WARP_DEBUG_MEM_WR_QUEUES1 1
INTEL_VVP_WARP_DEBUG_MEM_RD_QUEUES0 2
INTEL_VVP_WARP_DEBUG_MEM_RD_QUEUES1 3
戻り値
reg_offset引数で指定されたワープデバッグおよび測定レジスターの現在の内容

intel_vvp_warp_get_input_debug_register

uint32_t intel_vvp_warp_get_input_debug_register (intel_vvp_warp_instance_t* instance, uint32_t input_idx, uint32_t reg_offset)
説明
ワープ入力デバッグおよび測定レジスターの内容を読み出します。ワープデバッグおよび測定レジスターを参照してください。
引数

インスタンス – 初期化されたintel_vvp_warp_instance_t構造体へのポインター

input_idx – アクセスするワープIP入力のインデックス

reg_offset – ゼロベースのレジスターオフセット。この引数には、次のレジスター・オフセット・マクロを使用します。

マクロ
INTEL_VVP_WARP_DEBUG_INPUT_FRAME_COUNT 0
INTEL_VVP_WARP_DEBUG_INPUT_FRAME_PERIOD 1
戻り値
reg_offset引数で指定されたワープ入力デバッグおよび測定レジスターの現在の内容

intel_vvp_warp_get_output_debug_register

uint32_t intel_vvp_warp_get_output_debug_register (intel_vvp_warp_instance_t* instance, uint32_t output_idx, uint32_t reg_offset)
説明
ワープ出力デバッグおよび測定レジスターの内容を読み出します。ワープデバッグおよび測定レジスターを参照してください。
引数

インスタンス – 初期化されたintel_vvp_warp_instance_t構造体へのポインター

output_idx – アクセスするワープIP出力のインデックス

reg_offset – ゼロベースのレジスターオフセット。この引数には、次のレジスター・オフセット・マクロを使用します。

マクロ
INTEL_VVP_WARP_DEBUG_OUTPUT_FRAME_COUNT 0
INTEL_VVP_WARP_DEBUG_OUTPUT_FRAME_PERIOD 1
戻り値
reg_offset引数で指定されたワープ出力デバッグおよび測定レジスターの現在の内容

intel_vvp_warp_get_engine_debug_register

uint32_t intel_vvp_warp_get_engine_debug_register (intel_vvp_warp_instance_t* instance, uint32_t engine_idx, uint32_t reg_offset)
説明
ワープ出力デバッグおよび測定レジスターの内容を読み出します。ワープデバッグおよび測定レジスターを参照してください。
引数

インスタンス – 初期化されたintel_vvp_warp_instance_t構造体へのポインター

engine_idx – アクセスするワープIPエンジンのインデックス

reg_offset – ゼロベースのレジスターオフセット。この引数には、次のレジスター・オフセット・マクロを使用します。

マクロ
INTEL_VVP_WARP_DEBUG_ENGINE_FRAME_COUNT 0
INTEL_VVP_WARP_DEBUG_ENGINE_FRAME_PERIOD 1
INTEL_VVP_WARP_DEBUG_ENGINE_BUSY_CYCLES 2
INTEL_VVP_WARP_DEBUG_ENGINE_FRAME_DELAY 3
INTEL_VVP_WARP_DEBUG_ENGINE_RUN_STATUS 4
INTEL_VVP_WARP_DEBUG_ENGINE_CACHE_LOADS 5
戻り値
reg_offset引数で指定されたワープ・エンジン・デバッグおよび測定レジスターの現在の内容

intel_vvp_warp_get_engine_status

uint32_t intel_vvp_warp_get_engine_status (intel_vvp_warp_instance_t* instance, uint32_t engine_idx)
説明
ワープエンジンの現在のステータスフラグを取得します。 ワープデバッグおよび測定レジスターを参照してください。
引数

インスタンス – 初期化されたintel_vvp_warp_instance_t構造体へのポインター

engine_idx – アクセスするワープIPエンジンのインデックス

戻り値
エンジン・ステータス・フラグの現在の値。フラグは32ビットの整数です。
ビット フラグ 説明
0 Engine failed to complete frame エンジンがフレームの処理を完了できなかったことを示すスティッキーフラグ。フラグは読み出されるとクリアされます。

データ構造と型

intel_vvp_warp_base_t

説明
ワープIPのレジスター読み出し動作と書き込み動作を実行するためのプラットフォーム固有の型。Nios IIプロセッサーなどのベアメタル環境では、CPUバス上のワープIPの物理アドレスを表す32ビットの符号なし整数として定義されます。

intel_vvp_warp_instance

typedef struct intel_vvp_warp_instance
{
	intel_vvp_warp_base_t base;
	uint32_t num_inputs;
	uint32_t num_engines;
	uint32_t num_outputs;
} intel_vvp_warp_instance_t;
 
    
説明
ドライバーの主なデータ構造
メンバー

ベース – ワープIPアクセスハンドラー

num_inputs – 使用可能なワープ入力の数

num_engines – 使用可能なワープエンジンの数

num_outputs – 使用可能なワープ出力の数

intel_vvp_warp_channel

typedef struct intel_vvp_warp_channel
{
 uint32_t in_use;
 uint32_t idx;
 struct intel_vvp_warp_instance* instance;
 uint32_t num_engines;
 uint32_t ram_addr;
} intel_vvp_warp_channel_t
説明
ビデオ処理チャネルのリソースとパラメーターの構造
引数
戻り値

in_use – チャネルが割り当てられ初期化されている場合はゼロ以外の値。それ以外の場合はゼロ。

idx – チャネルのインデックス番号

インスタンス – チャネルが属する親ドライバー・インスタンスへのポインター

num_engines – チャネルのワープエンジンの数

ram_addr - チャネル・フレーム・バッファーに割り当てられたRAM領域のベースアドレス

intel_vvp_warp_channel_config

typedef struct intel_vvp_warp_channel_config
{
 uint32_t ram_addr;
 intel_vvp_warp_cs_t cs;
  uint32_t width_input;
 uint32_t height_input;
 uint32_t width_output;
 uint32_t height_output;
 uint8_t lfr;
} intel_vvp_warp_channel_config_t
説明
ビデオ処理チャネルのコンフィグレーション
メンバー

ram_addr - チャネル・フレーム・バッファーに割り当てられたRAM領域のベースアドレス

cs – ビデオ・カラースペース。初期化する必要があります。

  • 00b = YUV
  • 01b = RGB縮小範囲
  • 10b = RFG全範囲

width_input、height_input、width_output、height_output – 入力および出力ビデオの寸法

lfr – 低フレーム・レート・フォールバック。0x0に初期化する必要があります。

intel_vvp_warp_data

typedef struct intel_vvp_warp_data
{
 uint32_t num_engines;
 uint8_t* _skip_megablock_data;
 uint32_t _skip_ram_page;
 intel_vvp_warp_engine_data_t engine_data[0];
} intel_vvp_warp_data_t;
説明
ワープデータ記述子
メンバー

num_engines – このセットに含まれるエンジンの数に関するデータ

_skip_megablock_data – ブランク・スキップ・ロジックのデータ。intel_vvp_warp_dataライブラリーによって生成されます。WarpData構造を参照してください。

_skip_ram_page – この変換に使用するブランクのスキップページ。Warp IPは、8つのブランクのスキップページを提供します。さまざまな変換のブランクのスキップデータを保持し、必要に応じてページを切り替えることができます。

engine_data – 各エンジンのワープ係数を含むintel_vvp_warp_engine_data_t構造体の配列

intel_vvp_warp_engine_data

typedef struct intel_vvp_warp_engine_data
{
 uint32_t mesh_addr;
 uint32_t mesh_size;
 uint32_t filter_addr;
 uint32_t filter_size;
 uint32_t fetch_addr;
 uint32_t fetch_size;
 uint32_t start_h;
 uint32_t start_v;
 uint32_t end_h;
 uint32_t end_v;
 uint32_t mesh_stride;
} intel_vvp_warp_engine_data_t;
説明
個々のワープエンジンのワープ係数記述子
メンバー

mesh_addr – メモリー内のメッシュ係数のアドレス

mesh_size – メッシュ係数のサイズ

filter_addr – メモリー内のフィルター係数のアドレス

filter_size – フィルター係数のサイズ

fetch_addr – メモリー内のフェッチ係数のアドレス

fetch_size – メッシュ係数のサイズ

start_h、start_v、end_h、end_v – エンジン処理領域。内部的にワープエンジンは、左上隅をブロック [0, 0] として、16x8ピクセルブロックでビデオを処理します。処理領域は、水平方向と垂直方向の開始ブロック・インデックスと終了ブロック・インデックスによって定義されます。

mesh_stride – メッシュデータ行あたりのワープ・メッシュ・ノードの数 (4から1を引いた数)。必要なメッシュストライドは、intel_vvp_warp_dataライブラリーによって計算されます。

intel_vvp_warp_data

このソフトウェア・コンポーネントは、定義済みの形式の変換メッシュを使用して、ワープIPに必要なメッシュ、キャッシュ、およびフィルター係数データを生成します。

表 860.   intel_vvp_warp_data APIのリファレンス
名前 説明
WarpDataGenerator intel_vvp_warp_dataコンポーネントのコンストラクター
GenerateData ワープデータを生成します。
GenerateLatencyParams 特定のワープに対して推奨される最小レイテンシー設定を生成します。
AllowExtraCompression 2:1の圧縮制限を超える変換のデータ生成を許可します。
GetLastErrorCode GenerateData() の最新の呼び出しに対する警告またはエラーコードを取得します。
GetErrorString 引数として渡されたエラーコードを説明する文字列を取得します。
表 861.   intel_vvp_warp_data ヘルパー関数
名前 説明
GetHwContext データ生成に必要なワープIPパラメーターを含むオブジェクトを作成します。
GenerateDriverData ワープドライバーに必要なワープ・データ・オブジェクトを作成して入力します。

WarpDataGenerator

WarpDataGenerator
説明
intel_vvp_warp_dataソフトウェア・コンポーネントのメイン・オブジェクトを構築します。
引数
なし
戻り値
なし

GenerateData

WarpDataPtr GenerateData(const WarpDataContext& ctx, const WarpMeshSet& mesh_set)
説明
提供された変換メッシュ、ビデオ解像度、必要なIPパラメーターを使用してワープデータ係数を生成します。2つのワープエンジンが使用可能な場合、ワークロードは均等に分割され、各エンジンが画像の左半分または右半分を処理します。
引数

ctx – データを生成するために必要なビデオ解像度とIPパラメーターに関する情報を含むWarpDataContextオブジェクトのインスタンスへのリファレンス

mesh_set – 変換メッシュのセットへのリファレンス

戻り値
成功した場合、関数はWarpDataオブジェクトへの有効なスマートポインターを返します。エラーの場合はnullptrオブジェクトが返されます。IPがフレームの任意の領域で2:1を超えるダウンスケール比を検出した場合、nullptrが返されます。

GenerateLatencyParams

WarpLatencyParamsGenerateLatencyParams(const WarpDataContext& ctx, const WarpDataPtr warp_data, uint32_t system_clock, uint32_t video_clock, uint32_t full_height, uint32_t frame_rate)const
説明
特定のワープに対して推奨される最小ワープ・レイテンシー設定を生成します。生成された設定は、Lowレイテンシーの処理用のビデオ・パイプラインをセットアップするために使用する必要があります。Lowレイテンシーを参照してください。
引数
ctx – データを生成するために必要なビデオ解像度とIPパラメーターに関する情報を含むWarpDataContextオブジェクトのインスタンスへのリファレンス

warp_data – 有効なWarpDataオブジェクトへのスマートポインター

system_clock – システムクロック周波数

video_clock – ビデオクロック周波数

full_height – 出力ビデオの全高 (垂直ブランキングを含む)

frame_rate – 出力フレームレート

戻り値

指定されたワープに対して推奨される最小レイテンシー設定を含む初期化された WarpLatencyParams オブジェクト

AllowExtraCompression

void AllowExtraCompression(bool v)
説明
2:1を超える圧縮によるワープを可能にします。デフォルトでは、ソフトウェアが出力画像の任意の領域で2:1を超える圧縮を検出すると、ワープデータは生成されません。この機能により、ユーザーはこの制限を解除できます。
引数
v - 追加の圧縮を許可する場合はTrue、許可しない場合はFalse
戻り値
なし

GetLastErrorCode

uint32_t GetLastErrorCode()const
説明
GenerateData() への最新の呼び出しのエラーコードまたは警告コードを返します。ソフトウェアは、数値エラーコードを設定して、ワープデータの生成が失敗したか、重要な状態が検出されたかどうかを示します。この関数を使用して、最新のエラーコードを取得します。
引数
なし
戻り値

戻り値として考えられるのは、次のとおりです。

表 862.  戻り値
マクロ 説明
Success 0 データが正常に生成されました。
BlockCacheUsageHigh 1 ブロックキャッシュの使用量が多すぎます。出力が不安定になる可能性があります。
DataAllocError 2 ワープデータにメモリーを割り当てることができません。
CompressionTooHigh 3 ソフトウェアは2:1を超える圧縮を検出しました。
BlockCacheFull 4 要求されたワープは使用可能なブロックキャッシュをすべて使用します。
FetchLogicError 5 ブロックキャッシュ制御ロジックでエラーが検出されました。
OutOfFetchMem 6 要求されたワープにはブロックキャッシュ・フェッチが多すぎます。
Unknown 7 その他のエラー

GetErrorString

std::string GetErrorString(const uint32_t error_code)
          const
説明
GetLastErrorCode() で取得したエラーコードを説明する文字列を返します。
引数
error_code - GetLastErrorCode() によって返される整数エラー コード値
戻り値
エラーコードのテキスト記述を含むstd::string型のオブジェクト

データ構造と型

WarpMesh

class WarpMesh
{
public:
 WarpMesh(uint32_t width, uint32_t height, uint32_t step);
 uint32_t GetStep();
 uint32_t GetVNodes();
 uint32_t GetHNodes();
 mesh_node_t* GetRow(uint32_t v);
}
説明

ユーザー定義の変換メッシュを含むクラス

メッシュは、本質的には出力画像と入力画像間のマッピングを定義するルックアップ・テーブルです。メッシュ (ノード) の各エントリーは、出力画像内の位置を表し、入力画像の関連するx座標とy座標を含みます。メッシュノード間のステップはIPによって定義されます。クラスはメッシュデータの内部ストレージを自動的に管理します。

メンバー

WarpMesh(uint32_t width, uint32_t height, uint32_t step) - Constructor

引数: 幅、高さ – 出力画像のサイズ

ステップ – メッシュノード間のピクセル単位の距離。IPは水平方向と垂直方向に同じ距離を使用します。IPは8ピクセルのステップのみをサポートし、他のすべての値は無視します。

uint32_t GetStep() - メッシュノード間の距離を返します。

uint32_t GetVNodes()

uint32_t GetHNodes() - メッシュ内の垂直/水平ノードの数をそれぞれ返します。

mesh_node_t* GetRow(uint32_t v) - メッシュ行へのポインターを返します。ポインター演算またはインデックスを使用して行内の個々のノードにアクセスします。

引数: v – メッシュ行のインデックス番号

mesh_node_t

typedef struct mesh_node
{
 int32_t _x;
 int32_t _y;
} mesh_node_t
説明
メッシュ内の個々のエントリーを表す構造
メンバー
_x、_y – このノードがマップする入力画像の座標。IPは各値を32ビットの符号付き整数で表し、最下位4ビットにはサブピクセル精度の小数部が含まれます。

WarpMeshPtr

WarpMeshPtr = std::shared_ptrを使用する <WarpMesh>
説明
メッシュクラスのスマートポインター・ラッパーの型エイリアス

WarpMeshSet

using WarpMeshSet = std::vector<WarpMeshPtr>
説明
複数のメッシュをグループ化できるコンテナの型エイリアス

WarpDataContext

struct WarpDataContext
{
	WarpDataContext(const WarpHwContextPtr hw, uint32_t wi, uint32_t hi, uint32_t wo, uint32_t ho);
}
説明
データを生成するために必要な画像寸法とIPパラメーターを含む構造。2つのワープエンジンが使用可能な場合、IPはワークロードを均等に分割し、各エンジンが画像の左半分または右半分を処理するようにします。
メンバー

WarpDataContext(const WarpHwContextPtr hw, uint32_t wi, uint32_t hi, uint32_t wo, uint32_t ho) - コンストラクター。コンストラクターは、変更してはならない提供された引数を使用して、残りのデータメンバーを初期化します。

引数: hw – 関連するIPパラメーターを含むWarpHwContextオブジェクトのインスタンスへのスマートポインター

wi, hi – 入力画像の幅と高さ

wo, ho – 出力画像の幅と高さ

_engine_hblocks – 各エンジンが水平方向に処理する16x8ピクセルブロックの数

_engine_mesh_stride – 各エンジンが処理するメッシュデータ行あたりのメッシュノードの数

_h_blocks_out – 指定された出力幅のフレーム内の16x8ブロックの水平合計数

_v_blocks_out – 指定された出力高さのフレーム内の16x8ブロックの垂直合計数

WarpData

class WarpData
{
 virtual uint32_t _GetEngines() const;
 virtual const uint8_t* GetSkipMegablockData() const;
 virtual const_WarpEngineData* GetEngineData(const uint32_t engine) const;
};
説明

生成されたワープ係数とデータにアクセスするためのインターフェイス・クラス

メンバー

GetEngines() – ワープ・エンジン・データ・オブジェクトの数を返します。値は常にMAX_ENGINES以下です。

GetSkipMegablockData() – スキップ・ブランク・ロジック・データへのポインターを返します。

GetEngineData() - 個々のWarpEngineDataオブジェクトへのポインターを返します。

WarpEngineData

class WarpEngineData
{
virtual uint32_t GetMeshEntries() const;
virtual uint32_t GetFilterEntries() const;
virtual uint32_t GetFetchEntries() const;

virtual const mesh_entry_t* GetMeshData() const;
 virtual const filter_entry_t* GetFilterData() const;
 virtual const fetch_entry_t* GetFetchData() const;
};
説明
個々のワープエンジンのデータ係数にアクセスするためのインターフェイス・クラス
メンバー

GetMeshEntries() – データブロック内のメッシュエントリーの数を返します。

GetFilterEntries() – データブロック内のフィルターエントリーの数を返します。

GetFetchEntries() – データブロック内のフェッチエントリーの数を返します。

GetMeshData() – メッシュデータへのポインターを返します。

GetFilterData() – フィルタデータへのポインターを返します。

GetFetchData() – フェッチデータへのポインターを返します。

mesh_entry_t、filter_entry_t、fetch_entry_t

説明

個々のデータブロックにアクセスし、ブロック・データ・サイズをバイト単位で計算するときに使用するエイリアスを入力します。

WarpLatencyParams

struct WarpLatencyParams
{
 uint32_t _output_latency;
 uint32_t _total_latency;
};
説明

構造体には、Lowレイテンシー処理のための推奨パイプライン・レイテンシー設定が含まれています。Warp IPのレイテンシーを参照してください。

メンバー

_output_latency - intel_vvp_warp_set_output_latency() ドライバー呼び出しで使用される推奨ワープ出力クロックオフセット。値は core_clock クロックサイクル単位です。

_total_latency – 入力フレームと出力フレーム間の推奨最小オフセット。値は axi4s_vid_out_0_clock クロックサイクル単位です。

ヘルパー関数

GetHwContext

WarpHwContextPtr GetHwContext(intel_vvp_warp_channel_t* ch)
説明
データを生成するために必要なワープIPパラメーターを含むオブジェクトを作成します。関数はワープ・チャネル・ドライバー構造体を使用して必要なすべてのIPパラメーターを抽出し、GenerateData() 呼び出しに必要なWarpHwContext型のオブジェクトを作成します。
引数
ch - 初期化されたintel_vvp_warp_channel_t構造体オブジェクトへの有効なポインターmesh_set - 変換メッシュのセットへのリファレンス
戻り値
成功した場合、関数はWarpHwContextオブジェクトへの有効なスマートポインターを返します。失敗した場合はnullptrオブジェクトが返されます。

GenerateDriverData

WarpDriverDataPtr GenerateDriverData(const WarpDataContext& ctx, const WarpDataPtr user_data, const uint32_t coef_base_address, const uint32_t skip_ram_page)
説明

ワープを適用するためにワープドライバーのメソッド intel_vvp_warp_apply_transform() で必要なタイプ intel_vvp_warp_data_t のオブジェクトを作成して入力します。

引数
ctx - IPがワープデータを生成するために使用するビデオ解像度とパラメーターに関する情報を含むWarpDataContextオブジェクトへのリファレンス
user_data - GenerateData() 呼び出しによって生成されたワープデータ
coef_base_address - ワープが配置されるFPGAアクセス可能なRAM内のベースアドレス
skip_ram_page - このワープで使用するブランクのスキップRAMページの番号
戻り値
成功すると、関数は intel_vvp_warp_data_t オブジェクトへの有効なスマートポインターを返します。失敗するとnullptrオブジェクトが返されます。ワープを適用する前に、クライアントは返された intel_vvp_warp_data_t オブジェクトで指定された位置にワープデータを転送する必要があります。

intel_vvp_warp_mesh

このリファレンス・ソフトウェア・コンポーネントを使用すると、一般的なアフィン変換、透視変換、放射状歪み補正、および一連の曲線によって定義された任意の変換のワープメッシュ例を生成できます。

コンポーネントの主なオブジェクトは WarpConfigurator です。 WarpConfigurator は、ホスト・アプリケーションが独立して使用できる次の3種類のワープ・コンフィグレーションを提供します。

図 113. 固定ワープ

固定ワープ・コンフィグレーションでは、平行移動、回転、スケーリング、遠近法の補正、放射状歪み (魚眼) 補正などのアフィン変換のセットが、対応するAPI呼び出しを使用して個別にコンフィグレーションされます。

図 114. 4xコーナーワープ

4xコーナーのコンフィグレーションでは、画面領域内またはその周囲に配置された4つのポイントを使用して、アフィン変換とパースペクティブ変換が定義されます。このコンフィグレーションでは、放射状の歪み補正も適用できます。

図 115. 任意のワープ

任意の変換は、固定数の制御点 (ノット) によって制御される曲線のセットによって定義されます。

ワープメッシュは、特定の入力および出力ビデオ解像度に関連付けられています。ユーザーは、メッシュを生成する前にこれらを適切に設定する必要があります。

オフセット、サイズ、位置はピクセル単位の絶対値として受け入れられます。サブピクセル精度を可能にするために、浮動小数点型が使用されます。内部的には、これらのパラメーターは現在の出力解像度を使用して [0..1] の範囲に正規化され、この形式で保持されます。出力解像度が変更された場合、ワープは自動的に新しい出力解像度に適合します。

表 863.  intel_vvp_warp_mesh APIのリファレンス
名前 説明
WarpConfigurator intel_vvp_warp_meshコンポーネントのコンストラクター
SetInputResolution、GetInputResolution 入力画像の解像度を設定または取得します。
SetOutputResolution、GetOutputResolution 出力画像の解像度を設定または取得します。
GenerateMeshFromFixed 固定ワープのコンフィグレーションを使用してメッシュを生成します。
GenerateMeshFromCorners 4xコーナーワープのコンフィグレーションを使用してメッシュを生成します。
GenerateMeshFromArbitrary 任意のワープのコンフィグレーションを使用してメッシュを生成します。
SetHSize、GetHSize 画像の水平サイズを設定または取得します。
SetVSize、GetVSize 画像の垂直サイズを設定または取得します。
SetHOffset、GetHOffset 画像の水平オフセットを設定または取得します。
SetVOffset、GetVOffset 画像の垂直オフセットを設定または取得します。
SetRotate、GetRotate 回転角度を設定または取得します。
SetHMirror、GetHMirror 水平ミラーリングを設定または取得します。
SetVMirror、GetVMirror 垂直ミラーリングを設定または取得します。
SetZoom、GetZoom ズーム率を設定または取得します。
SetHKeystone、GetHKeystone 水平キーストーン角度を設定または取得します。
SetVKeystone、GetVKeystone 垂直キーストーン角度を設定または取得します。
SetFOV、GetFOV ビューのフィールドを設定または取得します。
SetVAxisOffset、GetVAxisOffset 垂直軸オフセットを設定または取得します。
SetPreRadial、GetPreRadial ラジアル歪み補正パラメーターを設定または取得します。
SetCorner、GetCorner コーナー位置を設定または取得します。
SetArbitraryKnotsNum、GetArbitraryKnotsNum 任意のコントロール・グリッドのサイズを設定または取得します。
SetArbitraryKnot、GetArbitraryKnot 任意の制御ノットの位置を設定または取得します。
SetMaintainRatio、GetMaintainRatio アスペクト比維持設定を設定または取得します。
SetShrinkToFit、GetShrinkToFit 縮小してフィットする設定を設定または取得します。

WarpConfigurator

WarpConfigurator(WarpHwContextPtr hw_ctx) 
説明
intel_vvp_warp_meshソフトウェア・コンポーネントのメイン・オブジェクトを構築します。
引数
hw_ctx - 関連するIPパラメーターを含むWarpHwContextオブジェクトのインスタンスへのスマートポインター
戻り値
なし

SetInputResolution、GetInputResolution、SetOutputResolution、GetOutputResolution

void SetInputResolution(const uint32_t width, const uint32_t height) void GetInputResolution(uint32_t& width, uint32_t& height) void SetOutputResolution(const uint32_t width, const uint32_t height) void GetOutputResolution(uint32_t& width, uint32_t& height)
説明
入力および出力画像の解像度を設定または取得します。
引数

幅 – 画像の幅

高さ – 画像の高さ

戻り値
なし

GenerateMeshFromFixed、GenerateMeshFromCorners、GenerateMeshFromArbitrary

WarpMeshPtr GenerateMeshFromFixed() WarpMeshPtr GenerateMeshFromCorners() WarpMeshPtr GenerateMeshFromArbitrary()
説明
固定、4xコーナー、または任意のコンフィグレーションを使用して、変換メッシュを生成します。
引数
なし
戻り値
生成された変換メッシュを含むWarpMesh型のオブジェクトへのスマートポインター (WarpMeshの説明についてはintel_vvp_dataインターフェイスの項を参照)

SetHSize、GetHSize、SetVSize、GetVSize

void SetHSize(float pixels) float GetHSize() void SetVSize(float pixels) float GetVSize()
説明
画像の水平サイズと垂直サイズを設定または取得します。これは、画像を水平/垂直軸に沿って拡大縮小することと同じです。
引数
ピクセル – 画像の水平または垂直のサイズ
戻り値
画像の水平または垂直サイズによって異なる

SetHOffset、GetHOffset、SetVOffset、GetVOffset

void SetHOffset(float pixels) float GetHOffset() void SetVOffset(float pixels) float GetVOffset()
説明
画像の水平および垂直オフセットを設定または取得します。
引数
ピクセル – 画像の水平または垂直オフセットによって異なる
戻り値
画像の水平または垂直オフセットによって異なる

SetRotate、GetRotate

void SetRotate(float angle) float GetRotate()
説明
画像の回転角度を度単位で設定または取得します。画像は中央を軸に回転します。
引数
角度 – 回転角度 (度)
戻り値
回転角度 (度)

SetHMirror、GetHMirror、SetVMirror、GetVMirror

void SetHMirror(bool v) bool GetHMirror() void SetVMirror(bool v) bool GetVMirror()
説明
水平軸と垂直軸に沿って画像のミラーリングを設定または取得します。
引数
v – ミラーリングをイネーブルする場合はTrue、ディスエーブルする場合はFalse
戻り値
ミラーリングがイネーブルの場合はTrue、そうでない場合はFalse

SetZoom、GetZoom

void SetZoom(float zoom) float GetZoom()
説明
画像のズーム値を設定または取得します。
引数
ズーム – 値が1より大きい場合はズームイン、値が1より小さい場合はズームアウト
戻り値
コンフィグレーションされたズーム値

SetHKeystone、GetHKeystone、SetVKeystone、GetVKeystone

void SetHKeystone(float angle) float GetHKeystone() void SetVKeystone(float angle) float GetVKeystone()
説明
水平および垂直台形補正角度に応じて設定または取得します。
引数
角度 - プロジェクターが投影面の法線に対して傾いている水平角度または垂直角度 (度単位)
戻り値
プロジェクターの傾斜角度は水平または垂直

SetFOV、GetFOV

void SetFOV(float angle) float GetFOV()
説明
Viewのフィールドを設定または取得します。Viewのフィールドはプロジェクターのビーム角度を表します。この値は正しいキーストーン補正に必要です。デフォルト値は30°です。
引数
角度 - プロジェクターのビーム角度 (度)
戻り値
プロジェクターのビーム角度 (度)
図 116. Viewのフィールド

SetVAxisOffset、GetVAxisOffset

void SetVAxisOffset(float v) float GetVAxisOffset()
説明
投影面の法線から光軸の垂直オフセットを設定または取得します。この値は、正しいキーストーン補正に必要です。一部のプロジェクター、特に短焦点モデルでは、ビームが壁に対してすでに角度をなしています。キーストーン補正を計算するときは、この初期角度を考慮してください。提供される値は、絶対オフセットを画像の高さで割ったものです。デフォルト値は0です。
引数
v - 垂直軸オフセットの値
戻り値
垂直軸オフセットの値
図 117. 垂直オフセット

SetPreRadial、GetPreRadial

void SetPreRadial(float x, float y, float k1, float k2) void GetPreRadial(float& x, float& y, float& k1, float& k2)
説明
ラジアル歪み補正パラメーターを設定または取得します。ソフトウェアはBrown-Conrady歪みモデルを使用します。
引数

x、y – 歪みの中心

k1、k2 – 1番目と2番目の歪み係数

戻り値
なし

SetCorner、GetCorner

void SetCorner(const ECornerId& corner, float pixel_x, float pixel_y) void GetCorner(const ECornerId& corner, float& pixel_x, float& pixel_y)
説明
4xコーナーワープのコンフィグレーションの個々のコーナーポイントの位置を設定または取得します。
引数

コーナー – コーナー識別子

pixel_x、pixel_y – コーナーの水平および垂直座標

戻り値
なし

SetArbitraryKnotsNum、GetArbitraryKnotsNum

void SetArbitraryKnotsNum(uint32_t num) uint32_t GetArbitraryKnotsNum()
説明
任意のワープの制御点 (ノット) の数を設定または取得します。任意のワープは、NxNグリッドに配置された曲線と制御点のセットによって定義されます。このパラメーターは、このグリッドのサイズを設定します。より簡単にするために、両方の次元の制御点の数は同じになっています。
引数
num – 各次元の制御ノットの数
戻り値
各寸法の制御ノットの数

SetArbitraryKnot、GetArbitraryKnot

void SetArbitraryKnot(const uint32_t idx, const float x, const float y) void GetArbitraryKnot(const uint32_t idx, float& x, float& y)
説明
個々の制御ポイントの絶対位置を設定または取得します。ポイントは左から右、上から下に番号が付けられます。
引数

idx – ゼロベースのポイント・インデックス番号

x、y – 点の水平および垂直座標

戻り値
なし

SetMaintainRatio、GetMaintainRatio

void SetMaintainRatio(bool val) bool GetMaintainRatio()
説明
アスペクト比維持フラグを設定または取得します。設定すると、入力解像度のアスペクト比が維持されます。その結果、出力画像には水平軸または垂直軸に沿って、ブランク領域が生じる可能性があります。
引数
val – 入力アスペクト比を維持する場合はTrue、そうでない場合はFalse
戻り値
現在のアスペクト比設定を維持

SetShrinkToFit、GetShrinkToFit

void SetShrinkToFit(bool val) bool GetShrinkToFit()
説明
縮小して画面に収まるように設定または取得します。設定されている場合、結果の画像はすべての変換を適用した後に縮小され、画面に収まるようにします。設定されていない場合、結果の画像は出力寸法に合わせて切り取られます。このフラグは、固定ワープのコンフィグレーションにのみ関連します。
引数
val – 出力サイズに合わせて結果の画像を縮小する場合はTrue、そうでない場合はFalse
戻り値
現在の縮小設定

データ構造と型

ECornerId

enum ECornerId { 
ETopLeft = 0, 
ETopRight, 
EBottomLeft, 
EBottomRight, 
ETotalCorners, 
};
説明
列挙型は、4xコーナーワープのコンフィグレーション内の個々のコーナーを識別します。