[FFmpeg-cvslog] avfilter/vf_maskedmerge: refactor slice function

Paul B Mahol git at videolan.org
Mon Feb 21 01:34:44 EET 2022


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sun Feb 20 23:52:10 2022 +0100| [ac0fdac0fcfe73c0ad72ddf4021acadc0878e4f3] | committer: Paul B Mahol

avfilter/vf_maskedmerge: refactor slice function

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ac0fdac0fcfe73c0ad72ddf4021acadc0878e4f3
---

 libavfilter/vf_maskedmerge.c | 73 ++++++++++++++++++--------------------------
 1 file 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)
 {



More information about the ffmpeg-cvslog mailing list