FFmpeg
libavcodec
motionpixels_tablegen.h
Go to the documentation of this file.
1
/*
2
* Header file for hardcoded motion pixels RGB to YUV table
3
*
4
* Copyright (c) 2009 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#ifndef AVCODEC_MOTIONPIXELS_TABLEGEN_H
24
#define AVCODEC_MOTIONPIXELS_TABLEGEN_H
25
26
#include <stdint.h>
27
#include "
libavutil/attributes.h
"
28
29
typedef
struct
YuvPixel
{
30
int8_t
y
,
v
,
u
;
31
}
YuvPixel
;
32
33
static
int
mp_yuv_to_rgb
(
int
y,
int
v,
int
u
,
int
clip_rgb) {
34
const
uint8_t
*
cm
=
ff_crop_tab
+
MAX_NEG_CROP
;
35
int
r
,
g
,
b
;
36
37
r
= (1000 * y + 701 * v) / 1000;
38
g
= (1000 * y - 357 * v - 172 *
u
) / 1000;
39
b
= (1000 * y + 886 *
u
) / 1000;
40
if
(clip_rgb)
41
return
((
cm
[
r
* 8] & 0xF8) << 7) | ((
cm
[
g
* 8] & 0xF8) << 2) | (
cm
[
b
* 8] >> 3);
42
if
((
unsigned
)
r
< 32 && (unsigned)
g
< 32 && (
unsigned
)
b
< 32)
43
return
(
r
<< 10) | (
g
<< 5) |
b
;
44
return
1 << 15;
45
}
46
47
#if CONFIG_HARDCODED_TABLES
48
#define motionpixels_tableinit()
49
#include "libavcodec/motionpixels_tables.h"
50
#else
51
static
YuvPixel
mp_rgb_yuv_table
[1 << 15];
52
53
static
av_cold
void
mp_set_zero_yuv
(
YuvPixel
*p)
54
{
55
int
i
, j;
56
57
for
(
i
= 0;
i
< 31; ++
i
) {
58
for
(j = 31; j >
i
; --j)
59
if
(!(p[j].
u
| p[j].v | p[j].y))
60
p[j] = p[j - 1];
61
for
(j = 0; j < 31 -
i
; ++j)
62
if
(!(p[j].
u
| p[j].v | p[j].y))
63
p[j] = p[j + 1];
64
}
65
}
66
67
static
av_cold
void
mp_build_rgb_yuv_table
(
YuvPixel
*p)
68
{
69
int
y, v,
u
,
i
;
70
71
for
(y = 0; y <= 31; ++y)
72
for
(v = -31; v <= 31; ++v)
73
for
(
u
= -31;
u
<= 31; ++
u
) {
74
i
=
mp_yuv_to_rgb
(y, v,
u
, 0);
75
if
(
i
< (1 << 15) && !(p[
i
].
u
| p[
i
].v | p[
i
].y)) {
76
p[
i
].
y
= y;
77
p[
i
].
v
= v;
78
p[
i
].
u
=
u
;
79
}
80
}
81
for
(
i
= 0;
i
< 1024; ++
i
)
82
mp_set_zero_yuv
(p +
i
* 32);
83
}
84
85
static
av_cold
void
motionpixels_tableinit
(
void
)
86
{
87
mp_build_rgb_yuv_table
(
mp_rgb_yuv_table
);
88
}
89
#endif
/* CONFIG_HARDCODED_TABLES */
90
91
#endif
/* AVCODEC_MOTIONPIXELS_TABLEGEN_H */
YuvPixel::y
int8_t y
Definition:
motionpixels_tablegen.h:30
r
const char * r
Definition:
vf_curves.c:116
YuvPixel
Definition:
motionpixels_tablegen.h:29
u
#define u(width, name, range_min, range_max)
Definition:
cbs_h2645.c:264
b
#define b
Definition:
input.c:41
ff_crop_tab
#define ff_crop_tab
Definition:
motionpixels_tablegen.c:26
mp_set_zero_yuv
static av_cold void mp_set_zero_yuv(YuvPixel *p)
Definition:
motionpixels_tablegen.h:53
mp_yuv_to_rgb
static int mp_yuv_to_rgb(int y, int v, int u, int clip_rgb)
Definition:
motionpixels_tablegen.h:33
av_cold
#define av_cold
Definition:
attributes.h:90
g
const char * g
Definition:
vf_curves.c:117
motionpixels_tableinit
static av_cold void motionpixels_tableinit(void)
Definition:
motionpixels_tablegen.h:85
attributes.h
i
int i
Definition:
input.c:407
mp_rgb_yuv_table
static YuvPixel mp_rgb_yuv_table[1<< 15]
Definition:
motionpixels_tablegen.h:51
uint8_t
uint8_t
Definition:
audio_convert.c:194
cm
#define cm
Definition:
dvbsubdec.c:37
YuvPixel::v
int8_t v
Definition:
motionpixels_tablegen.h:30
mp_build_rgb_yuv_table
static av_cold void mp_build_rgb_yuv_table(YuvPixel *p)
Definition:
motionpixels_tablegen.h:67
MAX_NEG_CROP
#define MAX_NEG_CROP
Definition:
mathops.h:31
YuvPixel::u
int8_t u
Definition:
motionpixels_tablegen.h:30
Generated on Wed Aug 24 2022 21:34:07 for FFmpeg by
1.8.17