FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions
display.c File Reference
#include <stdint.h>
#include <string.h>
#include <math.h>
#include "display.h"
#include "mathematics.h"

Go to the source code of this file.

Macros

#define CONV_FP(x)   ((double) (x)) / (1 << 16)
 
#define CONV_DB(x)   (int32_t) ((x) * (1 << 16))
 

Functions

double av_display_rotation_get (const int32_t matrix[9])
 The display transformation matrix specifies an affine transformation that should be applied to video frames for correct presentation.
 
void av_display_rotation_set (int32_t matrix[9], double angle)
 Initialize a transformation matrix describing a pure rotation by the specified angle (in degrees).
 
void av_display_matrix_flip (int32_t matrix[9], int hflip, int vflip)
 Flip the input matrix horizontally and/or vertically.
 

Macro Definition Documentation

#define CONV_FP (   x)    ((double) (x)) / (1 << 16)

Definition at line 29 of file display.c.

Referenced by av_display_rotation_get().

#define CONV_DB (   x)    (int32_t) ((x) * (1 << 16))

Definition at line 32 of file display.c.

Referenced by av_display_rotation_set().

Function Documentation

double av_display_rotation_get ( const int32_t  matrix[9])

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 Extract the rotation component of the transformation matrix.

Parameters
matrixthe transformation matrix
Returns
the angle (in degrees) by which the transformation rotates the frame. 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 34 of file display.c.

Referenced by dump_sidedata(), filter_frame(), and mov_read_tkhd().

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

Initialize a transformation matrix describing a pure 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 50 of file display.c.

Referenced by decode_postinit(), and set_side_data().

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 65 of file display.c.

Referenced by decode_postinit(), and set_side_data().