2 * Header file for hardcoded motion pixels RGB to YUV table
4 * Copyright (c) 2009 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
6 * This file is part of FFmpeg.
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.
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.
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
23 #ifndef AVCODEC_MOTIONPIXELS_TABLEGEN_H
24 #define AVCODEC_MOTIONPIXELS_TABLEGEN_H
27 #include "libavutil/attributes.h"
29 typedef struct YuvPixel
{
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
;
37 r
= (1000 * y
+ 701 * v
) / 1000;
38 g
= (1000 * y
- 357 * v
- 172 * u
) / 1000;
39 b
= (1000 * y
+ 886 * u
) / 1000;
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
;
47 #if CONFIG_HARDCODED_TABLES
48 #define motionpixels_tableinit()
49 #include "libavcodec/motionpixels_tables.h"
51 static YuvPixel mp_rgb_yuv_table
[1 << 15];
53 static av_cold
void mp_set_zero_yuv(YuvPixel
*p
)
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
))
61 for (j
= 0; j
< 31 - i
; ++j
)
62 if (!(p
[j
].u
| p
[j
].v
| p
[j
].y
))
67 static av_cold
void mp_build_rgb_yuv_table(YuvPixel
*p
)
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
)) {
81 for (i
= 0; i
< 1024; ++i
)
82 mp_set_zero_yuv(p
+ i
* 32);
85 static av_cold
void motionpixels_tableinit(void)
87 mp_build_rgb_yuv_table(mp_rgb_yuv_table
);
89 #endif /* CONFIG_HARDCODED_TABLES */
91 #endif /* AVCODEC_MOTIONPIXELS_TABLEGEN_H */