Stefan Schuermans commited on 2016-12-30 21:26:42
Showing 5 changed files, with 62 additions and 24 deletions.
... | ... |
@@ -12,6 +12,12 @@ |
12 | 12 |
#include <BlinkenLib/BlinkenMovie.h> |
13 | 13 |
#include <BlinkenLib/BlinkenGif.h> |
14 | 14 |
|
15 |
+#ifdef BLINKENLIB_CFG_GIF5 |
|
16 |
+# define GIF5_err , &giferr |
|
17 |
+#else |
|
18 |
+# define GIF5_err |
|
19 |
+#endif |
|
20 |
+ |
|
15 | 21 |
// get color from GIF color map |
16 | 22 |
static void BlinkenGifGetColor(ColorMapObject *pMap, int idx, int transparent, |
17 | 23 |
unsigned char *r, unsigned char *g, |
... | ... |
@@ -75,19 +81,22 @@ stBlinkenMovie *BlinkenGifLoad(const char *pFilename) |
75 | 81 |
ExtensionBlock *pEx; |
76 | 82 |
stBlinkenMovie *pMovie; |
77 | 83 |
stBlinkenFrame *pBack, *pFrame; |
84 |
+#ifdef BLINKENLIB_CFG_GIF5 |
|
85 |
+ int giferr; |
|
86 |
+#endif |
|
78 | 87 |
|
79 | 88 |
if (pFilename == NULL) |
80 | 89 |
return NULL; |
81 | 90 |
|
82 | 91 |
// open GIF file for decoding |
83 |
- gif = DGifOpenFileName(pFilename); |
|
92 |
+ gif = DGifOpenFileName(pFilename GIF5_err); |
|
84 | 93 |
if (gif == NULL) { |
85 | 94 |
return NULL; |
86 | 95 |
} |
87 | 96 |
|
88 | 97 |
// read GIF file |
89 | 98 |
if (DGifSlurp(gif) != GIF_OK) { |
90 |
- DGifCloseFile(gif); |
|
99 |
+ DGifCloseFile(gif GIF5_err); |
|
91 | 100 |
return NULL; |
92 | 101 |
} |
93 | 102 |
height = gif->SHeight; |
... | ... |
@@ -99,7 +108,7 @@ stBlinkenMovie *BlinkenGifLoad(const char *pFilename) |
99 | 108 |
// create movie |
100 | 109 |
pMovie = BlinkenMovieNew(height, width, 3, 255); |
101 | 110 |
if (! pMovie) { |
102 |
- DGifCloseFile(gif); |
|
111 |
+ DGifCloseFile(gif GIF5_err); |
|
103 | 112 |
return NULL; |
104 | 113 |
} |
105 | 114 |
|
... | ... |
@@ -107,7 +116,7 @@ stBlinkenMovie *BlinkenGifLoad(const char *pFilename) |
107 | 116 |
pBack = BlinkenFrameNew(height, width, 3, 255, 1); |
108 | 117 |
if (! pBack) { |
109 | 118 |
BlinkenMovieFree(pMovie); |
110 |
- DGifCloseFile(gif); |
|
119 |
+ DGifCloseFile(gif GIF5_err); |
|
111 | 120 |
return NULL; |
112 | 121 |
} |
113 | 122 |
for (y = 0; y < height; ++y) { |
... | ... |
@@ -191,7 +200,7 @@ stBlinkenMovie *BlinkenGifLoad(const char *pFilename) |
191 | 200 |
BlinkenFrameFree(pBack); |
192 | 201 |
|
193 | 202 |
// close GIF file |
194 |
- DGifCloseFile(gif); |
|
203 |
+ DGifCloseFile(gif GIF5_err); |
|
195 | 204 |
|
196 | 205 |
return pMovie; |
197 | 206 |
} |
... | ... |
@@ -207,6 +216,9 @@ int BlinkenGifSave(stBlinkenMovie *pMovie, const char *pFilename) |
207 | 216 |
SavedImage *pImg; |
208 | 217 |
GifImageDesc *pDesc; |
209 | 218 |
ExtensionBlock *pEx; |
219 |
+#ifdef BLINKENLIB_CFG_GIF5 |
|
220 |
+ int giferr; |
|
221 |
+#endif |
|
210 | 222 |
|
211 | 223 |
if (pMovie == NULL || pFilename == NULL) |
212 | 224 |
return -1; // error |
... | ... |
@@ -238,7 +250,7 @@ int BlinkenGifSave(stBlinkenMovie *pMovie, const char *pFilename) |
238 | 250 |
} |
239 | 251 |
|
240 | 252 |
// open GIF file for encoding |
241 |
- gif = EGifOpenFileName(pFilename, 0); |
|
253 |
+ gif = EGifOpenFileName(pFilename, 0 GIF5_err); |
|
242 | 254 |
if (gif == NULL) { |
243 | 255 |
BlinkenMovieFree(pOutMovie); |
244 | 256 |
return -1; // error |
... | ... |
@@ -260,9 +272,13 @@ int BlinkenGifSave(stBlinkenMovie *pMovie, const char *pFilename) |
260 | 272 |
gif->UserData = NULL; |
261 | 273 |
|
262 | 274 |
// create color map |
275 |
+#ifdef BLINKENLIB_CFG_GIF5 |
|
276 |
+ gif->SColorMap = GifMakeMapObject(256, NULL); |
|
277 |
+#else |
|
263 | 278 |
gif->SColorMap = MakeMapObject(256, NULL); |
279 |
+#endif |
|
264 | 280 |
if (gif->SColorMap == NULL) { |
265 |
- EGifCloseFile(gif); |
|
281 |
+ EGifCloseFile(gif GIF5_err); |
|
266 | 282 |
BlinkenMovieFree(pOutMovie); |
267 | 283 |
return -1; // error |
268 | 284 |
} |
... | ... |
@@ -308,7 +324,7 @@ int BlinkenGifSave(stBlinkenMovie *pMovie, const char *pFilename) |
308 | 324 |
// create space for saved images |
309 | 325 |
gif->SavedImages = calloc(frameCnt, sizeof(SavedImage)); |
310 | 326 |
if (gif->SavedImages == NULL) { |
311 |
- EGifCloseFile(gif); |
|
327 |
+ EGifCloseFile(gif GIF5_err); |
|
312 | 328 |
BlinkenMovieFree(pOutMovie); |
313 | 329 |
return -1; // error |
314 | 330 |
} |
... | ... |
@@ -368,7 +384,7 @@ int BlinkenGifSave(stBlinkenMovie *pMovie, const char *pFilename) |
368 | 384 |
pImg->RasterBits = calloc(pDesc->Width * pDesc->Height, |
369 | 385 |
sizeof(unsigned char)); |
370 | 386 |
if (pImg->RasterBits == NULL) { |
371 |
- EGifCloseFile(gif); |
|
387 |
+ EGifCloseFile(gif GIF5_err); |
|
372 | 388 |
BlinkenMovieFree(pOutMovie); |
373 | 389 |
return -1; // error |
374 | 390 |
} |
... | ... |
@@ -386,11 +402,13 @@ int BlinkenGifSave(stBlinkenMovie *pMovie, const char *pFilename) |
386 | 402 |
} // for y |
387 | 403 |
|
388 | 404 |
// allocate and fill extension block with delay and disposal mode |
405 |
+#ifndef BLINKENLIB_CFG_GIF5 |
|
389 | 406 |
pImg->Function = 0; |
407 |
+#endif |
|
390 | 408 |
pImg->ExtensionBlockCount = 1; |
391 | 409 |
pImg->ExtensionBlocks = calloc(1, sizeof(ExtensionBlock)); |
392 | 410 |
if (pImg->ExtensionBlocks == NULL) { |
393 |
- EGifCloseFile(gif); |
|
411 |
+ EGifCloseFile(gif GIF5_err); |
|
394 | 412 |
BlinkenMovieFree(pOutMovie); |
395 | 413 |
return -1; // error |
396 | 414 |
} |
... | ... |
@@ -399,7 +417,7 @@ int BlinkenGifSave(stBlinkenMovie *pMovie, const char *pFilename) |
399 | 417 |
pEx->ByteCount = 4; |
400 | 418 |
pEx->Bytes = calloc(pEx->ByteCount, sizeof (unsigned char)); |
401 | 419 |
if (pEx->Bytes == NULL) { |
402 |
- EGifCloseFile(gif); |
|
420 |
+ EGifCloseFile(gif GIF5_err); |
|
403 | 421 |
BlinkenMovieFree(pOutMovie); |
404 | 422 |
return -1; // error |
405 | 423 |
} |
... | ... |
@@ -7,37 +7,43 @@ CC:=gcc |
7 | 7 |
INCDIR:=-I/sw/include |
8 | 8 |
LIBDIR:=-L/sw/lib |
9 | 9 |
|
10 |
+CFGS:=$(addsuffix .cfg, osx mng gif gif4 gif5) |
|
11 |
+ |
|
10 | 12 |
.phony: all clean |
11 | 13 |
|
12 | 14 |
all: config.cfg config.mk config.h |
13 | 15 |
|
14 | 16 |
osx.cfg: |
15 |
- echo "OSX=" | tr -d '\n' >osx.cfg |
|
16 |
- (if [ "$$(uname -s)" == "Darwin" ]; then echo "1"; else echo "0"; fi) >>osx.cfg |
|
17 |
+ echo "OSX=" | tr -d '\n' >$@ |
|
18 |
+ (if [ "$$(uname -s)" == "Darwin" ]; then echo "1"; else echo "0"; fi) >>$@ |
|
17 | 19 |
|
18 | 20 |
mng.cfg: |
19 |
- echo "MNG=" | tr -d '\n' >mng.cfg |
|
20 |
- (($(CC) $(INCDIR) $(LIBDIR) -o mng mng.c -lmng && ./mng && echo "1") || echo "0") >>mng.cfg |
|
21 |
+ echo "MNG=" | tr -d '\n' >$@ |
|
22 |
+ (($(CC) $(INCDIR) $(LIBDIR) -o mng mng.c -lmng && ./mng && echo "1") || echo "0") >>$@ |
|
21 | 23 |
rm -f mng |
22 | 24 |
|
23 |
-gif.cfg: |
|
24 |
- echo "GIF=" | tr -d '\n' >gif.cfg |
|
25 |
- (($(CC) $(INCDIR) $(LIBDIR) -o gif gif.c -lgif && ./gif && echo "1") || echo "0") >>gif.cfg |
|
26 |
- rm -f gif |
|
25 |
+gif%.cfg: |
|
26 |
+ echo "GIF$*=" | tr -d '\n' >$@ |
|
27 |
+ (($(CC) $(INCDIR) $(LIBDIR) -o gif$* gif$*.c -lgif && ./gif$* && echo "1") || echo "0") >>$@ |
|
28 |
+ rm -f gif$* |
|
29 |
+ |
|
30 |
+gif.cfg: gif4.cfg gif5.cfg |
|
31 |
+ echo "GIF=" | tr -d '\n' >$@ |
|
32 |
+ ((cat $^ | grep -q 1 && echo "1") || echo "0") >>$@ |
|
27 | 33 |
|
28 |
-config.cfg: osx.cfg mng.cfg gif.cfg |
|
34 |
+config.cfg: $(CFGS) |
|
29 | 35 |
cat $+ >config.cfg |
30 | 36 |
|
31 | 37 |
config.mk: config.cfg |
32 |
- sed 's/^\([A-Z]*\)=\([01]\)$$/BLINKENLIB_CFG_\1:=\2/' <$< >$@ |
|
38 |
+ sed 's/^\([A-Z0-9]*\)=\([01]\)$$/BLINKENLIB_CFG_\1:=\2/' <$< >$@ |
|
33 | 39 |
|
34 | 40 |
config.h: config.cfg Makefile ../version.mk |
35 |
- sed 's/^\([A-Z]*\)=0$$/#undef BLINKENLIB_CFG_\1/;s/^\([A-Z]*\)=1$$/#define BLINKENLIB_CFG_\1/' <$< >$@ |
|
41 |
+ sed 's/^\([A-Z0-9]*\)=0$$/#undef BLINKENLIB_CFG_\1/;s/^\([A-Z0-9]*\)=1$$/#define BLINKENLIB_CFG_\1/' <$< >$@ |
|
36 | 42 |
echo '#define BLINKENLIB_CONFIG "' | tr -d '\n' >>$@ |
37 |
- sed 's/^\([A-Z]*\)=0$$/\1-/;s/^\([A-Z]*\)=1$$/\1+/' <$< | tr '\n' ' ' | sed 's/ *$$//' | tr -d '\n' >>$@ |
|
43 |
+ sed 's/^\([A-Z0-9]*\)=0$$/\1-/;s/^\([A-Z0-9]*\)=1$$/\1+/' <$< | tr '\n' ' ' | sed 's/ *$$//' | tr -d '\n' >>$@ |
|
38 | 44 |
echo '"' >>$@ |
39 | 45 |
grep '^VERSION_[A-Z]*:=[0-9]*' ../version.mk | sed 's/^/#define BLINKENLIB_/;s/:=/ /' >>$@ |
40 | 46 |
|
41 | 47 |
clean: |
42 |
- rm -f *.cfg config.mk config.h |
|
48 |
+ rm -f $(CFGS) config.mk config.h |
|
43 | 49 |
|