avcodec/gif: fix issues with transparent crop

Resolves issues with some transparent gifs.
pull/311/head
Jacob Graff 6 years ago committed by Paul B Mahol
parent 68bac50604
commit 0158dd14a3
  1. 12
      libavcodec/gif.c

@ -136,7 +136,7 @@ static void gif_crop_translucent(AVCodecContext *avctx,
while (*y_start < y_end) { while (*y_start < y_end) {
int is_trans = 1; int is_trans = 1;
for (int i = 0; i < w; i++) { for (int i = 0; i < w; i++) {
if (buf[w * *y_start + i] != trans) { if (buf[linesize * *y_start + i] != trans) {
is_trans = 0; is_trans = 0;
break; break;
} }
@ -148,10 +148,10 @@ static void gif_crop_translucent(AVCodecContext *avctx,
} }
// crop bottom // crop bottom
while (y_end < h) { while (y_end > *y_start) {
int is_trans = 1; int is_trans = 1;
for (int i = 0; i < w; i++) { for (int i = 0; i < w; i++) {
if (buf[w * y_end + i] != trans) { if (buf[linesize * y_end + i] != trans) {
is_trans = 0; is_trans = 0;
break; break;
} }
@ -165,7 +165,7 @@ static void gif_crop_translucent(AVCodecContext *avctx,
while (*x_start < x_end) { while (*x_start < x_end) {
int is_trans = 1; int is_trans = 1;
for (int i = *y_start; i < y_end; i++) { for (int i = *y_start; i < y_end; i++) {
if (buf[w * i + *x_start] != trans) { if (buf[linesize * i + *x_start] != trans) {
is_trans = 0; is_trans = 0;
break; break;
} }
@ -176,10 +176,10 @@ static void gif_crop_translucent(AVCodecContext *avctx,
} }
// crop right // crop right
while (x_end < w) { while (x_end > *x_start) {
int is_trans = 1; int is_trans = 1;
for (int i = *y_start; i < y_end; i++) { for (int i = *y_start; i < y_end; i++) {
if (buf[w * i + x_end] != trans) { if (buf[linesize * i + x_end] != trans) {
is_trans = 0; is_trans = 0;
break; break;
} }

Loading…
Cancel
Save