vf_blend: Reduce number of arguments for kernel function

This commit is contained in:
Timothy Gu 2016-02-14 02:01:35 +00:00
parent ee281b884e
commit 4574323973
4 changed files with 17 additions and 17 deletions

View File

@ -67,7 +67,7 @@ typedef struct FilterParams {
void (*blend)(const uint8_t *top, ptrdiff_t top_linesize, void (*blend)(const uint8_t *top, ptrdiff_t top_linesize,
const uint8_t *bottom, ptrdiff_t bottom_linesize, const uint8_t *bottom, ptrdiff_t bottom_linesize,
uint8_t *dst, ptrdiff_t dst_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); struct FilterParams *param, double *values);
} FilterParams; } FilterParams;

View File

@ -122,11 +122,11 @@ AVFILTER_DEFINE_CLASS(blend);
static void blend_copy ## src(const uint8_t *top, ptrdiff_t top_linesize, \ static void blend_copy ## src(const uint8_t *top, ptrdiff_t top_linesize, \
const uint8_t *bottom, ptrdiff_t bottom_linesize,\ const uint8_t *bottom, ptrdiff_t bottom_linesize,\
uint8_t *dst, ptrdiff_t dst_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) \ FilterParams *param, double *values) \
{ \ { \
av_image_copy_plane(dst, dst_linesize, src, src ## _linesize, \ av_image_copy_plane(dst, dst_linesize, src, src ## _linesize, \
width, end - start); \ width, height); \
} }
COPY(top) COPY(top)
@ -137,13 +137,13 @@ COPY(bottom)
static void blend_normal_8bit(const uint8_t *top, ptrdiff_t top_linesize, static void blend_normal_8bit(const uint8_t *top, ptrdiff_t top_linesize,
const uint8_t *bottom, ptrdiff_t bottom_linesize, const uint8_t *bottom, ptrdiff_t bottom_linesize,
uint8_t *dst, ptrdiff_t dst_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) FilterParams *param, double *values)
{ {
const double opacity = param->opacity; const double opacity = param->opacity;
int i, j; int i, j;
for (i = start; i < end; i++) { for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) { for (j = 0; j < width; j++) {
dst[j] = top[j] * opacity + bottom[j] * (1. - opacity); 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, static void blend_normal_16bit(const uint8_t *_top, ptrdiff_t top_linesize,
const uint8_t *_bottom, ptrdiff_t bottom_linesize, const uint8_t *_bottom, ptrdiff_t bottom_linesize,
uint8_t *_dst, ptrdiff_t dst_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) FilterParams *param, double *values)
{ {
const uint16_t *top = (uint16_t*)_top; 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; top_linesize /= 2;
bottom_linesize /= 2; bottom_linesize /= 2;
for (i = start; i < end; i++) { for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) { for (j = 0; j < width; j++) {
dst[j] = top[j] * opacity + bottom[j] * (1. - opacity); 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, \ static void blend_## name##_8bit(const uint8_t *top, ptrdiff_t top_linesize, \
const uint8_t *bottom, ptrdiff_t bottom_linesize, \ const uint8_t *bottom, ptrdiff_t bottom_linesize, \
uint8_t *dst, ptrdiff_t dst_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) \ FilterParams *param, double *values) \
{ \ { \
double opacity = param->opacity; \ double opacity = param->opacity; \
int i, j; \ int i, j; \
\ \
for (i = start; i < end; i++) { \ for (i = 0; i < height; i++) { \
for (j = 0; j < width; j++) { \ for (j = 0; j < width; j++) { \
dst[j] = top[j] + ((expr) - top[j]) * opacity; \ 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, \ static void blend_## name##_16bit(const uint8_t *_top, ptrdiff_t top_linesize, \
const uint8_t *_bottom, ptrdiff_t bottom_linesize, \ const uint8_t *_bottom, ptrdiff_t bottom_linesize, \
uint8_t *_dst, ptrdiff_t dst_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) \ FilterParams *param, double *values) \
{ \ { \
const uint16_t *top = (uint16_t*)_top; \ 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; \ top_linesize /= 2; \
bottom_linesize /= 2; \ bottom_linesize /= 2; \
\ \
for (i = start; i < end; i++) { \ for (i = 0; i < height; i++) { \
for (j = 0; j < width; j++) { \ for (j = 0; j < width; j++) { \
dst[j] = top[j] + ((expr) - top[j]) * opacity; \ 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, \ static void blend_expr_## name(const uint8_t *_top, ptrdiff_t top_linesize, \
const uint8_t *_bottom, ptrdiff_t bottom_linesize, \ const uint8_t *_bottom, ptrdiff_t bottom_linesize, \
uint8_t *_dst, ptrdiff_t dst_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) \ FilterParams *param, double *values) \
{ \ { \
const type *top = (type*)_top; \ 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; \ top_linesize /= div; \
bottom_linesize /= div; \ bottom_linesize /= div; \
\ \
for (y = start; y < end; y++) { \ for (y = 0; y < height; y++) { \
values[VAR_Y] = y; \ values[VAR_Y] = y; \
for (x = 0; x < width; x++) { \ for (x = 0; x < width; x++) { \
values[VAR_X] = 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; ThreadData *td = arg;
int slice_start = (td->h * jobnr ) / nb_jobs; int slice_start = (td->h * jobnr ) / nb_jobs;
int slice_end = (td->h * (jobnr+1)) / 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 *top = td->top->data[td->plane];
const uint8_t *bottom = td->bottom->data[td->plane]; const uint8_t *bottom = td->bottom->data[td->plane];
uint8_t *dst = td->dst->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], td->bottom->linesize[td->plane],
dst + slice_start * td->dst->linesize[td->plane], dst + slice_start * td->dst->linesize[td->plane],
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; return 0;
} }

View File

@ -42,11 +42,10 @@ cglobal blend_%1, 5, 7, %2, top, top_linesize, bottom, bottom_linesize, dst, end
%define dst_linesizeq r5mp %define dst_linesizeq r5mp
%define widthq r6mp %define widthq r6mp
%endif %endif
mov endd, dword r8m mov endd, dword r7m
add topq, widthq add topq, widthq
add bottomq, widthq add bottomq, widthq
add dstq, widthq add dstq, widthq
sub endd, dword r7m ; start
neg widthq neg widthq
%endmacro %endmacro

View File

@ -27,7 +27,7 @@
void ff_blend_##name##_##opt(const uint8_t *top, ptrdiff_t top_linesize, \ void ff_blend_##name##_##opt(const uint8_t *top, ptrdiff_t top_linesize, \
const uint8_t *bottom, ptrdiff_t bottom_linesize, \ const uint8_t *bottom, ptrdiff_t bottom_linesize, \
uint8_t *dst, ptrdiff_t dst_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); struct FilterParams *param, double *values);
BLEND_FUNC(addition, sse2) BLEND_FUNC(addition, sse2)