mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-27 05:20:48 +00:00
avfilter/vf_framerate: remove duplicate code with macro-based function
Signed-off-by: Limin Wang <lance.lmwang@gmail.com> Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
fd5fdca953
commit
86f0411a52
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user