mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avfilter/vf_floodfill: better fix for crash
This commit is contained in:
parent
1cdc805228
commit
8732eb124e
@ -35,6 +35,7 @@ typedef struct FloodfillContext {
|
|||||||
|
|
||||||
int x, y;
|
int x, y;
|
||||||
int s[4];
|
int s[4];
|
||||||
|
int S[4];
|
||||||
int d[4];
|
int d[4];
|
||||||
|
|
||||||
int nb_planes;
|
int nb_planes;
|
||||||
@ -293,26 +294,30 @@ static int filter_frame(AVFilterLink *link, AVFrame *frame)
|
|||||||
const int h = frame->height;
|
const int h = frame->height;
|
||||||
int i, ret;
|
int i, ret;
|
||||||
|
|
||||||
for (i = 0; i < s->nb_planes; i++) {
|
|
||||||
if (s->s[i] != s->d[i])
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i == s->nb_planes)
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
if (ret = av_frame_make_writable(frame))
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
if (is_inside(s->x, s->y, w, h)) {
|
if (is_inside(s->x, s->y, w, h)) {
|
||||||
s->pick_pixel(frame, s->x, s->y, &s0, &s1, &s2, &s3);
|
s->pick_pixel(frame, s->x, s->y, &s0, &s1, &s2, &s3);
|
||||||
|
|
||||||
|
s->S[0] = s0;
|
||||||
|
s->S[1] = s1;
|
||||||
|
s->S[2] = s2;
|
||||||
|
s->S[3] = s3;
|
||||||
|
for (i = 0; i < s->nb_planes; i++) {
|
||||||
|
if (s->S[i] != s->d[i])
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == s->nb_planes)
|
||||||
|
goto end;
|
||||||
|
|
||||||
if (s->is_same(frame, s->x, s->y, s0, s1, s2, s3)) {
|
if (s->is_same(frame, s->x, s->y, s0, s1, s2, s3)) {
|
||||||
s->points[s->front].x = s->x;
|
s->points[s->front].x = s->x;
|
||||||
s->points[s->front].y = s->y;
|
s->points[s->front].y = s->y;
|
||||||
s->front++;
|
s->front++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ret = av_frame_make_writable(frame))
|
||||||
|
return ret;
|
||||||
|
|
||||||
while (s->front > s->back) {
|
while (s->front > s->back) {
|
||||||
int x, y;
|
int x, y;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user