summaryrefslogtreecommitdiff
path: root/libavfilter/vf_maskedmerge.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2022-02-20 23:52:10 +0100
committerPaul B Mahol <onemda@gmail.com>2022-02-21 00:35:10 +0100
commitac0fdac0fcfe73c0ad72ddf4021acadc0878e4f3 (patch)
treec744604c354c9e79ffc726082a6f8a35a15c0bae /libavfilter/vf_maskedmerge.c
parent954279564a0ae38e72ce828a90c7d57f9b90a29e (diff)
avfilter/vf_maskedmerge: refactor slice function
Diffstat (limited to 'libavfilter/vf_maskedmerge.c')
-rw-r--r--libavfilter/vf_maskedmerge.c73
1 files changed, 30 insertions, 43 deletions
diff --git a/libavfilter/vf_maskedmerge.c b/libavfilter/vf_maskedmerge.c
index f86bf0c748..dca4bc5194 100644
--- a/libavfilter/vf_maskedmerge.c
+++ b/libavfilter/vf_maskedmerge.c
@@ -137,51 +137,38 @@ static int process_frame(FFFrameSync *fs)
return ff_filter_frame(outlink, out);
}
-static void maskedmerge8(const uint8_t *bsrc, const uint8_t *osrc,
- const uint8_t *msrc, uint8_t *dst,
- ptrdiff_t blinesize, ptrdiff_t olinesize,
- ptrdiff_t mlinesize, ptrdiff_t dlinesize,
- int w, int h,
- int half, int shift)
-{
- int x, y;
-
- for (y = 0; y < h; y++) {
- for (x = 0; x < w; x++) {
- dst[x] = bsrc[x] + ((msrc[x] * (osrc[x] - bsrc[x]) + 128) >> 8);
- }
-
- dst += dlinesize;
- bsrc += blinesize;
- osrc += olinesize;
- msrc += mlinesize;
- }
+#define MASKEDMERGE(n, type, half, shift) \
+static void maskedmerge##n(const uint8_t *bbsrc, const uint8_t *oosrc, \
+ const uint8_t *mmsrc, uint8_t *ddst, \
+ ptrdiff_t blinesize, ptrdiff_t olinesize, \
+ ptrdiff_t mlinesize, ptrdiff_t dlinesize, \
+ int w, int h, \
+ int hhalf, int sshift) \
+{ \
+ const type *bsrc = (const type *)bbsrc; \
+ const type *osrc = (const type *)oosrc; \
+ const type *msrc = (const type *)mmsrc; \
+ type *dst = (type *)ddst; \
+ \
+ dlinesize /= sizeof(type); \
+ blinesize /= sizeof(type); \
+ olinesize /= sizeof(type); \
+ mlinesize /= sizeof(type); \
+ \
+ for (int y = 0; y < h; y++) { \
+ for (int x = 0; x < w; x++) { \
+ dst[x] = bsrc[x] + ((msrc[x] * (osrc[x] - bsrc[x]) + half) >> shift); \
+ } \
+ \
+ dst += dlinesize; \
+ bsrc += blinesize; \
+ osrc += olinesize; \
+ msrc += mlinesize; \
+ } \
}
-static void maskedmerge16(const uint8_t *bbsrc, const uint8_t *oosrc,
- const uint8_t *mmsrc, uint8_t *ddst,
- ptrdiff_t blinesize, ptrdiff_t olinesize,
- ptrdiff_t mlinesize, ptrdiff_t dlinesize,
- int w, int h,
- int half, int shift)
-{
- const uint16_t *bsrc = (const uint16_t *)bbsrc;
- const uint16_t *osrc = (const uint16_t *)oosrc;
- const uint16_t *msrc = (const uint16_t *)mmsrc;
- uint16_t *dst = (uint16_t *)ddst;
- int x, y;
-
- for (y = 0; y < h; y++) {
- for (x = 0; x < w; x++) {
- dst[x] = bsrc[x] + ((msrc[x] * (osrc[x] - bsrc[x]) + half) >> shift);
- }
-
- dst += dlinesize / 2;
- bsrc += blinesize / 2;
- osrc += olinesize / 2;
- msrc += mlinesize / 2;
- }
-}
+MASKEDMERGE(8, uint8_t, 128, 8)
+MASKEDMERGE(16, uint16_t, hhalf, sshift)
static int config_input(AVFilterLink *inlink)
{