FFmpeg
Functions
Display transformation matrix functions

Functions

double av_display_rotation_get (const int32_t matrix[9])
 Extract the rotation component of the transformation matrix. More...
 
void av_display_rotation_set (int32_t matrix[9], double angle)
 Initialize a transformation matrix describing a pure clockwise rotation by the specified angle (in degrees). More...
 
void av_display_matrix_flip (int32_t matrix[9], int hflip, int vflip)
 Flip the input matrix horizontally and/or vertically. More...
 

Detailed Description

The display transformation matrix specifies an affine transformation that should be applied to video frames for correct presentation. It is compatible with the matrices stored in the ISO/IEC 14496-12 container format.

The data is a 3x3 matrix represented as a 9-element array:

| a b u |
(a, b, u, c, d, v, x, y, w) -> | c d v |
| x y w |

All numbers are stored in native endianness, as 16.16 fixed-point values, except for u, v and w, which are stored as 2.30 fixed-point values.

The transformation maps a point (p, q) in the source (pre-transformation) frame to the point (p', q') in the destination (post-transformation) frame as follows:

| a b u |
(p, q, 1) . | c d v | = z * (p', q', 1)
| x y w |

The transformation can also be more explicitly written in components as follows:

p' = (a * p + c * q + x) / z;
q' = (b * p + d * q + y) / z;
z = u * p + v * q + w

Function Documentation

◆ av_display_rotation_get()

double av_display_rotation_get ( const int32_t  matrix[9])

Extract the rotation component of the transformation matrix.

Parameters
matrixthe transformation matrix
Returns
the angle (in degrees) by which the transformation rotates the frame counterclockwise. The angle will be in range [-180.0, 180.0], or NaN if the matrix is singular.
Note
floating point numbers are inherently inexact, so callers are recommended to round the return value to nearest integer before use.

Definition at line 35 of file display.c.

Referenced by dump_sidedata(), filter_frame(), get_rotation(), main(), print_pkt_side_data(), and show_frame().

◆ av_display_rotation_set()

void av_display_rotation_set ( int32_t  matrix[9],
double  angle 
)

Initialize a transformation matrix describing a pure clockwise rotation by the specified angle (in degrees).

Parameters
matrixan allocated transformation matrix (will be fully overwritten by this function)
anglerotation angle in degrees.

Definition at line 51 of file display.c.

Referenced by add_display_matrix(), cri_decode_frame(), ff_mjpeg_receive_frame(), h264_export_frame_props(), h264_metadata_handle_display_orientation(), init_output_stream(), init_output_stream_streamcopy(), main(), and set_side_data().

◆ av_display_matrix_flip()

void av_display_matrix_flip ( int32_t  matrix[9],
int  hflip,
int  vflip 
)

Flip the input matrix horizontally and/or vertically.

Parameters
matrixan allocated transformation matrix
hflipwhether the matrix should be flipped horizontally
vflipwhether the matrix should be flipped vertically

Definition at line 66 of file display.c.

Referenced by add_display_matrix(), cri_decode_frame(), ff_mjpeg_receive_frame(), h264_export_frame_props(), h264_metadata_handle_display_orientation(), main(), and set_side_data().