Visible to Intel only — GUID: cvv1620125246820
Ixiasoft
1. About the Video and Vision Processing Suite
2. Getting Started with the Video and Vision Processing IPs
3. Video and Vision Processing IPs Functional Description
4. Video and Vision Processing IP Interfaces
5. Video and Vision Processing IP Registers
6. Video and Vision Processing IPs Software Programming Model
7. Protocol Converter Intel® FPGA IP
8. 3D LUT Intel® FPGA IP
9. AXI-Stream Broadcaster Intel® FPGA IP
10. Chroma Resampler Intel® FPGA IP
11. Clipper Intel® FPGA IP
12. Clocked Video Input Intel® FPGA IP
13. Clocked Video to Full-Raster Converter Intel® FPGA IP
14. Clocked Video Output Intel® FPGA IP
15. Color Space Converter Intel® FPGA IP
16. Deinterlacer Intel® FPGA IP
17. FIR Filter Intel® FPGA IP
18. Frame Cleaner Intel® FPGA IP
19. Full-Raster to Clocked Video Converter Intel® FPGA IP
20. Full-Raster to Streaming Converter Intel® FPGA IP
21. Generic Crosspoint Intel® FPGA IP
22. Genlock Signal Router Intel® FPGA IP
23. Guard Bands Intel® FPGA IP
24. Mixer Intel® FPGA IP
25. Pixels in Parallel Converter Intel® FPGA IP
26. Scaler Intel® FPGA IP
27. Tone Mapping Operator Intel® FPGA IP
28. Test Pattern Generator Intel® FPGA IP
29. Video Frame Buffer Intel® FPGA IP
30. Video Streaming FIFO Intel® FPGA IP
31. Video Timing Generator Intel® FPGA IP
32. Warp Intel® FPGA IP
33. Design Security
34. Document Revision History for Video and Vision Processing Suite User Guide
Visible to Intel only — GUID: cvv1620125246820
Ixiasoft
8.5. 3D LUT IP Software API
The IP includes a software driver that configures and controls all the necessary parameters of the IP.
Figure 16. Software driver usage example
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);
}
The driver does not include the load function. You have alternative ways to source the LUT entry data. The simplest is from a precompiled structure in the software source code. An example of using this method is:
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;
}
In this example, the data is a flat structure containing four elements per LUT entry (4 * lut_dimension³).
The definition for the dimension and data table is:
#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 */
Name | Description |
---|---|
intel_vvp_3d_lut_init | Initialize the LUT instance |
intel_vvp_3d_lut_enable | Enable LUT processing |
intel_vvp_3d_lut_buffer_select | Select between LUT buffers |
intel_vvp_3d_lut_load | Load a LUT entry |
intel_vvp_3d_lut_get_double_buffered | Get double buffered configuration parameter |
intel_vvp_3d_lut_get_input_depth | Get bit resolution of input streams |
intel_vvp_3d_lut_get_lut_alpha_channel | Get alpha channel support configuration parameter" |
intel_vvp_3d_lut_get_lut_depth | Get bit resolution of LUT streams |
intel_vvp_3d_lut_get_dimension | Get size of LUT |
intel_vvp_3d_lut_get_output_depth | Get bit resolution of output streams |
intel_vvp_3d_lut_get_pixels_per_clock | Get number of pixels processed per clock cycle |
intel_vvp_3d_lut_init
- void intel_vvp_3d_lut_init( intel_vvp_3d_lut_instance* instance, intel_vvp_core_base base);
- Description
- Initialize a 3D LUT instance
- Arguments
- instance – pointer to the 3D LUT software driver instance structure
- base – pointer to base address of 3D LUT IP
- Return Value
- Zero on success, negative integer otherwise
intel_vvp_3d_lut_enable
- void intel_vvp_3d_lut_enable( intel_vvp_3d_lut_instance* instance, int enable);
- Description
- Enable LUT processing
- Arguments
- instance – pointer to the 3D LUT software driver instance structure
-
enable – enable LUT operation:
- 0 – Passthrough input stream unchanged
- 1 – Enable LUT processing
- Return Value
- None
intel_vvp_3d_lut_buffer_select
- int intel_vvp_3d_lut_buffer_select( intel_vvp_3d_lut_instance* instance, uint8_t buffer);
- Description
- Select between LUT procession buffers (double buffering must be enabled)
- Arguments
- instance – pointer to the 3D LUT software driver instance structure
- buffer – buffer to be selected (0 or 1)
- Return Value
-
- 0 – operation is successful
- -1 – buffer parameter is out of range or double buffering is not configured
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);
- Description
- Load an entry into the LUT table. Parameters specify the indices for the table, and the R/G/B/A value for the table entry.
- Arguments
- instance – pointer to the 3D LUT software driver instance structure
- r_idx - red index. Range 0 to (LUT dimension - 1)
- g_idx - green index. Range 0 to (LUT dimension - 1)
- b_idx - blue index. Range 0 to (LUT dimension - 1)
- buffer - range 0 to 1 (for double buffered configuration)
- r_val - red value. Range 0 to (2lut_depth - 1)
- g_val - green value. Range 0 to (2lut_depth - 1)
- b_val - blue value. Range 0 to (2lut_depth - 1)
- a_val - alpha value. LUT alpha must be enabled. If not, value must be set to 0.
- Return Value
-
- 0 - successful
- –1 if r_idx/g_idx/b_idx is out of range
- –2 if buffer parameter is out of range, or double buffering is not configured
- –3 if alpha value is set and not supported
- –4 if r_val/g_val/b_val is out of range
intel_vvp_3d_lut_get_double_buffered
- uint8_t intel_vvp_3d_lut_get_double_buffered( intel_vvp_3d_lut_instance* instance);
- Description
- Get double-buffered IP configuration
- Arguments
- instance – pointer to the 3D LUT software driver instance structure
- Return Value
-
- 0 if double buffer option is not configured
- 1 if double buffer option is configured
intel_vvp_3d_lut_get_input_depth
- uint8_t intel_vvp_3d_lut_get_input_depth( intel_vvp_3d_lut_instance* instance);
- Description
- Get bit resolution of input streams
- Arguments
- instance – pointer to the 3D LUT software driver instance structure
- Return Value
- Range is 8 to 16. Value is number of bits per input color plane
intel_vvp_3d_lut_get_lut_alpha_channel
- uint8_t intel_vvp_3d_lut_get_lut_alpha_channel( intel_vvp_3d_lut_instance* instance);
- Description
-
Get alpha channel support configuration parameter
- Arguments
- instance – pointer to the 3D LUT software driver instance structure
- Return Value
-
- 0 if alpha channel is not supported
- 1 if alpha channel is supported
intel_vvp_3d_lut_get_lut_depth
- uint8_t intel_vvp_3d_lut_get_lut_depth( intel_vvp_3d_lut_instance* instance);
- Description
- Get configured bit resolution of LUT processing streams
- Arguments
- instance – pointer to the 3D LUT software driver instance structure
- Return Value
- Range is 8 to 16. Value is number of bits per LUT color plane
intel_vvp_3d_lut_get_dimension
- uint8_t intel_vvp_3d_lut_get_dimension( intel_vvp_3d_lut_instance* instance);
- Description
- Get configured LUT size. Value is single dimension size. A dimension size of A gives a LUT size of (A x A x A) entries
- Arguments
- instance – pointer to the 3D LUT software driver instance structure
- Return Value
- Valid values are {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);
- Description
- Get bit resolution of LUT output streams
- Arguments
- instance – pointer to the 3D LUT software driver instance structure
- Return Value
- Range is 8 to 16. Value is number of bits per output color plane
intel_vvp_3d_lut_get_pixels_per_clock
- uint8_t intel_vvp_3d_lut_get_pixels_per_clock( intel_vvp_3d_lut_instance* instance);
- Description
- Number of input pixels processed for each video clock cycle
- Arguments
- instance – pointer to the 3D LUT software driver instance structure
- Return Value
- Number of pixels. Range is 1 to 8.