40#define SHIFT ((DEPTH + 1) / 2)
41#define BINS (1 << SHIFT)
42#define MASK (BINS - 1)
43#define fn3(a,b) a##_##b
44#define fn2(a,b) fn3(a,b)
45#define fn(a) fn2(a, DEPTH)
47#define PICK_COARSE_BIN(x, y) (BINS * (x) + ((y) >> SHIFT))
48#define PICK_FINE_BIN(x, y, z) (BINS * ((x) * ((y) >> SHIFT) + (z)) + ((y) & MASK))
51 uint8_t *ddst,
int dst_linesize,
int width,
int height,
52 int slice_h_start,
int slice_h_end,
int jobnr)
55 htype *ccoarse =
s->coarse[jobnr];
56 htype *cfine =
s->fine[jobnr];
57 const int radius =
s->radius;
58 const int radiusV =
s->radiusV;
65 src_linesize /=
sizeof(
pixel);
66 dst_linesize /=
sizeof(
pixel);
68 memset(cfine, 0,
s->fine_size *
sizeof(*cfine));
69 memset(ccoarse, 0,
s->coarse_size *
sizeof(*ccoarse));
71 srcp =
src +
FFMAX(0, slice_h_start - radiusV) * src_linesize;
79 srcp =
src +
FFMAX(0, slice_h_start - radiusV - (jobnr != 0)) * src_linesize;
80 for (
int i = 0;
i < radiusV + (jobnr != 0) * (1 + radiusV);
i++) {
81 for (
int j = 0; j <
width; j++) {
90 for (
int i = slice_h_start;
i < slice_h_end;
i++) {
95 p = srcp + src_linesize *
FFMAX(0,
i - radiusV - 1);
96 for (
int j = 0; j <
width; j++) {
101 p = srcp + src_linesize *
FFMIN(
height - 1,
i + radiusV);
102 for (
int j = 0; j <
width; j++) {
107 s->hmuladd(coarse, &ccoarse[0], radius,
BINS);
108 for (
int j = 0; j < radius; j++)
109 s->hadd(coarse, &ccoarse[
BINS * j],
BINS);
110 for (
int k = 0; k <
BINS; k++)
111 s->hmuladd(&fine[k][0], &cfine[
BINS *
width * k], 2 * radius + 1,
BINS);
113 for (
int j = 0; j <
width; j++) {
119 for (k = 0; k <
BINS; k++) {
128 if (luc[k] <= j - radius) {
129 memset(&fine[k], 0,
BINS *
sizeof(
htype));
130 for (luc[k] = j - radius; luc[k] <
FFMIN(j + radius + 1,
width); luc[k]++)
132 if (luc[k] < j + radius + 1) {
134 luc[k] = j + radius + 1;
137 for (; luc[k] < j + radius + 1; luc[k]++) {
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static AVFormatContext * ctx
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Main libavfilter public API header.
#define i(width, name, range_min, range_max)