## ucil ucil |

## Synopsis

    #define             UCIL_FOURCC                         (a,b,c,d)
    struct              ucil_rgb24_t;
    struct              ucil_rgb32_t;
    struct              ucil_yuv_t;
    struct              ucil_y8_t;
    struct              ucil_color_t;
    void                ucil_convolution_mask               (unicap_data_buffer_t *dest,
                                                             unicap_data_buffer_t *src,
                                                             ucil_convolution_mask_t *mask);
    struct              ucil_convolution_mask_t;
    struct              ucil_font_object_t;
    struct              ucil_video_file_object_t;
    unicap_status_t     ucil_check_version                  (unsigned int major,
                                                             unsigned int minor,
                                                             unsigned int micro);
    void                ucil_set_pixel                      (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int x,
                                                             int y);
    void                ucil_set_pixel_alpha                (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int alpha,
                                                             int x,
                                                             int y);
    void                ucil_draw_line                      (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int x1,
                                                             int y1,
                                                             int x2,
                                                             int y2);
    void                ucil_draw_rect                      (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int x1,
                                                             int y1,
                                                             int x2,
                                                             int y2);
    void                ucil_fill                           (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color);
    void                ucil_draw_box                       (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int x1,
                                                             int y1,
                                                             int x2,
                                                             int y2);
    void                ucil_draw_circle                    (unicap_data_buffer_t *dest,
                                                             ucil_color_t *color,
                                                             int cx,
                                                             int cy,
                                                             int r);
    ucil_font_object_t* ucil_create_font_object             (int size,
                                                             const char *font);
    void                ucil_draw_text                      (unicap_data_buffer_t *dest,
                                                             ucil_color_t *color,
                                                             ucil_font_object_t *fobj,
                                                             const char *text,
                                                             int x,
                                                             int y);
    void                ucil_destroy_font_object            (ucil_font_object_t *fobj);
    void                ucil_text_get_size                  (ucil_font_object_t *fobj,
                                                             const char *text,
                                                             int *width,
                                                             int *height);
    void                ucil_get_pixel                      (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int x,
                                                             int y);
    void                ucil_convert_color                  (ucil_color_t *src,
                                                             ucil_color_t *dest);
    unicap_status_t     ucil_convert_buffer                 (unicap_data_buffer_t *dest,
                                                             unicap_data_buffer_t *src);
    int                 ucil_conversion_supported           (unsigned int dest_fourcc,
                                                             unsigned int src_fourcc);
    ucil_colorspace_t   ucil_get_colorspace_from_fourcc     (unsigned int fourcc);
    void                ucil_blend_alpha                    (unicap_data_buffer_t *dest,
                                                             unicap_data_buffer_t *bg,
                                                             unicap_data_buffer_t *fg,
                                                             int alpha);
    ucil_convolution_mask_t* ucil_create_convolution_mask   (unsigned char *array,
                                                             int size,
                                                             ucil_colorspace_t cs,
                                                             int mode);
    ucil_video_file_object_t* ucil_create_video_file        (const char *path,
                                                             unicap_format_t *format,
                                                             const char *codec,
                                                             ...);
    unicap_status_t     ucil_encode_frame                   (ucil_video_file_object_t *vobj,
                                                             unicap_data_buffer_t *buffer);
    unicap_status_t     ucil_close_video_file               (ucil_video_file_object_t *vobj);
    unicap_status_t     ucil_open_video_file                (unicap_handle_t *unicap_handle,
                                                             char *filename);
    const char*         ucil_get_video_file_extension       (const char *codec);

## Description

## Details

### UCIL_FOURCC()

    #define UCIL_FOURCC(a,b,c,d) (unsigned int)((((unsigned int)d)<<24)+(((unsigned int)c)<<16)+(((unsigned int)b)<<8)+a)

`a` : |
`b` : |
`c` : |
`d` : |

### struct ucil_rgb24_t

    struct ucil_rgb24_t {
          unsigned char r;
          unsigned char g;
          unsigned char b;
    };

### struct ucil_rgb32_t

    struct ucil_rgb32_t {
          unsigned char r;
          unsigned char g;
          unsigned char b;
          unsigned char a;
    };

### struct ucil_yuv_t

    struct ucil_yuv_t {
          unsigned char y;
          unsigned char u;
          unsigned char v;
    };

### struct ucil_y8_t

    struct ucil_y8_t {
          unsigned char y;
    };

### struct ucil_color_t

    struct ucil_color_t {
          ucil_colorspace_t colorspace;

          union
          {
    	    ucil_yuv_t yuv;
    	    ucil_rgb24_t rgb24;
    	    ucil_rgb32_t rgb32;
    	    ucil_y8_t y8;
          };
    };

### ucil_convolution_mask ()

    void                ucil_convolution_mask               (unicap_data_buffer_t *dest,
                                                             unicap_data_buffer_t *src,
                                                             ucil_convolution_mask_t *mask);

Apply a convolution mask

`dest` : | target buffer
`src` : | source buffer
`mask` : | an ucil_convolution_mask

### struct ucil_convolution_mask_t

    struct ucil_convolution_mask_t {
          ucil_colorspace_t colorspace;

          ucil_color_t *mask;
          int size;
    };

### struct ucil_font_object_t

    struct ucil_font_object_t {
          void *context;
          void *layout;
    };

### struct ucil_video_file_object_t

    struct ucil_video_file_object_t {
          int ucil_codec_id;
          void *codec_data;
    };

### ucil_check_version ()

    unicap_status_t     ucil_check_version                  (unsigned int major,
                                                             unsigned int minor,
                                                             unsigned int micro);

`major` : |
`minor` : |
`micro` : |
Returns : |

### ucil_set_pixel ()

    void                ucil_set_pixel                      (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int x,
                                                             int y);

Draws a pixel on the data buffer.

`data_buffer` : |
`color` : |
`x` : |
`y` : |

### ucil_set_pixel_alpha ()

    void                ucil_set_pixel_alpha                (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int alpha,
                                                             int x,
                                                             int y);

Draws a pixel on the data buffer, applying an alpha ( transparency ) value to the pixel.

`data_buffer` : | target buffer
`color` : | an ucil_color_t. The colorspace of the color has to match the colorspace of the data_buffer.
`alpha` : | the alpha value that should be applied to this pixel
`x` : | x position
`y` : | y position

### ucil_draw_line ()

    void                ucil_draw_line                      (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int x1,
                                                             int y1,
                                                             int x2,
                                                             int y2);

Draws a line on the data buffer. The endpoints are clipped to the buffer dimensions

`data_buffer` : |
`color` : |
`x1` : |
`y1` : |
`x2` : |
`y2` : |

### ucil_draw_rect ()

    void                ucil_draw_rect                      (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int x1,
                                                             int y1,
                                                             int x2,
                                                             int y2);

Draws a rectangle filled with color.

`data_buffer` : |
`color` : |
`x1` : |
`y1` : |
`x2` : |
`y2` : |

### ucil_fill ()

    void                ucil_fill                           (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color);

Fill the buffer with a color.

`data_buffer` : |
`color` : |

### ucil_draw_box ()

    void                ucil_draw_box                       (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int x1,
                                                             int y1,
                                                             int x2,
                                                             int y2);

Draws a box

`data_buffer` : |
`color` : |
`x1` : |
`y1` : |
`x2` : |
`y2` : |

### ucil_draw_circle ()

    void                ucil_draw_circle                    (unicap_data_buffer_t *dest,
                                                             ucil_color_t *color,
                                                             int cx,
                                                             int cy,
                                                             int r);

Draws a circle.

`dest` : |
`color` : | an ucil_color_t. The colorspace of the color has to match the colorspace of the data_buffer.
`cx` : | center of the circle ( x position )
`cy` : | center of the circle ( y position )
`r` : | radius

### ucil_create_font_object ()

    ucil_font_object_t* ucil_create_font_object             (int size,
                                                             const char *font);

Creates a font object required for text operations. The application must free the font object with ucil_destroy_font_object.

`size` : | size of font in points
`font` : | name of font or NULL to use default font
Returns : | a new ucil_font_object_t

### ucil_draw_text ()

    void                ucil_draw_text                      (unicap_data_buffer_t *dest,
                                                             ucil_color_t *color,
                                                             ucil_font_object_t *fobj,
                                                             const char *text,
                                                             int x,
                                                             int y);

Draws a text string onto the target buffer.

`dest` : | target buffer
`color` : | an ucil_color_t. The colorspace of the color has to match the colorspace of the data_buffer.
`fobj` : | an ucil_font_object_t
`text` : | text string to draw
`x` : | x position
`y` : | y position

### ucil_destroy_font_object ()

    void                ucil_destroy_font_object            (ucil_font_object_t *fobj);

Frees all resources allocated by the font object

`fobj` : |

### ucil_text_get_size ()

    void                ucil_text_get_size                  (ucil_font_object_t *fobj,
                                                             const char *text,
                                                             int *width,
                                                             int *height);

Determines the size in pixels a text string will take up when drawn onto a buffer.

`fobj` : | an ucil_font_object_t
`text` : | text string
`width` : | pointer to int which will receive the width of the text
`height` : | pointer to int which will receive the height of the text

### ucil_get_pixel ()

    void                ucil_get_pixel                      (unicap_data_buffer_t *data_buffer,
                                                             ucil_color_t *color,
                                                             int x,
                                                             int y);

Reads the pixel at position (x,y) and stores the result in `color`.

`data_buffer` : | buffer
`color` : | pointer to an ucil_color_t to store the result
`x` : | x position
`y` : | y position

### ucil_convert_color ()

    void                ucil_convert_color                  (ucil_color_t *src,
                                                             ucil_color_t *dest);

Convert colors between colorspaces. The `colorspace` field of dest needs to be set to the target colorspace, like in this example:

    src.colorspace = UCIL_COLORSPACE_RGB24;
    src.rgb24.r = 0xff;
    src.rgb24.g = 0xff;
    src.rgb24.b = 0xff;
    dest.colorspace = UCIL_COLORSPACE_YUV;
    ucil_convert_color( &dest, &src );

`src` : |
`dest` : |

### ucil_convert_buffer ()

    unicap_status_t     ucil_convert_buffer                 (unicap_data_buffer_t *dest,
                                                             unicap_data_buffer_t *src);

Convert the colorspace of a data buffer. The colorspaces are denoted by the `buffer.format.fourcc` field. The dest->format.fourcc gets set to the correct value.

`dest` : | target buffer
`src` : | source buffer
Returns : | STATUS_SUCCESS if the buffer could be converted successfully. STATUS_FAILURE if no conversion exists.

### ucil_conversion_supported ()

    int                 ucil_conversion_supported           (unsigned int dest_fourcc,
                                                             unsigned int src_fourcc);

Tests whether a specific conversion is supported.

`dest_fourcc` : | target fourcc
`src_fourcc` : | source fourcc
Returns : | 1 when the conversion is supported

### ucil_get_colorspace_from_fourcc ()

    ucil_colorspace_t   ucil_get_colorspace_from_fourcc     (unsigned int fourcc);

Gets the ucil_colorspace_t that matches the fourcc.

`fourcc` : | fourcc
Returns : | an ucil_colorspace_t. This is UCIL_COLORSPACE_UNKNOWN when no conversion exists.

### ucil_blend_alpha ()

    void                ucil_blend_alpha                    (unicap_data_buffer_t *dest,
                                                             unicap_data_buffer_t *bg,
                                                             unicap_data_buffer_t *fg,
                                                             int alpha);

Blends two buffers into a target buffer. Colorspaces of buffers should match.

`dest` : | target buffer
`bg` : | background buffer
`fg` : | foreground buffer
`alpha` : | transparency value

### ucil_create_convolution_mask ()

    ucil_convolution_mask_t* ucil_create_convolution_mask   (unsigned char *array,
                                                             int size,
                                                             ucil_colorspace_t cs,
                                                             int mode);

`array` : |
`size` : |
`cs` : |
`mode` : |
Returns : |

### ucil_create_video_file ()

    ucil_video_file_object_t* ucil_create_video_file        (const char *path,
                                                             unicap_format_t *format,
                                                             const char *codec,
                                                             ...);

Creates a video file to be used for video recording. After creation, add frames to the video file with ucil_encode_frame.

`path` : | filename with full path
`format` : | image format of individual frames
`codec` : | codec name or NULL to use default codec
`...` : | codec parameters in the form ["parameter",value...] , terminated with NULL
Returns : | A new ucil_video_file_object_t or NULL on error.

### ucil_encode_frame ()

    unicap_status_t     ucil_encode_frame                   (ucil_video_file_object_t *vobj,
                                                             unicap_data_buffer_t *buffer);

Adds a frame to a video file.

`vobj` : | a video file object
`buffer` : | data buffer
Returns : | STATUS_SUCCESS if the frame got added successfully.

### ucil_close_video_file ()

    unicap_status_t     ucil_close_video_file               (ucil_video_file_object_t *vobj);

Close a video file created with ucil_create_video_file

`vobj` : | an ucil_video_file_object
Returns : |

### ucil_open_video_file ()

    unicap_status_t     ucil_open_video_file                (unicap_handle_t *unicap_handle,
                                                             char *filename);

Opens a video file for playback. The resulting handle can be used like a video capture device.

`unicap_handle` : | pointer to an unicap_handle_t where the new handle gets stored.
`filename` : | full path of the video file
Returns : |

### ucil_get_video_file_extension ()

    const char*         ucil_get_video_file_extension       (const char *codec);

Get the file extension of a codec. Eg. for the "ogg/theora" codec, this will return "ogg". The returned string is owned by ucil and should not be freed.

`codec` : | codec name
Returns : | string