summaryrefslogtreecommitdiff
path: root/multimedia/mplayer-share/patches/patch-libmpdemux_demux__gif.c
blob: 640c196d6a387221cb7fb505e09dc0abb13cb033 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
$NetBSD: patch-libmpdemux_demux__gif.c,v 1.1 2013/07/06 07:07:18 ryoon Exp $

* Fix build with giflib 5.0.

--- libmpdemux/demux_gif.c.orig	2010-12-12 10:37:15.000000000 +0000
+++ libmpdemux/demux_gif.c
@@ -45,6 +45,18 @@ typedef struct {
 
 #define GIF_SIGNATURE (('G' << 16) | ('I' << 8) | 'F')
 
+/* from util/qprintf.c of giflib 5.0.4 */
+void
+PrintGifError(int ErrorCode)
+{
+    char *Err = GifErrorString(ErrorCode);
+
+    if (Err != NULL)
+	fprintf(stderr, "GIF-LIB error: %s.\n", Err);
+    else
+	fprintf(stderr, "GIF-LIB undefined error %d.\n", ErrorCode);
+}
+
 #ifndef CONFIG_GIF_TVT_HACK
 // not supported by certain versions of the library
 static int my_read_gif(GifFileType *gif, uint8_t *buf, int len)
@@ -94,14 +106,14 @@ static int demux_gif_fill_buffer(demuxer
 
   while (type != IMAGE_DESC_RECORD_TYPE) {
     if (DGifGetRecordType(gif, &type) == GIF_ERROR) {
-      PrintGifError();
+      PrintGifError(gif->Error);
       return 0; // oops
     }
     if (type == TERMINATE_RECORD_TYPE)
       return 0; // eof
     if (type == SCREEN_DESC_RECORD_TYPE) {
       if (DGifGetScreenDesc(gif) == GIF_ERROR) {
-        PrintGifError();
+        PrintGifError(gif->Error);
         return 0; // oops
       }
     }
@@ -109,7 +121,7 @@ static int demux_gif_fill_buffer(demuxer
       int code;
       unsigned char *p = NULL;
       if (DGifGetExtension(gif, &code, &p) == GIF_ERROR) {
-        PrintGifError();
+        PrintGifError(gif->Error);
         return 0; // oops
       }
       if (code == 0xF9) {
@@ -138,7 +150,7 @@ static int demux_gif_fill_buffer(demuxer
 	  comments[length] = 0;
 	  printf("%s", comments);
           if (DGifGetExtensionNext(gif, &p) == GIF_ERROR) {
-            PrintGifError();
+            PrintGifError(gif->Error);
             return 0; // oops
           }
 	}
@@ -146,7 +158,7 @@ static int demux_gif_fill_buffer(demuxer
       }
       while (p != NULL) {
         if (DGifGetExtensionNext(gif, &p) == GIF_ERROR) {
-          PrintGifError();
+          PrintGifError(gif->Error);
           return 0; // oops
         }
       }
@@ -154,7 +166,7 @@ static int demux_gif_fill_buffer(demuxer
   }
 
   if (DGifGetImageDesc(gif) == GIF_ERROR) {
-    PrintGifError();
+    PrintGifError(gif->Error);
     return 0; // oops
   }
 
@@ -167,7 +179,7 @@ static int demux_gif_fill_buffer(demuxer
     memset(dp->buffer, gif->SBackGroundColor, priv->w * priv->h);
 
   if (DGifGetLine(gif, buf, len) == GIF_ERROR) {
-    PrintGifError();
+    PrintGifError(gif->Error);
     free(buf);
     return 0; // oops
   }
@@ -257,10 +269,10 @@ static demuxer_t* demux_open_gif(demuxer
   lseek(demuxer->stream->fd, 0, SEEK_SET);
   gif = DGifOpenFileHandle(demuxer->stream->fd);
 #else
-  gif = DGifOpen(demuxer->stream, my_read_gif);
+  gif = DGifOpen(demuxer->stream, my_read_gif, NULL);
 #endif
   if (!gif) {
-    PrintGifError();
+    PrintGifError(gif->Error);
     free(priv);
     return NULL;
   }
@@ -302,7 +314,7 @@ static void demux_close_gif(demuxer_t* d
   gif_priv_t *priv = demuxer->priv;
   if (!priv) return;
   if (priv->gif && DGifCloseFile(priv->gif) == GIF_ERROR)
-    PrintGifError();
+    PrintGifError(priv->gif->Error);
   free(priv->refimg);
   free(priv);
 }