[FFmpeg-devel,v2] fix issues with transparent crop. (see https://trac.ffmpeg.org/ticket/7890)

Submitted by Bjorn Roche on May 9, 2019, 8:45 p.m.

Details

Message ID 20190509204556.3097-1-bjorn@giphy.com
State New
Headers show

Commit Message

Bjorn Roche May 9, 2019, 8:45 p.m.
From: Jacob Graff <jacob@giphy.com>

Resolves issues with some transparent gifs.
see https://trac.ffmpeg.org/ticket/7890
contribution by Jacob Graff <jacob@giphy.com>

---
 libavcodec/gif.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

Comments

Paul B Mahol May 11, 2019, 3:03 p.m.
On 5/9/19, Bjorn Roche <bjorn@giphy.com> wrote:
> From: Jacob Graff <jacob@giphy.com>
>
> Resolves issues with some transparent gifs.
> see https://trac.ffmpeg.org/ticket/7890
> contribution by Jacob Graff <jacob@giphy.com>
>

Applied.

Patch hide | download patch | download mbox

diff --git a/libavcodec/gif.c b/libavcodec/gif.c
index 94c8b1af49..d7768b4426 100644
--- a/libavcodec/gif.c
+++ b/libavcodec/gif.c
@@ -136,7 +136,7 @@  static void gif_crop_translucent(AVCodecContext *avctx,
         while (*y_start < y_end) {
             int is_trans = 1;
             for (int i = 0; i < w; i++) {
-                if (buf[w * *y_start + i] != trans) {
+                if (buf[linesize * *y_start + i] != trans) {
                     is_trans = 0;
                     break;
                 }
@@ -148,10 +148,10 @@  static void gif_crop_translucent(AVCodecContext *avctx,
         }
 
         // crop bottom
-        while (y_end < h) {
+        while (y_end > *y_start) {
             int is_trans = 1;
             for (int i = 0; i < w; i++) {
-                if (buf[w * y_end + i] != trans) {
+                if (buf[linesize * y_end + i] != trans) {
                     is_trans = 0;
                     break;
                 }
@@ -165,7 +165,7 @@  static void gif_crop_translucent(AVCodecContext *avctx,
         while (*x_start < x_end) {
             int is_trans = 1;
             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;
                     break;
                 }
@@ -176,10 +176,10 @@  static void gif_crop_translucent(AVCodecContext *avctx,
         }
 
         // crop right
-        while (x_end < w) {
+        while (x_end > *x_start) {
             int is_trans = 1;
             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;
                     break;
                 }