From cd0e4e61d1362f034065b7ddad892a1525fedfe1 Mon Sep 17 00:00:00 2001 From: koral-- Date: Sat, 1 Mar 2014 02:42:19 +0100 Subject: [PATCH] #38 fixed --- jni/gif.c | 91 +++++++++++++++++++++++-------------- libs/armeabi-v7a/libgif.so | Bin 25724 -> 25724 bytes libs/armeabi/libgif.so | Bin 29816 -> 29816 bytes libs/mips/libgif.so | Bin 72864 -> 72864 bytes libs/x86/libgif.so | Bin 29848 -> 29848 bytes 5 files changed, 56 insertions(+), 35 deletions(-) diff --git a/jni/gif.c b/jni/gif.c index 187d80a1..3abd2e5f 100644 --- a/jni/gif.c +++ b/jni/gif.c @@ -141,7 +141,7 @@ static unsigned long getRealTime(void) { struct timespec ts; const clockid_t id = CLOCK_MONOTONIC; - if (id != (clockid_t) -1 && clock_gettime(id, &ts) != -1) + if (id != (clockid_t) - 1 && clock_gettime(id, &ts) != -1) return ts.tv_sec * 1000 + ts.tv_nsec / 1000000; return -1; } @@ -447,7 +447,7 @@ static int DDGifSlurp(GifFileType *GifFile, GifInfo* info, bool shouldDecode) { if (DGifGetCode(GifFile, &codeSize, &ExtData) == GIF_ERROR) return (GIF_ERROR); - while (ExtData != NULL ) + while (ExtData != NULL) { if (DGifGetCodeNext(GifFile, &ExtData) == GIF_ERROR) return (GIF_ERROR); @@ -466,7 +466,7 @@ static int DDGifSlurp(GifFileType *GifFile, GifInfo* info, bool shouldDecode) if (readExtensions(ExtFunction, ExtData, info) == GIF_ERROR) return GIF_ERROR; } - while (ExtData != NULL ) + while (ExtData != NULL) { if (DGifGetExtensionNext(GifFile, &ExtData, &ExtFunction) == GIF_ERROR) @@ -536,7 +536,7 @@ static jint open(GifFileType *GifFileIn, int Error, int startPos, if (Error != 0 || GifFileIn == NULL) { setMetaData(0, 0, 0, Error, env, metaData); - return (jint) NULL ; + return (jint) NULL; } int width = GifFileIn->SWidth, height = GifFileIn->SHeight; unsigned int wxh = width * height; @@ -545,7 +545,7 @@ static jint open(GifFileType *GifFileIn, int Error, int startPos, DGifCloseFile(GifFileIn); setMetaData(width, height, 0, D_GIF_ERR_INVALID_SCR_DIMS, env, metaData); - return (jint) NULL ; + return (jint) NULL; } GifInfo* info = malloc(sizeof(GifInfo)); if (info == NULL) @@ -553,7 +553,7 @@ static jint open(GifFileType *GifFileIn, int Error, int startPos, DGifCloseFile(GifFileIn); setMetaData(width, height, 0, D_GIF_ERR_NOT_ENOUGH_MEM, env, metaData); - return (jint) NULL ; + return (jint) NULL; } info->gifFilePtr = GifFileIn; info->startPos = startPos; @@ -578,7 +578,7 @@ static jint open(GifFileType *GifFileIn, int Error, int startPos, cleanUp(info); setMetaData(width, height, 0, D_GIF_ERR_NOT_ENOUGH_MEM, env, metaData); - return (jint) NULL ; + return (jint) NULL; } if (DDGifSlurp(GifFileIn, info, false) == GIF_ERROR) @@ -600,7 +600,7 @@ static jint open(GifFileType *GifFileIn, int Error, int startPos, cleanUp(info); setMetaData(width, height, imgCount, Error, env, metaData); - return (jint) (Error == 0 ? info : NULL ); + return (jint)(Error == 0 ? info : NULL); } JNIEXPORT jint JNICALL @@ -611,7 +611,7 @@ Java_pl_droidsonroids_gif_GifDrawable_openFile(JNIEnv * env, jclass class, { setMetaData(0, 0, 0, D_GIF_ERR_OPEN_FAILED, env, metaData); - return (jint) NULL ; + return (jint) NULL; } const char *fname = (*env)->GetStringUTFChars(env, jfname, 0); @@ -621,7 +621,7 @@ Java_pl_droidsonroids_gif_GifDrawable_openFile(JNIEnv * env, jclass class, { setMetaData(0, 0, 0, D_GIF_ERR_OPEN_FAILED, env, metaData); - return (jint) NULL ; + return (jint) NULL; } int Error = 0; GifFileType* GifFileIn = DGifOpen(file, &fileReadFunc, &Error); @@ -638,7 +638,7 @@ Java_pl_droidsonroids_gif_GifDrawable_openByteArray(JNIEnv * env, jclass class, { setMetaData(0, 0, 0, D_GIF_ERR_NOT_ENOUGH_MEM, env, metaData); - return (jint) NULL ; + return (jint) NULL; } container->buffer = (*env)->NewGlobalRef(env, bytes); container->arrLen = (*env)->GetArrayLength(env, container->buffer); @@ -647,8 +647,15 @@ Java_pl_droidsonroids_gif_GifDrawable_openByteArray(JNIEnv * env, jclass class, int Error = 0; GifFileType* GifFileIn = DGifOpen(container, &byteArrayReadFun, &Error); - return open(GifFileIn, Error, container->pos, byteArrayRewindFun, env, - metaData); + jint openResult = open(GifFileIn, Error, container->pos, byteArrayRewindFun, + env, metaData); + + if (openResult == (jint)NULL) + { + (*env)->DeleteGlobalRef(env, container->buffer); + free(container); + } + return openResult; } JNIEXPORT jint JNICALL @@ -661,7 +668,7 @@ Java_pl_droidsonroids_gif_GifDrawable_openDirectByteBuffer(JNIEnv * env, { setMetaData(0, 0, 0, D_GIF_ERR_OPEN_FAILED, env, metaData); - return (jint) NULL ; + return (jint) NULL; } DirectByteBufferContainer* container = malloc( sizeof(DirectByteBufferContainer)); @@ -669,7 +676,7 @@ Java_pl_droidsonroids_gif_GifDrawable_openDirectByteBuffer(JNIEnv * env, { setMetaData(0, 0, 0, D_GIF_ERR_NOT_ENOUGH_MEM, env, metaData); - return (jint) NULL ; + return (jint) NULL; } container->bytes = bytes; container->capacity = capacity; @@ -678,8 +685,12 @@ Java_pl_droidsonroids_gif_GifDrawable_openDirectByteBuffer(JNIEnv * env, GifFileType* GifFileIn = DGifOpen(container, &directByteBufferReadFun, &Error); - return open(GifFileIn, Error, container->pos, directByteBufferRewindFun, + jint openResult=open(GifFileIn, Error, container->pos, directByteBufferRewindFun, env, metaData); + + if (openResult == (jint)NULL) + free(container); + return openResult; } JNIEXPORT jint JNICALL @@ -697,7 +708,7 @@ Java_pl_droidsonroids_gif_GifDrawable_openStream(JNIEnv * env, jclass class, (*env)->DeleteGlobalRef(env, streamCls); setMetaData(0, 0, 0, D_GIF_ERR_OPEN_FAILED, env, metaData); - return (jint) NULL ; + return (jint) NULL; } StreamContainer* container = malloc(sizeof(StreamContainer)); @@ -705,7 +716,7 @@ Java_pl_droidsonroids_gif_GifDrawable_openStream(JNIEnv * env, jclass class, { setMetaData(0, 0, 0, D_GIF_ERR_NOT_ENOUGH_MEM, env, metaData); - return (jint) NULL ; + return (jint) NULL; } container->readMID = readMID; container->resetMID = resetMID; @@ -720,7 +731,14 @@ Java_pl_droidsonroids_gif_GifDrawable_openStream(JNIEnv * env, jclass class, (*env)->CallVoidMethod(env, stream, mid, LONG_MAX); //TODO better length? - return open(GifFileIn, Error, 0, streamRewindFun, env, metaData); + jint openResult= open(GifFileIn, Error, 0, streamRewindFun, env, metaData); + if (openResult == (jint)NULL) + { + (*env)->DeleteGlobalRef(env, streamCls); + (*env)->DeleteGlobalRef(env, container->stream); + free(container); + } + return openResult; } JNIEXPORT jint JNICALL @@ -734,7 +752,7 @@ Java_pl_droidsonroids_gif_GifDrawable_openFd(JNIEnv * env, jclass class, { setMetaData(0, 0, 0, D_GIF_ERR_OPEN_FAILED, env, metaData); - return (jint) NULL ; + return (jint) NULL; } jint fd = (*env)->GetIntField(env, jfd, fdClassDescriptorFieldID); int myfd = dup(fd); @@ -743,7 +761,7 @@ Java_pl_droidsonroids_gif_GifDrawable_openFd(JNIEnv * env, jclass class, { setMetaData(0, 0, 0, D_GIF_ERR_OPEN_FAILED, env, metaData); - return (jint) NULL ; + return (jint) NULL; } int Error = 0; @@ -986,7 +1004,7 @@ Java_pl_droidsonroids_gif_GifDrawable_seekToTime(JNIEnv * env, jclass class, if (i > info->currentIndex) { jint *pixels = (*env)->GetIntArrayElements(env, jPixels, 0); - while(info->currentIndex<=i) + while (info->currentIndex <= i) { info->currentIndex++; getBitmap((argb*) pixels, info, env); @@ -996,7 +1014,8 @@ Java_pl_droidsonroids_gif_GifDrawable_seekToTime(JNIEnv * env, jclass class, if (info->speedFactor == 1.0) info->nextStartTime = getRealTime() + lastFrameRemainder; else - info->nextStartTime = getRealTime() + lastFrameRemainder*info->speedFactor; + info->nextStartTime = getRealTime() + + lastFrameRemainder * info->speedFactor; } JNIEXPORT void JNICALL @@ -1013,21 +1032,23 @@ Java_pl_droidsonroids_gif_GifDrawable_seekToFrame(JNIEnv * env, jclass class, if (imgCount <= 1) return; - if (desiredIdx>=imgCount) - desiredIdx=imgCount-1; + if (desiredIdx >= imgCount) + desiredIdx = imgCount - 1; info->lastFrameReaminder = 0; jint *pixels = (*env)->GetIntArrayElements(env, jPixels, 0); - while(info->currentIndex < desiredIdx) + while (info->currentIndex < desiredIdx) { info->currentIndex++; getBitmap((argb*) pixels, info, env); } (*env)->ReleaseIntArrayElements(env, jPixels, pixels, 0); if (info->speedFactor == 1.0) - info->nextStartTime = getRealTime()+info->infos[info->currentIndex].duration; + info->nextStartTime = getRealTime() + + info->infos[info->currentIndex].duration; else - info->nextStartTime = getRealTime()+info->infos[info->currentIndex].duration*info->speedFactor; + info->nextStartTime = getRealTime() + + info->infos[info->currentIndex].duration * info->speedFactor; } @@ -1055,18 +1076,18 @@ Java_pl_droidsonroids_gif_GifDrawable_renderFrame(JNIEnv * env, jclass class, { jint *pixels = (*env)->GetIntArrayElements(env, jPixels, 0); getBitmap((argb*) pixels, info, env); - rawMetaData[3]=info->gifFilePtr->Error; + rawMetaData[3] = info->gifFilePtr->Error; (*env)->ReleaseIntArrayElements(env, jPixels, pixels, 0); - int scaledDuration=info->infos[info->currentIndex].duration; + int scaledDuration = info->infos[info->currentIndex].duration; if (info->speedFactor != 1.0) - scaledDuration/=info->speedFactor; - info->nextStartTime =rt+scaledDuration; - rawMetaData[4]=scaledDuration; + scaledDuration /= info->speedFactor; + info->nextStartTime = rt + scaledDuration; + rawMetaData[4] = scaledDuration; } else - rawMetaData[4]=(int)(rt - info->nextStartTime); + rawMetaData[4] = (int) (rt - info->nextStartTime); (*env)->ReleaseIntArrayElements(env, metaData, rawMetaData, 0); } @@ -1125,7 +1146,7 @@ Java_pl_droidsonroids_gif_GifDrawable_getComment(JNIEnv * env, jclass class, jobject gifInfo) { if (gifInfo == NULL) - return NULL ; + return NULL; GifInfo* info = (GifInfo*) gifInfo; return (*env)->NewStringUTF(env, info->comment); } diff --git a/libs/armeabi-v7a/libgif.so b/libs/armeabi-v7a/libgif.so index 95fe4d399fedb0847c964a120e03e28af58274c1..f364d2f70ab53e02df6f4173f00f2e4b1a7ac2a5 100755 GIT binary patch delta 3699 zcmZ9P4O~=J7QpX)^TCiHgOH9P@R;Fa0F41f0kuGeJA5wV7C#fs2C#gnlxDTEpDLI_PmVQ3!6*hRD!-x@ub zhmb~6-wSdXZO0GPjYAKcq;-I#ISAb^@rNMsT!enYlarkXes2LnX32gT8Xd`nE-bGI{x;f8D`aLk;L3@{!FfAnP zFz^wu-z3>D1NQ-IC61LNbP1S9Tm_t#DMmOMWh-z#aDv3$z{`NIkN;7QmY`-(a8d`P zKxhk;=1z&DfiHnwEpY^O35(*KTMnDiMWZj%M-1i=b~Vh#cDqYws0uGZ=|tL z1D{!lP^rZGfDacS1T_w(^e}K86tGs}W581&mX#8p0bT<*U7(1z zX2YDbq&^JPrwX`U;u*k~fZ-GLnE@OJF?C722sm~TLKh`20ah=bT)$Y5JAl1lXC-^X z4fc&nL{BP`>dYmRyIvggn%JiT21sL00HYB8H!vH*0boN2&kTdj8N%~`M`)QcG5YI5 zIC9dgD?w|f&B`o1LiZ~ZtsF#93EM@i#96RuLT30HSQWxQ0qa9JP6fv%gy#aE4dDvl zx1o$6g7eqHKgWPyk@yi6vLZ{_FJ)+h4vzw_mpZ%x>;h&b{yVU$93j}A!3jSDjsU)H z9|4{X+%MT>;gAC0>*r<$uoD7Imh6Ub>#r3i=pe8BrNdn}@ETx!h<)n~ybriC#QydT zd>VK|i2bXY8x*6!Hn^$^r3jguU^T$AC7ua90u1{(n1OuYWVlCR;XyV7&tB?yLA7=o zev&HUs&Ox^iAzar^0TDZtVzjzn*y$|P>;bi2?M)P{4m3cpRw8!ORCT43+(=L8ba*ZOMmOiaR5II{$>kG0scmXAWpbEwSoGwa??BFO)3geC zCrWBD)>)SLJN1bLGK5f!rb7GpiP!(~ANZ}TfjUQZ^cCogh)ns%F5 zBJd+a2BPTl_Ci3Gvp$_Cd;SaA6d$ky4?OIOYw4wq*R==v=~=#GDx(JTLBX(JCn*FA3K_j zhb$lZVr?9h2zm4UI@PHQ;Z-d}I_C@q}o4$hY=@mnA9WFCsNFHb+=~!xvVh=9}H8eb}9Y084PRop3eXV5XtCn7u zZ>zwsq8HNc#X4G~&%F8OYnQo(#yfmDhJH;4*uAX+KZUmHi7=77C#;rJIfLaQALHj`|YlzRW6Ypzh3E zJl&BrdyK(*X-w7{%+Z#tEjWW-%UaGdBXYv_pj%fBH0kDARya{oC3p_F$(2fVfd9cw zA2bwH4Y;=_YWi^6GW%5feb7x$0{mV#oXq3^zuTSaj4f>>GVKnZa>Hh0fPc%av9Hmg zTZadSzY~v4ics1kj(7}41b7?0W>`@CoLf!|JyY$X(^AkLbvH<^pOIWY<`(z7;#a+1 zaHo49;BuOhQ^kx7(}!{n;J?tMxf}6HO6RUfnKjHfli2`o z7`8MZ{n3G!8k18R*2%|aVZ}I;tAQE^cr}fgSH)Z%qV@CEDwmve+u=S=^7H>0 z4I^+T!d0}0`1!N6E^kJRpT9WD5?`RZV1iwWG;rl$Dk)I7d%krOs zlAp^jvT8>a&U7w9hqIR#`*~)RwXj^bJp(j%6n~(>IT@DMEGNx*Fn`3T#bUOLw~cb3 zh!lY4iU+geE}#7NfyYR0D%oX^NRv5he5wdP|Gvinr&Py9o9`c|$a|c+G9`x7dX=q$%U)QMNzJzOd zTL5mAx>NQyITv>q#Qv-&jC9mJ2|Ucz7VmHL^P4@owJ+OUjn&==m1-P${k#qOu=Q+@ z0Wv1=y99-ExG{aLYMi;^=PjP#!?e|RL_vIZheDv{!(Qsy-U#Pc9j)}ZD-p zjI!J0rv&Q(kRO5EA7;0q(}K0DtIMVa`G(AHGX(j7?G;IX0OUdF7jXvq9hzd>c2=;y zsj}OSf)vLc19=eG_%ZNdxvl#XQL1dS2PggXgY0@!KE+n~sbD<>jwe2KTv?hC;aI;) zg`=N@A0XnZpZL}%zQ~vzkKc2FNmq$KYotH9B=bRHXbiN~Fhp#3Qrr+j_tr-!g71&? TV7)F}oKkGZM4Mxzz778$vGI@m delta 3623 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 V(G%-*2|`Grofd4~>+4$Z{{T~9XL$es diff --git a/libs/armeabi/libgif.so b/libs/armeabi/libgif.so index 343579c7786bc090302e31c0bbf861a55d936dfa..f54a290f0c191eb3233a3815f8293dd215766cf3 100755 GIT binary patch delta 3985 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 E15`2rt<;nuBrA_hX2mKn zgU@wzk13g&84KuGqUnaNmA2)&E$f==*;tRIr)*=-w!3Jw-~QfwA2#%z^PL~}&%5`& zd+&SmUD}Tu+m9RFHG!GW6JpKfiL9=;2$j$la1+(gZV_=I=jzEG*AFlo&GJ%1!oY|fG?MglgmmW zJI-0I`=8idO&-yuKY2gAYI-Beoi(vrOO`%|7I%Dpf3M` zYT$e^QK8Ow5!gS4C{1^`2M(Oe5P%+#2LT-{z^-+A0SqU>LAXwT2--H2s7H6`#`>zI z;zU4R{<=qrOuCyhU{|a_?E13LVYVA?hIBdw%P-ErUUd2p^n)H3_XWm>ne0T0&aMVq zStC{i#xLzFB#P77QxN>%{X`$@LEHxR&qA4W`ddU%I}JUg(`oQ-&nMcUuP=hxA(W{@ zrxob0FA-k_<|Xv6L?GPIx zTCM5ps9Cb1zpn;j5uM?cS= z5%%5NGw*q)vort%b;L}6J70WgDy*QOn%-#^A6ARdO@lfI~c#lII zNlYGd(D6a?=s~lg+u^;I$Qg5pFOrJ+#1N5XT`hI?TGOHPrLH5cSifY)#p&cFQkIY+ zWy`JFdQq9OfjuogOL>N0b%-)s5nCsA+Kx%ZvQ(+~^04CO)D4Z6CMRyGlU*h%QvBYFpe|rPd$}@UfSdT(U|s>HA{$C&@|$ zQ$dH37IXwrIW8xqW1U~Ih>FCTw20WI@CTCW&C$tU56R*j?i#J<2;qq}S<#|9%{W08 z19p9RmIZZ_^BgWdEwMEvTtM3X3_u+{E}4r>bi7&W#5p%2 zR^t7RqTyPKjEsoLn~r4bfMb+Z%I@||yQs{FYgG6k3Qu)6d`YZ3n4v{(=ax+8-Ac$T*k~WB z|4Y10F5j`s#BbU76db#59J^@iSKrIZzS9+q4G4Q?R(=Tjm3Rex)-s$3SyZ_PBU$BX z)UF8VNb^6QM0tJq3hxs3th7X;@w%aBTeS@;I4$FRyj%P>jQ0v}<`mW|KF_pf^f;DT zWy;F*{=!E9YPS{VZ>MjCtldFJk$ywo5Yz5y2(`VOHL2>5ZTwMf#W^>-Y<2m6Zq;dd3tV0(=H+y<*Tn6d0%<63=3Z&& z+RS;ZG_qG3q`8xY?t*}^;0#dG%OK>XXjh3}i{ z-S}7olhNH-dWG@Q$>LJY9bTR)E>uN|o68FMpv{}Ue6xYCvU*QE34i7!5xDXQUzI3M ztUSQaCU}>w;+*%Iy~|f88yZb}R8@ZRb^zr^;HuYDH3w+gtE%Nd8}JFB0$dNQ0lIJ@GAn+zI z7@uu)QB`fg9Y6&*_m8St1#|;zf%TulUVzwK_a8LI3r|mKY<^W$dyxq$3{fiF0d2-T zY^y#4cu7F{nDKVw z{TMvOKw?t;M1FIx$g5AzvL8^@c8I7n#8&P$>|t%(XI2hV*C8`Y86F$nH1Gxvi0$>0 zdEX&%29S0{{G&d;amcGx7DkkEx3SHzm6sx9pWm~ZBxg;j`uu1#dOL_|X(>lZT{CZ#r`%x0;GM`qH92zP+z zpWP_%c8M1n#!u{%5*cu5NX~Fgq^G&ixF`-cOkkzrd_!!+bu^8f%j6?1xgn1dw;N(v zzc=EUueTrT4`B*xOsmA!7ZAyLOwNjOPL@NJ9A$`@Z(x-p;rbG7CX@509D3#8s;t2% zfe}cKgmP~6f8@*~=NviP$azN2Fmi73%__iwTHhEl&NqAXg6PKEUh8Qvv3Q;tDneQ0 zvFj#wld*o!Ct++756JS7s3mg-pMSv`SGVhcPaaxIsuix131K{IPT8)H~Ppc@r;J3NQv-`f9b UJfF(H3+r*W)E~PO!w#_j1KU-v(f|Me delta 4443 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 G7yBQ;TA2v| diff --git a/libs/x86/libgif.so b/libs/x86/libgif.so index 7af2432718c7eb494142906069a235906cffd109..9a60ada1285c5df70026c0c0b6e536a3d9267020 100755 GIT binary patch delta 4397 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