|
|
|
@ -85,39 +85,24 @@ static const enum AVPixelFormat pix_fmts[] = { |
|
|
|
|
AV_PIX_FMT_NONE |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static void maskedmin8(const uint8_t *src, uint8_t *dst, const uint8_t *f1, const uint8_t *f2, int w) |
|
|
|
|
{ |
|
|
|
|
for (int x = 0; x < w; x++) |
|
|
|
|
dst[x] = FFABS(src[x] - f2[x]) < FFABS(src[x] - f1[x]) ? f2[x] : f1[x]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void maskedmax8(const uint8_t *src, uint8_t *dst, const uint8_t *f1, const uint8_t *f2, int w) |
|
|
|
|
{ |
|
|
|
|
for (int x = 0; x < w; x++) |
|
|
|
|
dst[x] = FFABS(src[x] - f2[x]) > FFABS(src[x] - f1[x]) ? f2[x] : f1[x]; |
|
|
|
|
#define MASKED(n, type, op) \ |
|
|
|
|
static void masked##n(const uint8_t *ssrc, uint8_t *ddst, \
|
|
|
|
|
const uint8_t *ff1, \
|
|
|
|
|
const uint8_t *ff2, int w) \
|
|
|
|
|
{ \
|
|
|
|
|
const type *src = (const type *)ssrc; \
|
|
|
|
|
const type *f1 = (const type *)ff1; \
|
|
|
|
|
const type *f2 = (const type *)ff2; \
|
|
|
|
|
type *dst = (type *)ddst; \
|
|
|
|
|
\
|
|
|
|
|
for (int x = 0; x < w; x++) \
|
|
|
|
|
dst[x] = FFABS(src[x] - f2[x]) op FFABS(src[x] - f1[x]) ? f2[x] : f1[x]; \
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void maskedmin16(const uint8_t *ssrc, uint8_t *ddst, const uint8_t *ff1, const uint8_t *ff2, int w) |
|
|
|
|
{ |
|
|
|
|
const uint16_t *src = (const uint16_t *)ssrc; |
|
|
|
|
const uint16_t *f1 = (const uint16_t *)ff1; |
|
|
|
|
const uint16_t *f2 = (const uint16_t *)ff2; |
|
|
|
|
uint16_t *dst = (uint16_t *)ddst; |
|
|
|
|
|
|
|
|
|
for (int x = 0; x < w; x++) |
|
|
|
|
dst[x] = FFABS(src[x] - f2[x]) < FFABS(src[x] - f1[x]) ? f2[x] : f1[x]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void maskedmax16(const uint8_t *ssrc, uint8_t *ddst, const uint8_t *ff1, const uint8_t *ff2, int w) |
|
|
|
|
{ |
|
|
|
|
const uint16_t *src = (const uint16_t *)ssrc; |
|
|
|
|
const uint16_t *f1 = (const uint16_t *)ff1; |
|
|
|
|
const uint16_t *f2 = (const uint16_t *)ff2; |
|
|
|
|
uint16_t *dst = (uint16_t *)ddst; |
|
|
|
|
|
|
|
|
|
for (int x = 0; x < w; x++) |
|
|
|
|
dst[x] = FFABS(src[x] - f2[x]) > FFABS(src[x] - f1[x]) ? f2[x] : f1[x]; |
|
|
|
|
} |
|
|
|
|
MASKED(min8, uint8_t, <) |
|
|
|
|
MASKED(max8, uint8_t, >) |
|
|
|
|
MASKED(min16, uint16_t, <) |
|
|
|
|
MASKED(max16, uint16_t, >) |
|
|
|
|
|
|
|
|
|
static int config_input(AVFilterLink *inlink) |
|
|
|
|
{ |
|
|
|
|