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ユーザーガイドの文書改訂履歴

8.5. 3D LUT IPのソフトウェアAPI

IPには、IPの必要なすべてのパラメーターをコンフィグレーションおよび制御するソフトウェア・ドライバーが含まれています。
図 16. ソフトウェア・ドライバーの使用例
intel_vvp_3d_lut_instance lut_0;
ret = intel_vvp_3d_lut_init(&lut_0, (intel_vvp_core_base)LUT_0_BASE);
if (ret == 0)
{
  /* Load LUT buffer 0 by software */
  if (load_3d_lut(&lut_0, 0) == 0)
  {
    /* Enable LUT processing */
    intel_vvp_3d_lut_enable(&lut_0, true);
  }
  else
  {
    printf("Error loading LUT data: %d\n");
  }
}
else
{
  printf("Error initializing lut_0: %d\n", ret);
}

ドライバーにはロード機能がありません。LUTエントリーデータを入手するには別の方法もあります。最も単純なものは、ソフトウェア・ソースコード内のコンパイル済みの構造からのものです。このメソッドの使用例は、次のとおりです。

int load_3d_lut(intel_vvp_3d_lut_instance* instance, uint8_t buffer)
{
  uint16_t r_idx = 0, g_idx = 0, b_idx = 0;
  uint32_t table_idx = 0;
  while (table_idx < ((sizeof(lut_table)/sizeof(uint16_t)) - 4))
  {
    int result = intel_vvp_3d_lut_load(instance, r_idx, g_idx, b_idx, buffer,
        lut_table[table_idx],
        lut_table[table_idx + 1],
        lut_table[table_idx + 2],
        lut_table[table_idx + 3]);
    if (result != 0)
    {
      return result;
    }
    table_idx += 4;
    if (++r_idx == LUT_TABLE_DIMENSION)
    {
      r_idx = 0;
      if (++g_idx == LUT_TABLE_DIMENSION)
      {
        g_idx = 0;
        if (++b_idx == LUT_TABLE_DIMENSION)
        {
          break;
        }
      }
    }
  }
  return 0;
}

この例では、データはLUTエントリーごとに4つの要素 (4 * lut_dimension³) を含むフラット構造です。

次元とデータテーブルの定義は、次のとおりです。

#DEFINE LUT_TABLE_DIMENSION 17
const uint16_t lut_table[] = {
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000,
0x0050, 0x0050, 0x0050, 0x0000,
0x0079, 0x0079, 0x0079, 0x0000,
0x0092, 0x0092, 0x0092, 0x0000,
0x00A6, 0x00A6, 0x00A6, 0x0000,
0x00B9, 0x00B9, 0x00B9, 0x0000,
/* continues… 4913 lines total */
表 53.  3D LUT IPのAPIリファレンス3D LUT IP用ソフトウェア・ドライバーは、以下のAPI関数を提供します。
名前 説明
intel_vvp_3d_lut_init LUTインスタンスを初期化します。
intel_vvp_3d_lut_enable LUT処理をイネーブルします。
intel_vvp_3d_lut_buffer_select LUTバッファーを選択します。
intel_vvp_3d_lut_load LUTエントリーをロードします。
intel_vvp_3d_lut_get_double_buffered ダブルバッファーのコンフィグレーション・パラメーターを取得します。
intel_vvp_3d_lut_get_input_depth 入力ストリームのビット解像度を取得します。
intel_vvp_3d_lut_get_lut_alpha_channel アルファチャネルのサポート・コンフィグレーション・パラメーターを取得します。
intel_vvp_3d_lut_get_lut_depth LUTストリームのビット解像度を取得します。
intel_vvp_3d_lut_get_dimension LUTのサイズを取得します。
intel_vvp_3d_lut_get_output_depth 出力ストリームのビット解像度を取得します。
intel_vvp_3d_lut_get_pixels_per_clock クロックサイクルごとに送信されるピクセルの数です。

intel_vvp_3d_lut_init

void intel_vvp_3d_lut_init( intel_vvp_3d_lut_instance* instance, intel_vvp_core_base base);
説明
3D LUTインスタンスを初期化します。
引数
インスタンス - 3D LUTソフトウェア・ドライバー・インスタンス構造体へのポインター
ベース - 3D LUT IPのベースアドレスへのポインター
戻り値
成功した場合はゼロ、それ以外の場合は負の整数

intel_vvp_3d_lut_enable

void intel_vvp_3d_lut_enable( intel_vvp_3d_lut_instance* instance, int enable);
説明
LUT処理をイネーブルします。
引数
インスタンス - 3D LUTソフトウェア・ドライバー・インスタンス構造体へのポインター
イネーブル – LUT動作をイネーブルします。
  • 0 – パススルー入力ストリームは変更されません。
  • 1 – LUT処理をイネーブルします。
戻り値
なし

intel_vvp_3d_lut_buffer_select

int intel_vvp_3d_lut_buffer_select( intel_vvp_3d_lut_instance* instance, uint8_t buffer);
説明
LUT行列バッファーを選択します (ダブル・バッファリングをイネーブルする必要あり)
引数
インスタンス - 3D LUTソフトウェア・ドライバー・インスタンス構造体へのポインター
バッファー - 選択されるバッファー (0または1)
戻り値
  • 0 – 動作が成功しました。
  • -1 - バッファー・パラメーターが範囲外であるか、ダブル・バッファリングがコンフィグレーションされていません。

intel_vvp_3d_lut_load

int intel_vvp_3d_lut_load( intel_vvp_3d_lut_instance* instance, uint16_t r_idx, uint16_t g_idx, uint16_t b_idx, uint8_t buffer, uint16_t r_val, uint16_t g_val, uint16_t b_val, uint16_t a_val);
説明
LUTテーブルにエントリーをロードします。パラメーターはテーブルのインデックスとテーブルエントリーのR/G/B/A値を指定します。
引数
インスタンス - 3D LUTソフトウェア・ドライバー・インスタンス構造体へのポインター
r_idx - 赤色のインデックス。範囲0から (LUT寸法 - 1)
g_idx - 緑色のインデックス。範囲 0から (LUT寸法 - 1)
b_idx - 青色のインデックス。範囲 0から (LUT寸法 - 1)
バッファー - 範囲0から1 (ダブル・バッファー・コンフィグレーションの場合)
r_val - 赤色の値。範囲0から (2lut_ Depth - 1)
g_val - 緑色の値。範囲0から (2lut_ Depth - 1)
b_val - 青色の値。範囲0から (2lut_ Depth - 1)
a_val - アルファ値。LUTアルファをイネーブルする必要があります。そうでない場合は、値を0に設定する必要があります。
戻り値
  • 0 - 成功
  • -1 (r_idx/g_idx/b_idxが範囲外)
  • -2 (バッファー・パラメーターが範囲外であるか、ダブル・バッファリングがコンフィグレーションされていない)
  • -3 (アルファ値が設定されているがサポートされていない)
  • -4 (r_val/g_val/b_valが範囲外)

intel_vvp_3d_lut_get_double_buffered

uint8_t intel_vvp_3d_lut_get_double_buffered( intel_vvp_3d_lut_instance* instance);
説明
ダブルバッファリングされたIPコンフィグレーションを取得します。
引数
インスタンス - 3D LUTソフトウェア・ドライバー・インスタンス構造体へのポインター
戻り値
  • 0 (ダブル・バッファー・オプションがコンフィグレーシされていない場合)
  • 1 (ダブル・バッファー・オプションがコンフィグレーシされている場合)

intel_vvp_3d_lut_get_input_depth

uint8_t intel_vvp_3d_lut_get_input_depth( intel_vvp_3d_lut_instance* instance);
説明
入力ストリームのビット解像度を取得します。
引数
インスタンス - 3D LUTソフトウェア・ドライバー・インスタンス構造体へのポインター
戻り値
範囲は8から16 です。値は入力カラープレーンごとのビット数です。

intel_vvp_3d_lut_get_lut_alpha_channel

uint8_t intel_vvp_3d_lut_get_lut_alpha_channel( intel_vvp_3d_lut_instance* instance);
説明

アルファチャネルのサポート・コンフィグレーション・パラメーターを取得します。

引数
インスタンス - 3D LUTソフトウェア・ドライバー・インスタンス構造体へのポインター
戻り値
  • 0 (アルファチャネルが設定されているがサポートされていない場合)
  • 1 (アルファチャネルがサポートされている場合)

intel_vvp_3d_lut_get_lut_depth

uint8_t intel_vvp_3d_lut_get_lut_depth( intel_vvp_3d_lut_instance* instance);
説明
LUT処理ストリームのコンフィグレーションされたビット解像度を取得します。
引数
インスタンス - 3D LUTソフトウェア・ドライバー・インスタンス構造体へのポインター
戻り値
範囲は8から16 です。値はLUTカラープレーンごとのビット数です。

intel_vvp_3d_lut_get_dimension

uint8_t intel_vvp_3d_lut_get_dimension( intel_vvp_3d_lut_instance* instance);
説明
コンフィグレーションされたLUTサイズを取得します。値は単一の寸法サイズです。寸法サイズがAの場合、LUTサイズは (A x A x A) エントリーになります。
引数
インスタンス - 3D LUTソフトウェア・ドライバー・インスタンス構造体へのポインター
戻り値
有効な値は {9、17、33、65} です。

intel_vvp_3d_lut_get_output_depth

uint8_t intel_vvp_3d_lut_get_output_depth( intel_vvp_3d_lut_instance* instance);
説明
LUT出力ストリームのビット解像度を取得します。
引数
インスタンス - 3D LUTソフトウェア・ドライバー・インスタンス構造体へのポインター
戻り値
範囲は8から16です。値は出力カラープレーンごとのビット数です。

intel_vvp_3d_lut_get_pixels_per_clock

uint8_t intel_vvp_3d_lut_get_pixels_per_clock( intel_vvp_3d_lut_instance* instance);
説明
各ビデオ・クロック・サイクルで処理される入力ピクセルの数です。
引数
インスタンス - 3D LUTソフトウェア・ドライバー・インスタンス構造体へのポインター
戻り値
ピクセル数。範囲は1から8です。