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);
}
|