mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-27 13:30:45 +00:00
vf_blend: Reduce number of arguments for kernel function
This commit is contained in:
parent
ee281b884e
commit
4574323973
@ -67,7 +67,7 @@ typedef struct FilterParams {
|
||||
void (*blend)(const uint8_t *top, ptrdiff_t top_linesize,
|
||||
const uint8_t *bottom, ptrdiff_t bottom_linesize,
|
||||
uint8_t *dst, ptrdiff_t dst_linesize,
|
||||
ptrdiff_t width, ptrdiff_t start, ptrdiff_t end,
|
||||
ptrdiff_t width, ptrdiff_t height,
|
||||
struct FilterParams *param, double *values);
|
||||
} FilterParams;
|
||||
|
||||
|
@ -122,11 +122,11 @@ AVFILTER_DEFINE_CLASS(blend);
|
||||
static void blend_copy ## src(const uint8_t *top, ptrdiff_t top_linesize, \
|
||||
const uint8_t *bottom, ptrdiff_t bottom_linesize,\
|
||||
uint8_t *dst, ptrdiff_t dst_linesize, \
|
||||
ptrdiff_t width, ptrdiff_t start, ptrdiff_t end, \
|
||||
ptrdiff_t width, ptrdiff_t height, \
|
||||
FilterParams *param, double *values) \
|
||||
{ \
|
||||
av_image_copy_plane(dst, dst_linesize, src, src ## _linesize, \
|
||||
width, end - start); \
|
||||
width, height); \
|
||||
}
|
||||
|
||||
COPY(top)
|
||||
@ -137,13 +137,13 @@ COPY(bottom)
|
||||
static void blend_normal_8bit(const uint8_t *top, ptrdiff_t top_linesize,
|
||||
const uint8_t *bottom, ptrdiff_t bottom_linesize,
|
||||
uint8_t *dst, ptrdiff_t dst_linesize,
|
||||
ptrdiff_t width, ptrdiff_t start, ptrdiff_t end,
|
||||
ptrdiff_t width, ptrdiff_t height,
|
||||
FilterParams *param, double *values)
|
||||
{
|
||||
const double opacity = param->opacity;
|
||||
int i, j;
|
||||
|
||||
for (i = start; i < end; i++) {
|
||||
for (i = 0; i < height; i++) {
|
||||
for (j = 0; j < width; j++) {
|
||||
dst[j] = top[j] * opacity + bottom[j] * (1. - opacity);
|
||||
}
|
||||
@ -156,7 +156,7 @@ static void blend_normal_8bit(const uint8_t *top, ptrdiff_t top_linesize,
|
||||
static void blend_normal_16bit(const uint8_t *_top, ptrdiff_t top_linesize,
|
||||
const uint8_t *_bottom, ptrdiff_t bottom_linesize,
|
||||
uint8_t *_dst, ptrdiff_t dst_linesize,
|
||||
ptrdiff_t width, ptrdiff_t start, ptrdiff_t end,
|
||||
ptrdiff_t width, ptrdiff_t height,
|
||||
FilterParams *param, double *values)
|
||||
{
|
||||
const uint16_t *top = (uint16_t*)_top;
|
||||
@ -168,7 +168,7 @@ static void blend_normal_16bit(const uint8_t *_top, ptrdiff_t top_linesize,
|
||||
top_linesize /= 2;
|
||||
bottom_linesize /= 2;
|
||||
|
||||
for (i = start; i < end; i++) {
|
||||
for (i = 0; i < height; i++) {
|
||||
for (j = 0; j < width; j++) {
|
||||
dst[j] = top[j] * opacity + bottom[j] * (1. - opacity);
|
||||
}
|
||||
@ -182,13 +182,13 @@ static void blend_normal_16bit(const uint8_t *_top, ptrdiff_t top_linesize,
|
||||
static void blend_## name##_8bit(const uint8_t *top, ptrdiff_t top_linesize, \
|
||||
const uint8_t *bottom, ptrdiff_t bottom_linesize, \
|
||||
uint8_t *dst, ptrdiff_t dst_linesize, \
|
||||
ptrdiff_t width, ptrdiff_t start, ptrdiff_t end, \
|
||||
ptrdiff_t width, ptrdiff_t height, \
|
||||
FilterParams *param, double *values) \
|
||||
{ \
|
||||
double opacity = param->opacity; \
|
||||
int i, j; \
|
||||
\
|
||||
for (i = start; i < end; i++) { \
|
||||
for (i = 0; i < height; i++) { \
|
||||
for (j = 0; j < width; j++) { \
|
||||
dst[j] = top[j] + ((expr) - top[j]) * opacity; \
|
||||
} \
|
||||
@ -202,7 +202,7 @@ static void blend_## name##_8bit(const uint8_t *top, ptrdiff_t top_linesize,
|
||||
static void blend_## name##_16bit(const uint8_t *_top, ptrdiff_t top_linesize, \
|
||||
const uint8_t *_bottom, ptrdiff_t bottom_linesize, \
|
||||
uint8_t *_dst, ptrdiff_t dst_linesize, \
|
||||
ptrdiff_t width, ptrdiff_t start, ptrdiff_t end, \
|
||||
ptrdiff_t width, ptrdiff_t height, \
|
||||
FilterParams *param, double *values) \
|
||||
{ \
|
||||
const uint16_t *top = (uint16_t*)_top; \
|
||||
@ -214,7 +214,7 @@ static void blend_## name##_16bit(const uint8_t *_top, ptrdiff_t top_linesize,
|
||||
top_linesize /= 2; \
|
||||
bottom_linesize /= 2; \
|
||||
\
|
||||
for (i = start; i < end; i++) { \
|
||||
for (i = 0; i < height; i++) { \
|
||||
for (j = 0; j < width; j++) { \
|
||||
dst[j] = top[j] + ((expr) - top[j]) * opacity; \
|
||||
} \
|
||||
@ -306,7 +306,7 @@ DEFINE_BLEND16(linearlight,av_clip_uint16((B < 32768) ? B + 2 * A - 65535 : B +
|
||||
static void blend_expr_## name(const uint8_t *_top, ptrdiff_t top_linesize, \
|
||||
const uint8_t *_bottom, ptrdiff_t bottom_linesize, \
|
||||
uint8_t *_dst, ptrdiff_t dst_linesize, \
|
||||
ptrdiff_t width, ptrdiff_t start, ptrdiff_t end, \
|
||||
ptrdiff_t width, ptrdiff_t height, \
|
||||
FilterParams *param, double *values) \
|
||||
{ \
|
||||
const type *top = (type*)_top; \
|
||||
@ -318,7 +318,7 @@ static void blend_expr_## name(const uint8_t *_top, ptrdiff_t top_linesize,
|
||||
top_linesize /= div; \
|
||||
bottom_linesize /= div; \
|
||||
\
|
||||
for (y = start; y < end; y++) { \
|
||||
for (y = 0; y < height; y++) { \
|
||||
values[VAR_Y] = y; \
|
||||
for (x = 0; x < width; x++) { \
|
||||
values[VAR_X] = x; \
|
||||
@ -340,6 +340,7 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
|
||||
ThreadData *td = arg;
|
||||
int slice_start = (td->h * jobnr ) / nb_jobs;
|
||||
int slice_end = (td->h * (jobnr+1)) / nb_jobs;
|
||||
int height = slice_end - slice_start;
|
||||
const uint8_t *top = td->top->data[td->plane];
|
||||
const uint8_t *bottom = td->bottom->data[td->plane];
|
||||
uint8_t *dst = td->dst->data[td->plane];
|
||||
@ -358,7 +359,7 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
|
||||
td->bottom->linesize[td->plane],
|
||||
dst + slice_start * td->dst->linesize[td->plane],
|
||||
td->dst->linesize[td->plane],
|
||||
td->w, slice_start, slice_end, td->param, &values[0]);
|
||||
td->w, height, td->param, &values[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -42,11 +42,10 @@ cglobal blend_%1, 5, 7, %2, top, top_linesize, bottom, bottom_linesize, dst, end
|
||||
%define dst_linesizeq r5mp
|
||||
%define widthq r6mp
|
||||
%endif
|
||||
mov endd, dword r8m
|
||||
mov endd, dword r7m
|
||||
add topq, widthq
|
||||
add bottomq, widthq
|
||||
add dstq, widthq
|
||||
sub endd, dword r7m ; start
|
||||
neg widthq
|
||||
%endmacro
|
||||
|
||||
|
@ -27,7 +27,7 @@
|
||||
void ff_blend_##name##_##opt(const uint8_t *top, ptrdiff_t top_linesize, \
|
||||
const uint8_t *bottom, ptrdiff_t bottom_linesize, \
|
||||
uint8_t *dst, ptrdiff_t dst_linesize, \
|
||||
ptrdiff_t width, ptrdiff_t start, ptrdiff_t end, \
|
||||
ptrdiff_t width, ptrdiff_t height, \
|
||||
struct FilterParams *param, double *values);
|
||||
|
||||
BLEND_FUNC(addition, sse2)
|
||||
|
Loading…
Reference in New Issue
Block a user