[FFmpeg-cvslog] avfilter/vf_framerate: remove duplicate code with macro-based function
Limin Wang
git at videolan.org
Sat Sep 28 22:55:09 EEST 2019
ffmpeg | branch: master | Limin Wang <lance.lmwang at gmail.com> | Tue Sep 24 18:18:09 2019 +0800| [86f0411a5270295963d32c42a192193400c2c912] | committer: Marton Balint
avfilter/vf_framerate: remove duplicate code with macro-based function
Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
Signed-off-by: Marton Balint <cus at passwd.hu>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=86f0411a5270295963d32c42a192193400c2c912
---
libavfilter/framerate.h | 3 +--
libavfilter/vf_framerate.c | 58 +++++++++++++++++++++-------------------------
2 files changed, 27 insertions(+), 34 deletions(-)
diff --git a/libavfilter/framerate.h b/libavfilter/framerate.h
index 2947c54cc6..d255635686 100644
--- a/libavfilter/framerate.h
+++ b/libavfilter/framerate.h
@@ -28,8 +28,7 @@
ptrdiff_t width, ptrdiff_t height, \
int factor1, int factor2, int half
-#define BLEND_FACTOR_DEPTH8 7
-#define BLEND_FACTOR_DEPTH16 15
+#define BLEND_FACTOR_DEPTH(n) (n-1)
typedef void (*blend_func)(BLEND_FUNC_PARAMS);
diff --git a/libavfilter/vf_framerate.c b/libavfilter/vf_framerate.c
index 5077a7c8a1..6c8d01c94b 100644
--- a/libavfilter/vf_framerate.c
+++ b/libavfilter/vf_framerate.c
@@ -235,44 +235,38 @@ static int query_formats(AVFilterContext *ctx)
return ff_set_common_formats(ctx, fmts_list);
}
-static void blend_frames_c(BLEND_FUNC_PARAMS)
-{
- int line, pixel;
- for (line = 0; line < height; line++) {
- for (pixel = 0; pixel < width; pixel++)
- dst[pixel] = ((src1[pixel] * factor1) + (src2[pixel] * factor2) + half) >> BLEND_FACTOR_DEPTH8;
- src1 += src1_linesize;
- src2 += src2_linesize;
- dst += dst_linesize;
- }
-}
-
-static void blend_frames16_c(BLEND_FUNC_PARAMS)
-{
- int line, pixel;
- uint16_t *dstw = (uint16_t *)dst;
- uint16_t *src1w = (uint16_t *)src1;
- uint16_t *src2w = (uint16_t *)src2;
- width /= 2;
- src1_linesize /= 2;
- src2_linesize /= 2;
- dst_linesize /= 2;
- for (line = 0; line < height; line++) {
- for (pixel = 0; pixel < width; pixel++)
- dstw[pixel] = ((src1w[pixel] * factor1) + (src2w[pixel] * factor2) + half) >> BLEND_FACTOR_DEPTH16;
- src1w += src1_linesize;
- src2w += src2_linesize;
- dstw += dst_linesize;
- }
+#define BLEND_FRAME_FUNC(nbits) \
+static void blend_frames##nbits##_c(BLEND_FUNC_PARAMS) \
+{ \
+ int line, pixel; \
+ uint##nbits##_t *dstw = (uint##nbits##_t *)dst; \
+ uint##nbits##_t *src1w = (uint##nbits##_t *)src1; \
+ uint##nbits##_t *src2w = (uint##nbits##_t *)src2; \
+ int bytes = nbits / 8; \
+ width /= bytes; \
+ src1_linesize /= bytes; \
+ src2_linesize /= bytes; \
+ dst_linesize /= bytes; \
+ for (line = 0; line < height; line++) { \
+ for (pixel = 0; pixel < width; pixel++) \
+ dstw[pixel] = ((src1w[pixel] * factor1) + \
+ (src2w[pixel] * factor2) + half) \
+ >> BLEND_FACTOR_DEPTH(nbits); \
+ src1w += src1_linesize; \
+ src2w += src2_linesize; \
+ dstw += dst_linesize; \
+ } \
}
+BLEND_FRAME_FUNC(8)
+BLEND_FRAME_FUNC(16)
void ff_framerate_init(FrameRateContext *s)
{
if (s->bitdepth == 8) {
- s->blend_factor_max = 1 << BLEND_FACTOR_DEPTH8;
- s->blend = blend_frames_c;
+ s->blend_factor_max = 1 << BLEND_FACTOR_DEPTH(8);
+ s->blend = blend_frames8_c;
} else {
- s->blend_factor_max = 1 << BLEND_FACTOR_DEPTH16;
+ s->blend_factor_max = 1 << BLEND_FACTOR_DEPTH(16);
s->blend = blend_frames16_c;
}
if (ARCH_X86)
More information about the ffmpeg-cvslog
mailing list