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 IP
                    
                    
                
                    
                        8. 1D LUT IP
                    
                    
                
                    
                        9. 3D LUT IP
                    
                    
                
                    
                        10. Adaptive Noise Reduction IP
                    
                    
                
                    
                        11. Advanced Test Pattern Generator IP
                    
                    
                
                    
                        12. AXI-Stream Broadcaster IP
                    
                    
                
                    
                        13. Bits per Color Sample Adapter IP
                    
                    
                
                    
                        14. Black Level Correction IP
                    
                    
                
                    
                        15. Black Level Statistics IP
                    
                    
                
                    
                        16. Chroma Key IP
                    
                    
                
                    
                        17. Chroma Resampler IP
                    
                    
                
                    
                        18. Clipper IP
                    
                    
                
                    
                        19. Clocked Video Input IP
                    
                    
                
                    
                        20. Clocked Video to Full-Raster Converter IP
                    
                    
                
                    
                        21. Clocked Video Output IP
                    
                    
                
                    
                        22. Color Plane Manager IP
                    
                    
                
                    
                        23. Color Space Converter IP
                    
                    
                
                    
                        24. Defective Pixel Correction IP
                    
                    
                
                    
                        25. Deinterlacer IP
                    
                    
                
                    
                        26. Demosaic IP
                    
                    
                
                    
                        27. FIR Filter IP
                    
                    
                
                    
                        28. Frame Cleaner IP
                    
                    
                
                    
                        29. Full-Raster to Clocked Video Converter IP
                    
                    
                
                    
                        30. Full-Raster to Streaming Converter IP
                    
                    
                
                    
                        31. Genlock Controller IP
                    
                    
                
                    
                        32. Generic Crosspoint IP
                    
                    
                
                    
                        33. Genlock Signal Router IP
                    
                    
                
                    
                        34. Guard Bands IP
                    
                    
                
                    
                        35. Histogram Statistics IP
                    
                    
                
                    
                        36. Interlacer IP
                    
                    
                
                    
                        37. Mixer IP
                    
                    
                
                    
                        38. Pixels in Parallel Converter IP
                    
                    
                
                    
                        39. Scaler IP
                    
                    
                
                    
                        40. Stream Cleaner IP
                    
                    
                
                    
                        41. Switch IP
                    
                    
                
                    
                        42. Text Box IP
                    
                    
                
                    
                        43. Tone Mapping Operator IP
                    
                    
                
                    
                        44. Test Pattern Generator IP
                    
                    
                
                    
                        45. Unsharp Mask IP
                    
                    
                
                    
                        46. Video and Vision Monitor Intel FPGA IP
                    
                    
                
                    
                        47. Video Frame Buffer IP
                    
                    
                
                    
                        48. Video Frame Reader Intel FPGA IP
                    
                    
                
                    
                        49. Video Frame Writer Intel FPGA IP
                    
                    
                
                    
                        50. Video Streaming FIFO IP
                    
                    
                
                    
                        51. Video Timing Generator IP
                    
                    
                
                    
                        52. Vignette Correction IP
                    
                    
                
                    
                        53. Warp IP
                    
                    
                
                    
                        54. White Balance Correction IP
                    
                    
                
                    
                        55. White Balance Statistics IP
                    
                    
                
                    
                        56. Design Security
                    
                    
                
                    
                    
                        57. Document Revision History for Video and Vision Processing Suite User Guide
                    
                
            
        
                                    
                                    
                                        
                                        
                                            31.4.1. Achieving Genlock Controller Free Running (for Initialization or from Lock to Reference Clock N)
                                        
                                        
                                    
                                        
                                        
                                            31.4.2. Locking to Reference Clock N (from Genlock Controller IP free running)
                                        
                                        
                                    
                                        
                                        
                                            31.4.3. Setting the VCXO hold over
                                        
                                        
                                    
                                        
                                        
                                            31.4.4. Restarting the Genlock Controller IP
                                        
                                        
                                    
                                        
                                        
                                            31.4.5. Locking to Reference Clock N New (from Locking to Reference Clock N Old)
                                        
                                        
                                    
                                        
                                        
                                            31.4.6. Changing to Reference Clock or VCXO Base Frequencies (switch between p50 and p59.94 video formats and vice-versa)
                                        
                                        
                                    
                                        
                                        
                                            31.4.7. Disturbing a Reference Clock (a cable pull)
                                        
                                        
                                    
                                
                            9.5. 3D LUT IP Software API
The IP includes a software driver that configures and controls all the necessary parameters of the IP.
  
  
    Figure 17. 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.