FFmpeg
Loading...
Searching...
No Matches
libavutil
display.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2014 Vittorio Giovara <vittorio.giovara@gmail.com>
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include <stdint.h>
22
#include <string.h>
23
#include <math.h>
24
25
#include "
display.h
"
26
#include "
mathematics.h
"
27
28
// fixed point to double
29
#define CONV_FP(x) ((double) (x)) / (1 << 16)
30
31
// double to fixed point
32
#define CONV_DB(x) (int32_t) ((x) * (1 << 16))
33
34
double
av_display_rotation_get
(
const
int32_t
matrix
[9])
35
{
36
double
rotation,
scale
[2];
37
38
scale
[0] = hypot(
CONV_FP
(
matrix
[0]),
CONV_FP
(
matrix
[3]));
39
scale
[1] = hypot(
CONV_FP
(
matrix
[1]),
CONV_FP
(
matrix
[4]));
40
41
if
(
scale
[0] == 0.0 ||
scale
[1] == 0.0)
42
return
NAN
;
43
44
rotation = atan2(
CONV_FP
(
matrix
[1]) /
scale
[1],
45
CONV_FP
(
matrix
[0]) /
scale
[0]) * 180 /
M_PI
;
46
47
return
-rotation;
48
}
49
50
void
av_display_rotation_set
(
int32_t
matrix
[9],
double
angle)
51
{
52
double
radians = -angle *
M_PI
/ 180.0f;
53
double
c
= cos(radians);
54
double
s
= sin(radians);
55
56
memset(
matrix
, 0, 9 *
sizeof
(
int32_t
));
57
58
matrix
[0] =
CONV_DB
(
c
);
59
matrix
[1] =
CONV_DB
(-
s
);
60
matrix
[3] =
CONV_DB
(
s
);
61
matrix
[4] =
CONV_DB
(
c
);
62
matrix
[8] = 1 << 30;
63
}
64
65
void
av_display_matrix_flip
(
int32_t
matrix
[9],
int
hflip,
int
vflip
)
66
{
67
int
i
;
68
const
int
flip
[] = { 1 - 2 * (!!hflip), 1 - 2 * (!!
vflip
), 1 };
69
70
if
(hflip ||
vflip
)
71
for
(
i
= 0;
i
< 9;
i
++)
72
matrix
[
i
] *=
flip
[
i
% 3];
73
}
int32_t
int32_t
Definition
audioconvert.c:58
i
#define i(width, name, range_min, range_max)
Definition
cbs_h264.c:63
s
#define s(width, name)
Definition
cbs_vp9.c:198
CONV_DB
#define CONV_DB(x)
Definition
display.c:32
CONV_FP
#define CONV_FP(x)
Definition
display.c:29
display.h
Display matrix.
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 de...
Definition
display.c:50
av_display_rotation_get
double av_display_rotation_get(const int32_t matrix[9])
Extract the rotation component of the transformation matrix.
Definition
display.c:34
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.
Definition
display.c:65
scale
static av_always_inline void scale(vec_s32 res[4], vec_s16 res_packed[2], const int shift)
Definition
hevcdsp_altivec.c:76
flip
static void flip(AVCodecContext *avctx, AVFrame *frame)
Definition
rawdec.c:131
mathematics.h
NAN
#define NAN
Definition
mathematics.h:115
M_PI
#define M_PI
Definition
mathematics.h:67
matrix
Definition
vc1dsp.c:43
vflip
static void vflip(AVFrame *frame, const AVPixFmtDescriptor *desc)
Definition
hwcontext_cuda.c:34
c
static double c[64]
Definition
vsrc_mptestsrc.c:89
Generated on Mon Nov 2 2026 19:21:07 for FFmpeg by
1.13.2