From 5f5ee490cd4805c6b0737ab2be199a8da40df8ca Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Fri, 18 Mar 2022 17:18:38 +0900 Subject: [PATCH] Fix crash issue when we decode some bmp Some code use 'char' instead of 'unsigned char'. and next, try to convert that value as 'unsigned int' If char value was 255 (== -1), converted value become INT_MAX. This patch make BMP decoder use correct data format Change-Id: I4f08e28c916eb34f2d06da452b6dde6638d1789b Signed-off-by: Eunki, Hong --- .../{flag-24bpp.buffer => flag-24bpp.bmp.buffer} | Bin automated-tests/images/w3c_home_256.bmp | Bin 0 -> 4534 bytes automated-tests/images/w3c_home_256.bmp.buffer | 1 + .../dali-adaptor-internal/utc-Dali-BmpLoader.cpp | 10 +- dali/internal/imaging/common/loader-bmp.cpp | 222 ++++++++++----------- 5 files changed, 118 insertions(+), 115 deletions(-) rename automated-tests/images/{flag-24bpp.buffer => flag-24bpp.bmp.buffer} (100%) create mode 100755 automated-tests/images/w3c_home_256.bmp create mode 100644 automated-tests/images/w3c_home_256.bmp.buffer diff --git a/automated-tests/images/flag-24bpp.buffer b/automated-tests/images/flag-24bpp.bmp.buffer similarity index 100% rename from automated-tests/images/flag-24bpp.buffer rename to automated-tests/images/flag-24bpp.bmp.buffer diff --git a/automated-tests/images/w3c_home_256.bmp b/automated-tests/images/w3c_home_256.bmp new file mode 100755 index 0000000000000000000000000000000000000000..4b714ff0fd32b1e4c6bbf82c5081f6bcde98a133 GIT binary patch literal 4534 zcmeHJZD>m`yryV zD8tgpz_C9T*5&IDq9}mofLn2$J7?j>)r=nEs#{4<9{5{OBHp>O)vrh-2@E zdoefOhpF8)SbeaH+2LJif1@2ojvm3vkF)TV`!I280$sbiFxkm-eu!iCqjqe0WeY|= z9>MA_Ni3c{j^#^Jn7%lTmFsiF8^FUqSFvvl*iNTL<;LdHX zhYr!;c?@Bgb_4Gtgwoy^V!;#|#uA9#02;Q=AQrmM^(a0$!u0|fhk-{N=0aDH7i)u+ zT7f4qiU*iNb?-b<8-|hK`3JB>+yQc)<97@9lS4SS)q_+BYTrL|1>S`=;;nFh6w^!l zaCN}K@I@|f16@PMm450#k`5)iv43j^dP08#)Nkf8V;7hKQuhcriZ4Iw!q*F4q^Mtl z{OIP_!GY{TXuxHR_Xf~I`$WF0Zw@HFC7e#X%W;h#0oZ((4+4QYbf?IlAi#|!>NP-E zZO@^*z<#p#Xm-4Lkn}p@rH+yRJz%Mi{;mcbd+Lbk6<~DoGvFuPOFMClIY;(n%)nI! zVi;FQJkE0roaZdnxg80kfV0E=wxQc2)EOKwV%(=clRWMkNk$htFS_?}uz;OPn*KQ- zBfAGXV^o&$cI^xG)nUH)B+sF~k{{=L$yW=+c93rj=W0wuem;#<{{H?d}~;i`Y0 z`e}pv`+S%!UOlFC~v4#BK;>4#ZjMgU5@GdZ(-;18bcBS8$pMXL7i_uZs^;1ijzr*+# z{iNK+{iz{D?s(8)aLGoOU>?2bj=av<7`_j+WAHHbH?;m|sQ(~N67LxCMv>2q0T{nO z=nqTue=*JczrC~`u%hd#*S5IxNTqGrc4K;Nnx!R8tQ{NuE=SH7u`_tBTD=?HY&)&d zJ*AwbQd*Uf1K=!uwj;}R#I`iGPN7gC+b+^Tha-J=+rb$dnDYvE>BC;K>Pp{P^@VKMJ70Lr- zXpysNMW&F1!QR}ENut-Ym$Filj;zLXJmazoL)cwBb!=Adv9zp+@LNwyijm>p;P@PU zL{_grZDZ%cqjrVk%qdw4|xZY~q#%9+S-^RPyvXQ+!aQlDU$xXJbm6k#IO% zL>SAK`c(dG91)@u<Z3uG1!OUtIg(zU|KF;U8mj)rsXwTLNds2dd(bgd-Ie2uF@Q%-Kvk(Nq1GN_}S z!c%E`osp$C!gLj>Jh4uEb{YRF5olm-$bBjgw2U`q0BXe>Z{Aj%36fx zG>0wC!9N_E%seBn)OqvM8_z%Sn8kSo=8M3|^XI(?9QxVtJoz8hb6Ll5Z7O&!iI<7l Jxhwy9_y?gr2EPCR literal 0 HcmV?d00001 diff --git a/automated-tests/images/w3c_home_256.bmp.buffer b/automated-tests/images/w3c_home_256.bmp.buffer new file mode 100644 index 0000000..ecee152 --- /dev/null +++ b/automated-tests/images/w3c_home_256.bmp.buffer @@ -0,0 +1 @@ +üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüŒŠŒŒŠŒŒŠŒtvt¼º¼üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüŒŠŒÌÎ̌ŠŒŒŠŒÌÎ̌ŠŒÌÎÌüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüŒŠŒüþüDFDìîìDFDüþüŒŠŒüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüŒŠŒüþü$"$DFD¼º¼üþüŒŠŒüþüüþüìòüÄÎäÄÎäÄÎäÄÎäìòüüþüüþüüþüüþüüþüüþüÜæôÄÎäÄÎäÄÎäÄÎäüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþü¼Æ䔪ԔªÔ”ªÔ¤¶ÜÄÎäÄÎäÄÎäÄÎäÄÎäÄÎäÄÎäÄÎäÄÎäÄÎäÄÎäìòüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüÌÎÌüþüüþütvtüþüDFDÌÎÌDFDÜÞ܌ŠŒüþüüþüÜæô Fœ Fœ Fœ Fœ¤¶ÜüþüüþüüþüüþüüþüüþüÔÚì Fœ Fœ Fœ FœÄÎäüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüN¤ Fœ FœN¤ Fœ Fœ Fœ FœN¤ Fœ Fœ FœN¤ Fœ Fœ FœÄÎäüþüüþüüþüüþüüþüÌÎÌLNL  \^\ÜÞÜüþüüþüüþüìîì,.,üþüüþü¼º¼ŒŠŒüþüüþüìîìtvtìîìüþüüþüüþü$Z¬ Fœ Fœ FœdŠÄüþüüþüüþüüþüüþüüþüüþüN¤ Fœ FœN¤t–ÄüþüüþüüþüüþüüþüüþüüþüüþüüþüÄÎä Bœ Fœ Fœ Fœ Fœ FœN¤ Fœ Fœ Fœ Fœ Fœ Fœ Fœ Fœ FœÄÎäüþüüþüüþüüþüœžœœžœüþüüþü|~|üþüüþüüþüÌÎ̌ŠŒŒŠŒŒŠŒìîìüþüüþüüþüüþüt–ÄN¤ Fœ FœN¤üþüüþüüþüüþüüþüüþüüþüdŠÄ Fœ Fœ Fœ$Z¬üþüüþüüþüüþüüþüüþüüþüüþüüþüt–Ä Bœ Fœ Fœ Fœ Fœ Fœ Fœ Fœ Fœ Fœ FœN¤ Fœ FœN¤Dr´üþüüþüüþüüþüÌÎ̼º¼ìîì  ¼¾¼üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüÄÎä Fœ Fœ FœN¤ÔÚìüþüüþüüþüüþüüþüüþü¤¶Ü Fœ Fœ Fœ FœÜæôüþüüþüüþüüþüüþüüþüüþüüþü4f¬ BœN¤ Fœ FœN¤ Fœ FœN¤ Fœ Fœ Fœ Fœ Fœ Fœ FœÄÎäüþüüþüüþüüþülnlœžœüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüN¤ Fœ Fœ Fœt–Äüþüüþüüþüüþüüþüüþüìòü Fœ Fœ Fœ Fœ”ªÔüþüüþüüþüüþüüþüüþüüþüÜæô Fœ Fœ Fœ FœlŠÄüþüüþüüþüüþüüþü´Âä Fœ Fœ Fœ FœdŠÄüþüüþüüþüüþüœžœ,.,|~|lnl$"$  ìîìüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüT~¼ Fœ Fœ Fœ4f¬üþüüþüüþüüþüüþüüþüüþüDr´ FœN¤ FœT~¼üþüüþüüþüüþüüþüüþüüþü”ªÔ Fœ Fœ Fœ Fœìòüüþüüþüüþüüþüüþü$Z¬ Fœ Fœ FœN¤ìòüüþüüþüüþüüþü<><œžœüþüüþüüþüìîì\^\|~|üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþü¤¶Ü Fœ FœN¤ FœÜæôüþüüþüüþüüþüüþüüþüdŠÄ Fœ Fœ Fœ FœìòüüþüüþüüþüüþüüþüüþüT~¼ Fœ Bœ Fœ<œžœüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþü$Z¬ Fœ Fœ Fœt–ÄüþüüþüüþüÜæô FœN¤ Fœ Fœ Fœ FœN¤„žÌüþüüþüüþüÔÚì Fœ Fœ Fœ Fœ´Âäüþüüþüüþü¤¶Ü Fœ Fœ Fœ FœdŠÄüþüüþüüþüüþüüþüüþüüþü<><ìîìüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüdŠÄ Fœ Fœ Fœ$Z¬üþüüþüüþü¤¶Ü Fœ Fœ FœN¤ Fœ Fœ Fœ4f¬üþüüþüüþü”ªÔ Fœ FœN¤N¤üþüüþüüþüìòü$Z¬ FœN¤ Fœ Fœ Fœ<üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþü¼Æä Fœ FœN¤ FœÔÚìüþüüþüT~¼ Fœ FœN¤„žÌ Fœ Fœ Fœ Fœìòüüþüüþü<<><üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþü Fœ Fœ Fœ Fœ”ªÔüþüüþüN¤ Fœ Fœ FœÜæôT~¼ FœN¤ Fœ¤¶Üüþüìòü Fœ Fœ Fœ Fœ¤¶Üüþüüþüüþü„žÌN¤ Fœ Fœ Fœ Fœ Fœ Fœ Fœ Fœ¤¶Üüþüüþüüþü|~|<><üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüT~¼ Fœ Fœ FœDr´üþü´Âä Fœ Fœ Fœ4f¬üþü”ªÔ Fœ Fœ FœT~¼üþü¤¶Ü Fœ Fœ Fœ FœÜæôüþüüþüüþüÄÎ䄞̄žÌ„žÌ4f¬N¤ Fœ FœN¤ FœN¤ìòüüþüüþüœžœ<><üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþü¤¶Ü FœN¤ Fœ Fœìòüt–Ä Fœ FœN¤t–ÄüþüÜæô Fœ Fœ FœN¤üþüdŠÄ FœN¤ Fœ<üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüÜæô Fœ Fœ Fœ Fœ¤¶Ü$Z¬ Fœ Fœ FœÔÚìüþüüþü$Z¬ Fœ Fœ FœÄÎäN¤ Fœ Fœ Fœ„žÌüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüÔÚì Fœ Fœ Fœ FœN¤üþüüþüüþü|~|üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþü4f¬ Fœ Fœ Fœ<ÜÞÜüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüìòü Fœ FœN¤ Fœ FœÜæôüþüüþüüþüüþüüþüüþüDr´ Fœ Fœ Fœ Fœ”ªÔüþüüþüüþü¼ÆäT~¼4f¬üþüüþüüþüüþüüþüüþüüþüt–Ä FœN¤ Fœ FœÄÎ䌎Œ|~|üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüŒŠŒ¬®¬üþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüDr´ Fœ Fœ Fœ<ŒŽŒìîìüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþüüþü \ No newline at end of file diff --git a/automated-tests/src/dali-adaptor-internal/utc-Dali-BmpLoader.cpp b/automated-tests/src/dali-adaptor-internal/utc-Dali-BmpLoader.cpp index 8200c65..7babde8 100644 --- a/automated-tests/src/dali-adaptor-internal/utc-Dali-BmpLoader.cpp +++ b/automated-tests/src/dali-adaptor-internal/utc-Dali-BmpLoader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,3 +38,11 @@ int UtcDaliBmp24bpp(void) END_TEST; } +int UtcDaliBmpRGB8(void) +{ + ImageDetails image(TEST_IMAGE_DIR "/w3c_home_256.bmp", 72u, 48u); + + TestImageLoading(image, BmpLoaders); + + END_TEST; +} \ No newline at end of file diff --git a/dali/internal/imaging/common/loader-bmp.cpp b/dali/internal/imaging/common/loader-bmp.cpp index fe87cf9..80c455d 100644 --- a/dali/internal/imaging/common/loader-bmp.cpp +++ b/dali/internal/imaging/common/loader-bmp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -147,9 +147,9 @@ bool DecodeRGB24V5(FILE* fp, return false; } - for(unsigned int yPos = 0; yPos < height; yPos++) + for(std::uint32_t yPos = 0; yPos < height; ++yPos) { - unsigned char* pixelsPtr = NULL; + std::uint8_t* pixelsPtr = NULL; if(topDown) { pixelsPtr = pixels + (yPos * rowStride); @@ -163,11 +163,11 @@ bool DecodeRGB24V5(FILE* fp, DALI_LOG_ERROR("Error reading the BMP image\n"); return false; } - for(unsigned int i = 0; i < rowStride; i += 3) + for(std::uint32_t i = 0; i < rowStride; i += 3) { - unsigned char temp = pixelsPtr[i]; - pixelsPtr[i] = pixelsPtr[i + 2]; - pixelsPtr[i + 2] = temp; + std::uint8_t temp = pixelsPtr[i]; + pixelsPtr[i] = pixelsPtr[i + 2]; + pixelsPtr[i + 2] = temp; } if(padding) @@ -214,9 +214,9 @@ bool DecodeBF32V4(FILE* fp, return false; } - for(unsigned int yPos = 0; yPos < height; yPos++) + for(std::uint32_t yPos = 0; yPos < height; ++yPos) { - unsigned char* pixelsPtr = NULL; + std::uint8_t* pixelsPtr = NULL; if(topDown) { pixelsPtr = pixels + (yPos * rowStride); @@ -230,11 +230,11 @@ bool DecodeBF32V4(FILE* fp, DALI_LOG_ERROR("Error reading the BMP image\n"); return false; } - for(unsigned int i = 0; i < rowStride; i += 4) + for(std::uint32_t i = 0; i < rowStride; i += 4) { - unsigned char temp = pixelsPtr[i]; - pixelsPtr[i] = pixelsPtr[i + 2]; - pixelsPtr[i + 2] = temp; + std::uint8_t temp = pixelsPtr[i]; + pixelsPtr[i] = pixelsPtr[i + 2]; + pixelsPtr[i + 2] = temp; } if(padding) { @@ -280,9 +280,9 @@ bool DecodeBF32(FILE* fp, return false; } - for(unsigned int yPos = 0; yPos < height; yPos++) + for(std::uint32_t yPos = 0; yPos < height; ++yPos) { - unsigned char* pixelsPtr; + std::uint8_t* pixelsPtr; if(topDown) { // the data in the file is top down, and we store the data top down @@ -299,11 +299,11 @@ bool DecodeBF32(FILE* fp, DALI_LOG_ERROR("Error reading the BMP image\n"); return false; } - for(unsigned int i = 0; i < rowStride; i += 4) + for(std::uint32_t i = 0; i < rowStride; i += 4) { - unsigned char temp = pixelsPtr[i]; - pixelsPtr[i] = pixelsPtr[i + 2]; - pixelsPtr[i + 2] = temp; + std::uint8_t temp = pixelsPtr[i]; + pixelsPtr[i] = pixelsPtr[i + 2]; + pixelsPtr[i + 2] = temp; } if(padding) @@ -346,12 +346,12 @@ bool DecodeBF565(FILE* fp, return false; } - width = ((width & 3) != 0) ? width + 4 - (width & 3) : width; - unsigned int rowStride = width * 2; + width = ((width & 3) != 0) ? width + 4 - (width & 3) : width; + std::uint32_t rowStride = width * 2; - for(unsigned int i = 0; i < height; i++) + for(std::uint32_t i = 0; i < height; ++i) { - unsigned char* pixelsPtr = NULL; + std::uint8_t* pixelsPtr = NULL; if(topDown) { // the data in the file is top down, and we store the data top down @@ -402,12 +402,12 @@ bool DecodeBF555(FILE* fp, width = ((width & 3) != 0) ? width + 4 - (width & 3) : width; - std::vector raw(width * height * 2); - unsigned int rawStride = width * 2; - unsigned int rowStride = width * 3; + std::vector raw(width * height * 2); + std::uint32_t rawStride = width * 2; + std::uint32_t rowStride = width * 3; - char* rawPtr = NULL; - for(unsigned int j = 0; j < height; j++) + std::uint8_t* rawPtr = NULL; + for(std::uint32_t j = 0; j < height; ++j) { rawPtr = &raw[0] + (j * rawStride); if(fread(rawPtr, 1, rawStride, fp) != rawStride) @@ -416,9 +416,9 @@ bool DecodeBF555(FILE* fp, } } - for(unsigned int yPos = 0; yPos < height; yPos++) + for(std::uint32_t yPos = 0; yPos < height; ++yPos) { - unsigned char* pixelsPtr = NULL; + std::uint8_t* pixelsPtr = NULL; if(topDown) { // the data in the file is top down, and we store the data top down @@ -430,9 +430,9 @@ bool DecodeBF555(FILE* fp, pixelsPtr = pixels + (((height - 1) - yPos) * rowStride); } - for(unsigned int k = 0; k < width; k++) + for(std::uint32_t k = 0; k < width; ++k) { - int index = yPos * rawStride + 2 * k; + std::uint32_t index = yPos * rawStride + 2 * k; pixelsPtr[3 * k] = ((raw[index + 1] >> 2) & 0x1F) * 0xFF / 0x1F; pixelsPtr[3 * k + 1] = (((raw[index + 1] & 0x03) << 3) | (raw[index] >> 5)) * 0xFF / 0x1F; pixelsPtr[3 * k + 2] = (raw[index] & 0x1F) * 0xFF / 0x1F; @@ -470,12 +470,12 @@ bool DecodeRGB555(FILE* fp, } width = ((width & 3) != 0) ? width + 4 - (width & 3) : width; - std::vector raw(width * height * 2); - unsigned int rawStride = width * 2; - unsigned int rowStride = width * 3; + std::vector raw(width * height * 2); + std::uint32_t rawStride = width * 2; + std::uint32_t rowStride = width * 3; - char* rawPtr = NULL; - for(unsigned int j = 0; j < height; j++) + std::uint8_t* rawPtr = NULL; + for(std::uint32_t j = 0; j < height; ++j) { rawPtr = &raw[0] + (j * rawStride); if(fread(rawPtr, 1, rawStride, fp) != rawStride) @@ -483,9 +483,9 @@ bool DecodeRGB555(FILE* fp, return false; } } - for(unsigned int i = 0; i < height; i++) + for(std::uint32_t i = 0; i < height; ++i) { - unsigned char* pixelsPtr = NULL; + std::uint8_t* pixelsPtr = NULL; if(topDown) { // the data in the file is top down, and we store the data top down @@ -496,9 +496,9 @@ bool DecodeRGB555(FILE* fp, // the data in the file is bottom up, and we store the data top down pixelsPtr = pixels + (((height - 1) - i) * rowStride); } - for(unsigned int k = 0; k < width; k++) + for(std::uint32_t k = 0; k < width; ++k) { - int index = i * rawStride + 2 * k; + std::uint32_t index = i * rawStride + 2 * k; pixelsPtr[3 * k] = ((raw[index + 1] >> 2) & 0x1F) * 0xFF / 0x1F; pixelsPtr[3 * k + 1] = (((raw[index + 1] & 0x03) << 3) | (raw[index] >> 5)) * 0xFF / 0x1F; pixelsPtr[3 * k + 2] = (raw[index] & 0x1F) * 0xFF / 0x1F; @@ -535,18 +535,18 @@ bool DecodeRGB1(FILE* fp, return false; } - unsigned char colorTable[8] = {0}; - char cmd; - unsigned int fillw = ((width & 63) != 0) ? width + 64 - (width & 63) : width; - std::vector colorIndex(fillw * height); - unsigned int rowStride = fillw * 3; // RGB + std::uint8_t colorTable[8] = {0}; + std::uint8_t cmd; + std::uint32_t fillw = ((width & 63) != 0) ? width + 64 - (width & 63) : width; + std::vector colorIndex(fillw * height); + std::uint32_t rowStride = fillw * 3; // RGB if(fread(colorTable, 1, 8, fp) != 8) { return false; } - for(unsigned int i = 0; i < fillw * height; i += 8) + for(std::uint32_t i = 0; i < fillw * height; i += 8) { if(fread(&cmd, 1, 1, fp) != 1) { @@ -563,9 +563,9 @@ bool DecodeRGB1(FILE* fp, colorIndex[i + 7] = (cmd & 0x01); } - for(unsigned int index = 0; index < height; index = index + 1) + for(std::uint32_t index = 0; index < height; ++index) { - unsigned char* pixelsPtr = NULL; + std::uint8_t* pixelsPtr = NULL; if(topDown) { // the data in the file is top down, and we store the data top down @@ -576,9 +576,9 @@ bool DecodeRGB1(FILE* fp, // the data in the file is bottom up, and we store the data top down pixelsPtr = pixels + (((height - 1) - index) * rowStride); } - for(unsigned int j = 0; j < fillw; j++) + for(std::uint32_t j = 0; j < fillw; ++j) { - unsigned int ctIndex = 0; + std::uint32_t ctIndex = 0; if((fillw * index + j) < (fillw * height)) { ctIndex = colorIndex[fillw * index + j]; @@ -627,18 +627,18 @@ bool DecodeRGB4(FILE* fp, return false; } - char colorTable[64]; - char cmd; - unsigned int fillw = ((width & 3) != 0) ? width + 4 - (width & 3) : width; - std::vector colorIndex(fillw * height); - unsigned int rowStride = fillw * 3; + std::uint8_t colorTable[64]; + std::uint8_t cmd; + std::uint32_t fillw = ((width & 3) != 0) ? width + 4 - (width & 3) : width; + std::vector colorIndex(fillw * height); + std::uint32_t rowStride = fillw * 3; if(fread(colorTable, 1, 64, fp) != 64) { return false; } - for(unsigned int i = 0; i < fillw * height; i += 2) + for(std::uint32_t i = 0; i < fillw * height; i += 2) { if(fread(&cmd, 1, 1, fp) != 1) { @@ -648,11 +648,11 @@ bool DecodeRGB4(FILE* fp, colorIndex[i] = cmd >> 4; colorIndex[i + 1] = cmd & (0x0F); } - unsigned int ctIndex = 0; + std::uint32_t ctIndex = 0; - for(unsigned int index = 0; index < height; index = index + 1) + for(std::uint32_t index = 0; index < height; ++index) { - unsigned char* pixelsPtr = NULL; + std::uint8_t* pixelsPtr = NULL; if(topDown) { // the data in the file is top down, and we store the data top down @@ -663,7 +663,7 @@ bool DecodeRGB4(FILE* fp, // the data in the file is bottom up, and we store the data top down pixelsPtr = pixels + (((height - 1) - index) * rowStride); } - for(unsigned int j = 0; j < fillw; j++) + for(std::uint32_t j = 0; j < fillw; ++j) { ctIndex = colorIndex[fillw * index + j]; pixelsPtr[3 * j] = colorTable[4 * ctIndex + 2]; @@ -703,29 +703,23 @@ bool DecodeRGB8(FILE* fp, return false; } - std::vector colorTable(1024); + std::vector colorTable(1024); width = ((width & 3) != 0) ? width + 4 - (width & 3) : width; - char cmd; - std::vector colorIndex(width * height); - unsigned int rowStride = width * 3; //RGB8->RGB24 + std::vector colorIndex(width * height); + std::uint32_t rowStride = width * 3; //RGB8->RGB24 if(fread(&colorTable[0], 1, 1024, fp) != 1024) { return false; } - for(unsigned int i = 0; i < width * height; i++) + if(fread(&colorIndex[0], 1, width * height, fp) != width * height) { - if(fread(&cmd, 1, 1, fp) != 1) - { - return false; - } - - colorIndex[i] = cmd; + return false; } - unsigned int ctIndex = 0; - for(unsigned int index = 0; index < height; index = index + 1) + std::uint8_t ctIndex = 0; + for(std::uint32_t index = 0; index < height; ++index) { - unsigned char* pixelsPtr = NULL; + std::uint8_t* pixelsPtr = NULL; if(topDown) { // the data in the file is top down, and we store the data top down @@ -736,7 +730,7 @@ bool DecodeRGB8(FILE* fp, // the data in the file is bottom up, and we store the data top down pixelsPtr = pixels + (((height - 1) - index) * rowStride); } - for(unsigned int j = 0; j < width; j++) + for(std::uint8_t j = 0; j < width; ++j) { ctIndex = colorIndex[width * index + j]; pixelsPtr[3 * j] = colorTable[4 * ctIndex + 2]; @@ -769,17 +763,17 @@ bool DecodeRLE4(FILE* fp, DALI_LOG_ERROR("Error decoding BMP_RLE4 format\n"); return false; } - unsigned char* pixelsPtr = pixels; - width = ((width & 3) != 0) ? width + 4 - (width & 3) : width; - char cmd[2]; - unsigned int cmdStride = 2; - char colorTable[64]; - std::vector colorIndex(width * height >> 1); - std::vector run; - unsigned int x = 0; - unsigned int y = 0; - unsigned int dx = 0; - unsigned int dy = 0; + std::uint8_t* pixelsPtr = pixels; + width = ((width & 3) != 0) ? width + 4 - (width & 3) : width; + std::uint8_t cmd[2]; + std::uint32_t cmdStride = 2; + std::uint8_t colorTable[64]; + std::vector colorIndex(width * height >> 1); + std::vector run; + std::uint32_t x = 0; + std::uint32_t y = 0; + std::uint32_t dx = 0; + std::uint32_t dy = 0; width += (width & 1); width = width >> 1; @@ -830,9 +824,9 @@ bool DecodeRLE4(FILE* fp, break; default: // decode a literal run - unsigned int length = cmd[1] & (0xFF); + std::uint32_t length = cmd[1] & (0xFF); //size of run, which is word aligned - unsigned int bytesize = length; + std::uint32_t bytesize = length; bytesize += (bytesize & 1); bytesize >>= 1; bytesize += (bytesize & 1); @@ -846,14 +840,14 @@ bool DecodeRLE4(FILE* fp, { length += (length & 1); length >>= 1; - for(unsigned int i = 0; i < length; i += 1) + for(std::uint32_t i = 0; i < length; ++i) { colorIndex[(x >> 1) + width * (height - y - 1) + i] = run[i]; } } else { - for(unsigned int i = 0; i < length; i++) + for(std::uint32_t i = 0; i < length; ++i) { if((i & 1) == 0) //copy high to low { @@ -871,19 +865,19 @@ bool DecodeRLE4(FILE* fp, } else { - unsigned int length = cmd[0] & (0xFF); + std::uint32_t length = cmd[0] & (0xFF); if((x & 1) == 0) { length += (length & 1); length >>= 1; - for(unsigned int i = 0; i < length; i++) + for(std::uint32_t i = 0; i < length; ++i) { colorIndex[(height - y - 1) * width + i + (x >> 1)] = cmd[1]; } } else { - for(unsigned int i = 0; i < length; i++) + for(std::uint32_t i = 0; i < length; ++i) { if((i & 1) == 0) { @@ -899,9 +893,9 @@ bool DecodeRLE4(FILE* fp, } } - int ctIndexHigh = 0; - int ctIndexLow = 0; - for(unsigned int index = 0; index < (width * height); index = index + 1) + std::uint32_t ctIndexHigh = 0; + std::uint32_t ctIndexLow = 0; + for(std::uint32_t index = 0; index < (width * height); ++index) { ctIndexHigh = colorIndex[index] >> 4; ctIndexLow = colorIndex[index] & (0x0F); @@ -937,15 +931,15 @@ bool DecodeRLE8(FILE* fp, DALI_LOG_ERROR("Error decoding BMP_RLE8 format\n"); return false; } - unsigned char* pixelsPtr = pixels; - unsigned int x = 0; - unsigned int y = 0; - unsigned int cmdStride = 2; + std::uint8_t* pixelsPtr = pixels; + std::uint32_t x = 0; + std::uint32_t y = 0; + std::uint32_t cmdStride = 2; width = ((width & 3) != 0) ? width + 4 - (width & 3) : width; - std::vector colorTable(1024); - char cmd[2]; - std::vector colorIndex(width * height); + std::vector colorTable(1024); + std::uint8_t cmd[2]; + std::vector colorIndex(width * height); if(fseek(fp, offset, SEEK_SET)) { @@ -958,12 +952,12 @@ bool DecodeRLE8(FILE* fp, return false; } - unsigned int dx = 0; - unsigned int dy = 0; - bool finish = false; - unsigned int length = 0; - unsigned int copylength = 0; - std::vector run; + std::uint32_t dx = 0; + std::uint32_t dy = 0; + bool finish = false; + std::uint32_t length = 0; + std::uint32_t copylength = 0; + std::vector run; while((x + y * width) < width * height) { if(finish) @@ -1010,7 +1004,7 @@ bool DecodeRLE8(FILE* fp, return false; } - for(unsigned int i = 0; i < length; i += 1) + for(std::uint32_t i = 0; i < length; ++i) { colorIndex[x + width * (height - y - 1) + i] = run[i]; } @@ -1021,15 +1015,15 @@ bool DecodeRLE8(FILE* fp, else { length = cmd[0] & (0xFF); - for(unsigned int i = 0; i < length; i++) + for(std::uint32_t i = 0; i < length; ++i) { colorIndex[(height - y - 1) * width + x] = cmd[1]; x++; } } } - int ctIndex = 0; - for(unsigned int index = 0; index < width * height; index = index + 1) + std::uint32_t ctIndex = 0; + for(std::uint32_t index = 0; index < width * height; ++index) { ctIndex = colorIndex[index]; pixelsPtr[3 * index] = colorTable[4 * ctIndex + 2]; -- 2.7.4