FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavfilter
colorspacedsp.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2016 Ronald S. Bultje <rsbultje@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 "
colorspacedsp.h
"
22
23
/*
24
* SS_W/H stands for "subsampling_w/h"
25
* it's analogous to AVPixFmtDescriptor->log2_chroma_w/h.
26
*/
27
#define SS_W 0
28
#define SS_H 0
29
30
#define BIT_DEPTH 8
31
#include "
colorspacedsp_template.c
"
32
33
#undef BIT_DEPTH
34
#define BIT_DEPTH 10
35
#include "
colorspacedsp_template.c
"
36
37
#undef BIT_DEPTH
38
#define BIT_DEPTH 12
39
#include "
colorspacedsp_template.c
"
40
41
#undef SS_W
42
#undef SS_H
43
44
#define SS_W 1
45
#define SS_H 0
46
47
#undef BIT_DEPTH
48
#define BIT_DEPTH 8
49
#include "
colorspacedsp_template.c
"
50
51
#undef BIT_DEPTH
52
#define BIT_DEPTH 10
53
#include "
colorspacedsp_template.c
"
54
55
#undef BIT_DEPTH
56
#define BIT_DEPTH 12
57
#include "
colorspacedsp_template.c
"
58
59
#undef SS_W
60
#undef SS_H
61
62
#define SS_W 1
63
#define SS_H 1
64
65
#undef BIT_DEPTH
66
#define BIT_DEPTH 8
67
#include "
colorspacedsp_template.c
"
68
69
#undef BIT_DEPTH
70
#define BIT_DEPTH 10
71
#include "
colorspacedsp_template.c
"
72
73
#undef BIT_DEPTH
74
#define BIT_DEPTH 12
75
#include "
colorspacedsp_template.c
"
76
77
static
void
multiply3x3_c
(int16_t *
buf
[3], ptrdiff_t
stride
,
78
int
w,
int
h
,
const
int16_t m[3][3][8])
79
{
80
int
y, x;
81
int16_t *buf0 = buf[0], *buf1 = buf[1], *buf2 = buf[2];
82
83
for
(y = 0; y <
h
; y++) {
84
for
(x = 0; x < w; x++) {
85
int
v0
= buf0[x], v1 = buf1[x], v2 = buf2[x];
86
87
buf0[x] = av_clip_int16((m[0][0][0] * v0 + m[0][1][0] * v1 +
88
m[0][2][0] * v2 + 8192) >> 14);
89
buf1[x] = av_clip_int16((m[1][0][0] * v0 + m[1][1][0] * v1 +
90
m[1][2][0] * v2 + 8192) >> 14);
91
buf2[x] = av_clip_int16((m[2][0][0] * v0 + m[2][1][0] * v1 +
92
m[2][2][0] * v2 + 8192) >> 14);
93
}
94
95
buf0 +=
stride
;
96
buf1 +=
stride
;
97
buf2 +=
stride
;
98
}
99
}
100
101
void
ff_colorspacedsp_init
(
ColorSpaceDSPContext
*dsp)
102
{
103
#define init_yuv2rgb_fn(bit) \
104
dsp->yuv2rgb[BPP_##bit][SS_444] = yuv2rgb_444p##bit##_c; \
105
dsp->yuv2rgb[BPP_##bit][SS_422] = yuv2rgb_422p##bit##_c; \
106
dsp->yuv2rgb[BPP_##bit][SS_420] = yuv2rgb_420p##bit##_c
107
108
init_yuv2rgb_fn
( 8);
109
init_yuv2rgb_fn
(10);
110
init_yuv2rgb_fn
(12);
111
112
#define init_rgb2yuv_fn(bit) \
113
dsp->rgb2yuv[BPP_##bit][SS_444] = rgb2yuv_444p##bit##_c; \
114
dsp->rgb2yuv[BPP_##bit][SS_422] = rgb2yuv_422p##bit##_c; \
115
dsp->rgb2yuv[BPP_##bit][SS_420] = rgb2yuv_420p##bit##_c
116
117
init_rgb2yuv_fn
( 8);
118
init_rgb2yuv_fn
(10);
119
init_rgb2yuv_fn
(12);
120
121
#define init_rgb2yuv_fsb_fn(bit) \
122
dsp->rgb2yuv_fsb[BPP_##bit][SS_444] = rgb2yuv_fsb_444p##bit##_c; \
123
dsp->rgb2yuv_fsb[BPP_##bit][SS_422] = rgb2yuv_fsb_422p##bit##_c; \
124
dsp->rgb2yuv_fsb[BPP_##bit][SS_420] = rgb2yuv_fsb_420p##bit##_c
125
126
init_rgb2yuv_fsb_fn
( 8);
127
init_rgb2yuv_fsb_fn
(10);
128
init_rgb2yuv_fsb_fn
(12);
129
130
#define init_yuv2yuv_fn(idx1, bit1, bit2) \
131
dsp->yuv2yuv[idx1][BPP_##bit2][SS_444] = yuv2yuv_444p##bit1##to##bit2##_c; \
132
dsp->yuv2yuv[idx1][BPP_##bit2][SS_422] = yuv2yuv_422p##bit1##to##bit2##_c; \
133
dsp->yuv2yuv[idx1][BPP_##bit2][SS_420] = yuv2yuv_420p##bit1##to##bit2##_c
134
#define init_yuv2yuv_fns(bit1) \
135
init_yuv2yuv_fn(BPP_##bit1, bit1, 8); \
136
init_yuv2yuv_fn(BPP_##bit1, bit1, 10); \
137
init_yuv2yuv_fn(BPP_##bit1, bit1, 12)
138
139
init_yuv2yuv_fns
( 8);
140
init_yuv2yuv_fns
(10);
141
init_yuv2yuv_fns
(12);
142
143
dsp->
multiply3x3
=
multiply3x3_c
;
144
145
if
(ARCH_X86)
146
ff_colorspacedsp_x86_init
(dsp);
147
}
h
h
Definition:
vp9dsp_template.c:2038
v0
GLfloat v0
Definition:
opengl_enc.c:107
multiply3x3_c
static void multiply3x3_c(int16_t *buf[3], ptrdiff_t stride, int w, int h, const int16_t m[3][3][8])
Definition:
colorspacedsp.c:77
ff_colorspacedsp_x86_init
void ff_colorspacedsp_x86_init(ColorSpaceDSPContext *dsp)
Definition:
colorspacedsp_init.c:79
init_rgb2yuv_fn
#define init_rgb2yuv_fn(bit)
ColorSpaceDSPContext
Definition:
colorspacedsp.h:59
init_rgb2yuv_fsb_fn
#define init_rgb2yuv_fsb_fn(bit)
init_yuv2yuv_fns
#define init_yuv2yuv_fns(bit1)
colorspacedsp_template.c
colorspacedsp.h
ColorSpaceDSPContext::multiply3x3
void(* multiply3x3)(int16_t *data[3], ptrdiff_t stride, int w, int h, const int16_t m[3][3][8])
Definition:
colorspacedsp.h:74
buf
void * buf
Definition:
avisynth_c.h:690
init_yuv2rgb_fn
#define init_yuv2rgb_fn(bit)
stride
GLint GLenum GLboolean GLsizei stride
Definition:
opengl_enc.c:105
ff_colorspacedsp_init
void ff_colorspacedsp_init(ColorSpaceDSPContext *dsp)
Definition:
colorspacedsp.c:101
stride
#define stride
Generated on Fri Jan 12 2018 01:45:52 for FFmpeg by
1.8.6