# Module Gavl.Video

    module Video: sig .. end

    exception Invalid_frame

    exception Invalid_conversion

    exception Not_implemented

Raised when a feature is not yet implemented, in particular pixel format with data other than unsigned 8 bit integers.

    type interlace_mode =

`|` | `No_interlace` | `(*` | Progressive | `*)`
`|` | `Top_first` | `(*` | Top field first | `*)`
`|` | `Bottom_first` | `(*` | Bottom field first | `*)`
`|` | `Mixed` | `(*` | Use interlace_mode of the frames | `*)`

Interlace mode type

    type pixel_format =

`|` | `Gray_8` | `(*` | 8 bit gray, scaled 0x00..0xff | `*)`
`|` | `Gray_16` | `(*` | 16 bit gray, scaled 0x0000..0xffff | `*)`
`|` | `Gray_float` | `(*` | floating point gray, scaled 0.0..1.0 | `*)`
`|` | `Graya_16` | `(*` | 8 bit gray + alpha, scaled 0x00..0xff | `*)`
`|` | `Graya_32` | `(*` | 16 bit gray + alpha, scaled 0x0000..0xffff | `*)`
`|` | `Graya_float` | `(*` | floating point gray + alpha, scaled 0.0..1.0 | `*)`
`|` | `Rgb_15` | `(*` | 15 bit RGB. Each pixel is a uint16_t in native byte order. Color masks are: for red: 0x7C00, for green: 0x03e0, for blue: 0x001f | `*)`
`|` | `Bgr_15` | `(*` | 15 bit BGR. Each pixel is a uint16_t in native byte order. Color masks are: for red: 0x001f, for green: 0x03e0, for blue: 0x7C00 | `*)`
`|` | `Rgb_16` | `(*` | 16 bit RGB. Each pixel is a uint16_t in native byte order. Color masks are: for red: 0xf800, for green: 0x07e0, for blue: 0x001f | `*)`
`|` | `Bgr_16` | `(*` | 16 bit BGR. Each pixel is a uint16_t in native byte order. Color masks are: for red: 0x001f, for green: 0x07e0, for blue: 0xf800 | `*)`
`|` | `Rgb_24` | `(*` | 24 bit RGB. Each color is an uint8_t. Color order is RGBRGB | `*)`
`|` | `Bgr_24` | `(*` | 24 bit BGR. Each color is an uint8_t. Color order is BGRBGR | `*)`
`|` | `Rgb_32` | `(*` | 32 bit RGB. Each color is an uint8_t. Color order is RGBXRGBX, where X is unused | `*)`
`|` | `Bgr_32` | `(*` | 32 bit BGR. Each color is an uint8_t. Color order is BGRXBGRX, where X is unused | `*)`
`|` | `Rgba_32` | `(*` | 32 bit RGBA. Each color is an uint8_t. Color order is RGBARGBA | `*)`
`|` | `Rgb_48` | `(*` | 48 bit RGB. Each color is an uint16_t in native byte order. Color order is RGBRGB | `*)`
`|` | `Rgba_64` | `(*` | 64 bit RGBA. Each color is an uint16_t in native byte order. Color order is RGBARGBA | `*)`
`|` | `Rgb_float` | `(*` | float RGB. Each color is a float (0.0 .. 1.0) in native byte order. Color order is RGBRGB | `*)`
`|` | `Rgba_float` | `(*` | float RGBA. Each color is a float (0.0 .. 1.0) in native byte order. Color order is RGBARGBA | `*)`
`|` | `Yuy2` | `(*` | Packed YCbCr 4:2:2. Each component is an uint8_t. Component order is Y1 U1 Y2 V1 | `*)`
`|` | `Yuvy` | `(*` | Packed YCbCr 4:2:2. Each component is an uint8_t. Component order is U1 Y1 V1 Y2 | `*)`
`|` | `Yuva_32` | `(*` | Packed YCbCrA 4:4:4:4. Each component is an uint8_t. Component order is YUVA. Luma and chroma are video scaled, alpha is 0..255. | `*)`
`|` | `Yuva_64` | `(*` | Packed YCbCrA 4:4:4:4. Each component is an uint16_t. Component order is YUVA. Luma and chroma are video scaled, alpha is 0..65535. | `*)`
`|` | `Yuv_float` | `(*` | Packed YCbCr 4:4:4. Each component is a float. Luma is scaled 0.0..1.0, chroma is -0.5..0.5 | `*)`
`|` | `Yuva_float` | `(*` | Packed YCbCrA 4:4:4:4. Each component is a float. Luma is scaled 0.0..1.0, chroma is -0.5..0.5 | `*)`
`|` | `Yuv_420_p` | `(*` | Packed YCbCrA 4:4:4:4. Each component is an uint16_t. Component order is YUVA. Luma and chroma are video scaled, alpha is 0..65535. | `*)`
`|` | `Yuv_422_p` | `(*` | Planar YCbCr 4:2:2. Each component is an uint8_t | `*)`
`|` | `Yuv_444_p` | `(*` | Planar YCbCr 4:4:4. Each component is an uint8_t | `*)`
`|` | `Yuv_411_p` | `(*` | Planar YCbCr 4:1:1. Each component is an uint8_t | `*)`
`|` | `Yuv_410_p` | `(*` | Planar YCbCr 4:1:0. Each component is an uint8_t | `*)`
`|` | `Yuvj_420_p` | `(*` | Planar YCbCr 4:2:0. Each component is an uint8_t, luma and chroma values are full range (0x00 .. 0xff) | `*)`
`|` | `Yuvj_422_p` | `(*` | Planar YCbCr 4:2:2. Each component is an uint8_t, luma and chroma values are full range (0x00 .. 0xff) | `*)`
`|` | `Yuvj_444_p` | `(*` | Planar YCbCr 4:4:4. Each component is an uint8_t, luma and chroma values are full range (0x00 .. 0xff) | `*)`
`|` | `Yuv_444_p_16` | `(*` | 16 bit Planar YCbCr 4:4:4. Each component is an uint16_t in native byte order. | `*)`
`|` | `Yuv_422_p_16` | `(*` | 16 bit Planar YCbCr 4:2:2. Each component is an uint16_t in native byte order. | `*)`

Pixel formats. Only formats using 8 bit unsigned integers are supported for now.

    type framerate_mode =

`|` | `Constant` | `(*` | Constant framerate | `*)`
`|` | `Variable` | `(*` | Variable framerate | `*)`
`|` | `Still` | `(*` | Still image | `*)`

Framerate mode

    type chroma_placement =

`|` | `Default` | `(*` | MPEG-1/JPEG | `*)`
`|` | `Mpeg2` | `(*` | MPEG-2 | `*)`
`|` | `Dvpal` | `(*` | DV PAL | `*)`

Chroma placement.

    type format = {

`` | `frame_width : `int`;`
`` | `frame_height : `int`;`
`` | `image_width : `int`;`
`` | `image_height : `int`;`
`` | `pixel_width : `int`;`
`` | `pixel_height : `int`;`
`` | `pixelformat : `pixel_format`;`
`` | `frame_duration : `int`;`
`` | `timescale : `int`;`
`` | `framerate_mode : `framerate_mode`;`
`` | `chroma_placement : `chroma_placement`;`
`` | `interlace_mode : `interlace_mode`;`

`}`

Video format.

    type plane = (int, Stdlib.Bigarray.int8_unsigned_elt, Stdlib.Bigarray.c_layout)
           Stdlib.Bigarray.Array1.t

Plane data, represented as a big array of unsigned 8 bits ints.

    type frame = {

`` | `planes : `(plane * int) array`;`
`` | `timestamp : `Stdlib.Int64.t`;`
`` | `duration : `Stdlib.Int64.t`;`
`` | `frame_interlace_mode : `interlace_mode`;`

`}`

Frame type.

    val new_frame : format -> frame

Create a new frame.

    val clear_frame : format -> frame -> unit

Clear a frame.

    type t

Opaque type for a converter.

    val create_converter : format -> format -> t

`in_format out_format` creates a converter converting from `in_format` to `out_format`.

Raises `Not_implemented` if input or output format do not use unsigned 8 bit integers.

    val init : t -> format -> format -> unit

`init conv in_format out_format`: initializes a converter with new input and output formats.

Raises `Not_implemented` if input or output format do not use unsigned 8 bit integers.

    val get_formats : t -> format * format

`get_formats conv` returns a pair `(in_format,out_format)`.

    val get_quality : t -> int

Get quality setting.

    val set_quality : t -> int -> unit

Set quality setting.

    type int_rect = int * int * int * int

Type for integer rectangles: x/y offset and width/height.

    type float_rect = float * float * float * float

Type for float rectangles: x/y offset and width/height.

    val get_rect : t -> float_rect * int_rect

`get_rect conv` returns a pair `(in_rect,out_rect)`.

    val set_rect : t -> float_rect -> int_rect -> unit

`set_rect conv in_rec out_rec` sets input and output rectangles.

    type conversion_flags = [ `Convolve_chroma
           | `Convolve_normalize
           | `Force_deinterlace
           | `Resample_chroma ]

Type for conversion flags.

    val set_flags : t -> conversion_flags list -> unit

Set conversion flags.

    val get_flags : t -> conversion_flags list

Get conversion flags.

    type scale_mode =

`|` | `Auto`
`|` | `Nearest`
`|` | `Bilinear`
`|` | `Quadratic`
`|` | `Cubic_bspline`
`|` | `Cubic_mitchell`
`|` | `Cubic_catmull`
`|` | `Scale_sinc_lanczos`

Type for scale mode.

    val set_scale_mode : t -> scale_mode -> unit

Set scale mode.

    val get_scale_mode : t -> scale_mode

Get scale mode.

    val reinit : t -> unit

Reinitialize a converter. Should be called when a setting has changed.

    val convert : t -> frame -> frame -> unit

Perform frame conversion.

Raises `Invalid_frame` if input or output frame doesn't match corresponding format.

Raises `Not_implemented` if input or output format do not use unsigned 8 bit integers.