mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-23 15:53:08 +00:00
avfilter/vf_blend: fix incorrect Y variable when threading is used
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
6b852a3fd9
commit
5b8faaad6c
@ -70,7 +70,7 @@ typedef struct FilterParams {
|
|||||||
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 height,
|
ptrdiff_t width, ptrdiff_t height,
|
||||||
struct FilterParams *param, double *values);
|
struct FilterParams *param, double *values, int starty);
|
||||||
} FilterParams;
|
} FilterParams;
|
||||||
|
|
||||||
void ff_blend_init(FilterParams *param, int is_16bit);
|
void ff_blend_init(FilterParams *param, int is_16bit);
|
||||||
|
@ -125,7 +125,7 @@ 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 height, \
|
ptrdiff_t width, ptrdiff_t height, \
|
||||||
FilterParams *param, double *values) \
|
FilterParams *param, double *values, int starty) \
|
||||||
{ \
|
{ \
|
||||||
av_image_copy_plane(dst, dst_linesize, src, src ## _linesize, \
|
av_image_copy_plane(dst, dst_linesize, src, src ## _linesize, \
|
||||||
width, height); \
|
width, height); \
|
||||||
@ -140,7 +140,7 @@ 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 height,
|
ptrdiff_t width, ptrdiff_t height,
|
||||||
FilterParams *param, double *values)
|
FilterParams *param, double *values, int starty)
|
||||||
{
|
{
|
||||||
const double opacity = param->opacity;
|
const double opacity = param->opacity;
|
||||||
int i, j;
|
int i, j;
|
||||||
@ -159,7 +159,7 @@ 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 height,
|
ptrdiff_t width, ptrdiff_t height,
|
||||||
FilterParams *param, double *values)
|
FilterParams *param, double *values, int starty)
|
||||||
{
|
{
|
||||||
const uint16_t *top = (uint16_t*)_top;
|
const uint16_t *top = (uint16_t*)_top;
|
||||||
const uint16_t *bottom = (uint16_t*)_bottom;
|
const uint16_t *bottom = (uint16_t*)_bottom;
|
||||||
@ -185,7 +185,7 @@ 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 height, \
|
ptrdiff_t width, ptrdiff_t height, \
|
||||||
FilterParams *param, double *values) \
|
FilterParams *param, double *values, int starty) \
|
||||||
{ \
|
{ \
|
||||||
double opacity = param->opacity; \
|
double opacity = param->opacity; \
|
||||||
int i, j; \
|
int i, j; \
|
||||||
@ -205,7 +205,7 @@ 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 height, \
|
ptrdiff_t width, ptrdiff_t height, \
|
||||||
FilterParams *param, double *values) \
|
FilterParams *param, double *values, int starty) \
|
||||||
{ \
|
{ \
|
||||||
const uint16_t *top = (uint16_t*)_top; \
|
const uint16_t *top = (uint16_t*)_top; \
|
||||||
const uint16_t *bottom = (uint16_t*)_bottom; \
|
const uint16_t *bottom = (uint16_t*)_bottom; \
|
||||||
@ -313,7 +313,7 @@ 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 height, \
|
ptrdiff_t width, ptrdiff_t height, \
|
||||||
FilterParams *param, double *values) \
|
FilterParams *param, double *values, int starty) \
|
||||||
{ \
|
{ \
|
||||||
const type *top = (type*)_top; \
|
const type *top = (type*)_top; \
|
||||||
const type *bottom = (type*)_bottom; \
|
const type *bottom = (type*)_bottom; \
|
||||||
@ -325,7 +325,7 @@ static void blend_expr_## name(const uint8_t *_top, ptrdiff_t top_linesize,
|
|||||||
bottom_linesize /= div; \
|
bottom_linesize /= div; \
|
||||||
\
|
\
|
||||||
for (y = 0; y < height; y++) { \
|
for (y = 0; y < height; y++) { \
|
||||||
values[VAR_Y] = y; \
|
values[VAR_Y] = y + starty; \
|
||||||
for (x = 0; x < width; x++) { \
|
for (x = 0; x < width; x++) { \
|
||||||
values[VAR_X] = x; \
|
values[VAR_X] = x; \
|
||||||
values[VAR_TOP] = values[VAR_A] = top[x]; \
|
values[VAR_TOP] = values[VAR_A] = top[x]; \
|
||||||
@ -365,7 +365,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, height, td->param, &values[0]);
|
td->w, height, td->param, &values[0], slice_start);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ 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 height, \
|
ptrdiff_t width, ptrdiff_t height, \
|
||||||
struct FilterParams *param, double *values);
|
struct FilterParams *param, double *values, int starty);
|
||||||
|
|
||||||
BLEND_FUNC(addition, sse2)
|
BLEND_FUNC(addition, sse2)
|
||||||
BLEND_FUNC(addition128, sse2)
|
BLEND_FUNC(addition128, sse2)
|
||||||
|
Loading…
Reference in New Issue
Block a user