rhodes 2.4.1 → 3.0.0.beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. data/CHANGELOG +7 -0
  2. data/Rakefile +7 -36
  3. data/doc/build.txt +48 -22
  4. data/doc/device-caps.txt +130 -1
  5. data/doc/rhom.txt +9 -3
  6. data/doc/test-log-debug.txt +5 -2
  7. data/lib/extensions/barcode/ext/barcode/platform/android/Rakefile +40 -20
  8. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/AUTHORS +58 -0
  9. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/CHANGES +266 -0
  10. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/COPYING +201 -0
  11. data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/README +11 -0
  12. data/lib/extensions/barcode/ext/barcode/platform/android/ext_build.files +173 -0
  13. data/lib/extensions/barcode/ext/barcode/platform/android/jni/src/barcode.cpp +34 -0
  14. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/BarcodeFormat.java +103 -0
  15. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Binarizer.java +80 -0
  16. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/BinaryBitmap.java +128 -0
  17. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ChecksumException.java +37 -0
  18. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/DecodeHintType.java +79 -0
  19. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/EncodeHintType.java +39 -0
  20. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/FormatException.java +38 -0
  21. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/LuminanceSource.java +113 -0
  22. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/MultiFormatReader.java +166 -0
  23. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/MultiFormatWriter.java +65 -0
  24. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/NotFoundException.java +37 -0
  25. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Reader.java +64 -0
  26. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ReaderException.java +98 -0
  27. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Result.java +143 -0
  28. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultMetadataType.java +109 -0
  29. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultPoint.java +127 -0
  30. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultPointCallback.java +29 -0
  31. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Writer.java +54 -0
  32. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/WriterException.java +35 -0
  33. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AbstractDoCoMoResultParser.java +39 -0
  34. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookAUResultParser.java +73 -0
  35. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookDoCoMoResultParser.java +85 -0
  36. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookParsedResult.java +122 -0
  37. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/BizcardResultParser.java +94 -0
  38. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/BookmarkDoCoMoResultParser.java +46 -0
  39. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/CalendarParsedResult.java +134 -0
  40. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailAddressParsedResult.java +61 -0
  41. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailAddressResultParser.java +64 -0
  42. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailDoCoMoResultParser.java +87 -0
  43. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ExpandedProductParsedResult.java +195 -0
  44. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ExpandedProductResultParser.java +199 -0
  45. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/GeoParsedResult.java +132 -0
  46. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/GeoResultParser.java +77 -0
  47. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ISBNParsedResult.java +39 -0
  48. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ISBNResultParser.java +54 -0
  49. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ParsedResult.java +73 -0
  50. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ParsedResultType.java +53 -0
  51. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ProductParsedResult.java +49 -0
  52. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ProductResultParser.java +66 -0
  53. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ResultParser.java +319 -0
  54. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSMMSResultParser.java +107 -0
  55. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSParsedResult.java +104 -0
  56. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSTOMMSTOResultParser.java +57 -0
  57. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TelParsedResult.java +54 -0
  58. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TelResultParser.java +44 -0
  59. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TextParsedResult.java +48 -0
  60. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URIParsedResult.java +113 -0
  61. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URIResultParser.java +87 -0
  62. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URLTOResultParser.java +47 -0
  63. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/VCardResultParser.java +346 -0
  64. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/VEventResultParser.java +54 -0
  65. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/WifiParsedResult.java +53 -0
  66. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/WifiResultParser.java +50 -0
  67. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/AbstractNDEFResultParser.java +45 -0
  68. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFRecord.java +87 -0
  69. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFSmartPosterParsedResult.java +63 -0
  70. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFSmartPosterResultParser.java +81 -0
  71. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFTextResultParser.java +57 -0
  72. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFURIResultParser.java +95 -0
  73. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitArray.java +247 -0
  74. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitMatrix.java +226 -0
  75. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitSource.java +97 -0
  76. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/CharacterSetECI.java +110 -0
  77. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/Collections.java +53 -0
  78. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/Comparator.java +27 -0
  79. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DecoderResult.java +63 -0
  80. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DefaultGridSampler.java +81 -0
  81. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DetectorResult.java +46 -0
  82. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/ECI.java +52 -0
  83. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/GlobalHistogramBinarizer.java +196 -0
  84. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/GridSampler.java +171 -0
  85. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/HybridBinarizer.java +185 -0
  86. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/PerspectiveTransform.java +148 -0
  87. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/StringUtils.java +191 -0
  88. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/detector/MonochromeRectangleDetector.java +209 -0
  89. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/detector/WhiteRectangleDetector.java +316 -0
  90. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/GF256.java +139 -0
  91. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/GF256Poly.java +263 -0
  92. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.java +194 -0
  93. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonEncoder.java +75 -0
  94. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonException.java +31 -0
  95. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/DataMatrixReader.java +161 -0
  96. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/BitMatrixParser.java +446 -0
  97. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/DataBlock.java +118 -0
  98. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/DecodedBitStreamParser.java +462 -0
  99. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/Decoder.java +134 -0
  100. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/Version.java +242 -0
  101. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/detector/Detector.java +348 -0
  102. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/ByQuadrantReader.java +96 -0
  103. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/GenericMultipleBarcodeReader.java +156 -0
  104. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/MultipleBarcodeReader.java +37 -0
  105. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/QRCodeMultiReader.java +80 -0
  106. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/detector/MultiDetector.java +72 -0
  107. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.java +324 -0
  108. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/CodaBarReader.java +263 -0
  109. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code128Reader.java +473 -0
  110. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code128Writer.java +73 -0
  111. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code39Reader.java +333 -0
  112. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code39Writer.java +82 -0
  113. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code93Reader.java +273 -0
  114. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN13Reader.java +135 -0
  115. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN13Writer.java +81 -0
  116. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN8Reader.java +72 -0
  117. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN8Writer.java +76 -0
  118. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EANManufacturerOrgSupport.java +170 -0
  119. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/ITFReader.java +348 -0
  120. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/ITFWriter.java +68 -0
  121. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/MultiFormatOneDReader.java +109 -0
  122. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/MultiFormatUPCEANReader.java +113 -0
  123. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/OneDReader.java +297 -0
  124. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCAReader.java +75 -0
  125. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANExtensionSupport.java +186 -0
  126. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANReader.java +355 -0
  127. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANWriter.java +104 -0
  128. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEReader.java +153 -0
  129. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/AbstractRSSReader.java +110 -0
  130. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/DataCharacter.java +37 -0
  131. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/FinderPattern.java +48 -0
  132. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/Pair.java +41 -0
  133. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/RSS14Reader.java +494 -0
  134. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/RSSUtils.java +155 -0
  135. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/BitArrayBuilder.java +85 -0
  136. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/ExpandedPair.java +68 -0
  137. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java +578 -0
  138. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013103decoder.java +47 -0
  139. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01320xDecoder.java +55 -0
  140. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01392xDecoder.java +66 -0
  141. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder.java +76 -0
  142. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0x1xDecoder.java +106 -0
  143. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0xDecoder.java +56 -0
  144. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01AndOtherAIs.java +56 -0
  145. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01decoder.java +81 -0
  146. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01weightDecoder.java +58 -0
  147. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder.java +85 -0
  148. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoder.java +48 -0
  149. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult.java +60 -0
  150. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/CurrentParsingState.java +69 -0
  151. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedChar.java +52 -0
  152. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedInformation.java +63 -0
  153. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedNumeric.java +79 -0
  154. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedObject.java +44 -0
  155. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/FieldParser.java +285 -0
  156. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder.java +414 -0
  157. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/PDF417Reader.java +79 -0
  158. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/BitMatrixParser.java +1163 -0
  159. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java +629 -0
  160. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/Decoder.java +150 -0
  161. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/detector/Detector.java +498 -0
  162. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/QRCodeReader.java +166 -0
  163. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/QRCodeWriter.java +108 -0
  164. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/BitMatrixParser.java +203 -0
  165. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DataBlock.java +123 -0
  166. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DataMask.java +155 -0
  167. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java +261 -0
  168. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Decoder.java +148 -0
  169. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.java +86 -0
  170. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/FormatInformation.java +171 -0
  171. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Mode.java +112 -0
  172. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Version.java +586 -0
  173. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/AlignmentPattern.java +48 -0
  174. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/AlignmentPatternFinder.java +279 -0
  175. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/Detector.java +400 -0
  176. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPattern.java +63 -0
  177. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPatternFinder.java +585 -0
  178. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPatternInfo.java +49 -0
  179. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/BlockPair.java +37 -0
  180. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/ByteMatrix.java +97 -0
  181. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/Encoder.java +557 -0
  182. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/MaskUtil.java +217 -0
  183. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/MatrixUtil.java +524 -0
  184. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/QRCode.java +239 -0
  185. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/rhomobile/barcode/Barcode.java +63 -0
  186. data/lib/extensions/barcode/ext/barcode/platform/android/src/com/rhomobile/barcode/RhoLuminanceSource.java +75 -0
  187. data/lib/extensions/barcode/ext/barcode/platform/iphone/Barcode.xcodeproj/project.pbxproj +74 -318
  188. data/lib/extensions/barcode/ext/barcode/platform/iphone/Classes/barcode.m +70 -0
  189. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/COPYING +27 -0
  190. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarCaptureReader.h +105 -0
  191. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarHelpController.h +60 -0
  192. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImage.h +69 -0
  193. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImageScanner.h +51 -0
  194. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderController.h +142 -0
  195. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderView.h +118 -0
  196. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderViewController.h +100 -0
  197. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSDK.h +33 -0
  198. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSymbol.h +71 -0
  199. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar.h +1476 -0
  200. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Decoder.h +201 -0
  201. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Exception.h +187 -0
  202. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Image.h +321 -0
  203. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/ImageScanner.h +130 -0
  204. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Processor.h +223 -0
  205. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Scanner.h +162 -0
  206. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Symbol.h +529 -0
  207. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Video.h +170 -0
  208. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Window.h +136 -0
  209. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/LICENSE +504 -0
  210. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/README +59 -0
  211. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-back.png +0 -0
  212. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-help.html +88 -0
  213. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-helpicons.png +0 -0
  214. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-samples.png +0 -0
  215. data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/libzbar.a +0 -0
  216. data/lib/extensions/debugger/debugger.rb +215 -67
  217. data/lib/extensions/nfc/ext/nfc/platform/android/AndroidManifest.xml +1 -1
  218. data/lib/extensions/nfc/ext/nfc/platform/android/src/com/nfc/Nfc.java +14 -2
  219. data/lib/extensions/timeout/timeout.rb +114 -0
  220. data/lib/framework/rho/render.rb +14 -16
  221. data/lib/framework/rho/rho.rb +38 -14
  222. data/lib/framework/rho/rhoapplication.rb +1 -1
  223. data/lib/framework/rho/rhocontroller.rb +3 -3
  224. data/lib/framework/rho/rhofsconnector.rb +18 -6
  225. data/lib/framework/rho/rhoviewhelpers.rb +1 -1
  226. data/lib/framework/rhoappmanifest.rb +44 -0
  227. data/lib/framework/rhodes.rb +1 -1
  228. data/lib/framework/rhoframework.rb +31 -11
  229. data/lib/framework/rholang/localization_simplified.rb +10 -6
  230. data/lib/framework/rhom/rhom_object_factory.rb +3 -3
  231. data/lib/framework/version.rb +1 -1
  232. data/lib/rhodes.rb +1 -1
  233. data/platform/android/Rhodes/AndroidManifest.xml +2 -2
  234. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesApplication.h +32 -8
  235. data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +21 -21
  236. data/platform/android/Rhodes/jni/src/rhocryptimpl.cpp +1 -0
  237. data/platform/android/Rhodes/jni/src/rhodes.cpp +21 -9
  238. data/platform/android/Rhodes/jni/src/sslimpl.cpp +1 -0
  239. data/platform/android/Rhodes/src/com/rhomobile/rhodes/BaseActivity.java +7 -6
  240. data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +19 -1
  241. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhoCryptImpl.java +2 -2
  242. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +24 -15
  243. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesApplication.java +39 -47
  244. data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +113 -106
  245. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +11 -0
  246. data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/StatusNotification.java +49 -0
  247. data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +1 -1
  248. data/platform/android/Rhodes/src/com/rhomobile/rhodes/socket/SSLImpl.java +5 -1
  249. data/platform/android/build/RhodesSRC_build.files +1 -0
  250. data/platform/android/build/android.rake +93 -6
  251. data/platform/bb/RubyVM/src/com/rho/RhodesApp.java +5 -4
  252. data/platform/bb/RubyVM/src/com/rho/file/RhoFile.java +10 -0
  253. data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +16 -15
  254. data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +2 -2
  255. data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +21 -19
  256. data/platform/bb/rhodes/src/com/rho/BrowserAdapter5.java +2 -2
  257. data/platform/bb/rhodes/src/com/rho/rubyext/System.java +6 -1
  258. data/platform/bb/rhodes/src/com/rho/rubyext/WebView.java +10 -3
  259. data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +21 -1
  260. data/platform/iphone/Classes/SimpleMainView.m +5 -5
  261. data/platform/iphone/Info.plist +1 -1
  262. data/platform/iphone/rbuild/iphone.rake +30 -1
  263. data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +12 -0
  264. data/platform/shared/SyncClient/SyncClient.cpp +136 -20
  265. data/platform/shared/SyncClient/SyncClient.h +17 -0
  266. data/platform/shared/common/AppMenu.cpp +6 -1
  267. data/platform/shared/common/RhoConf.cpp +13 -1
  268. data/platform/shared/common/RhoConf.h +3 -1
  269. data/platform/shared/common/RhoDefs.h +10 -0
  270. data/platform/shared/common/RhoFile.cpp +15 -0
  271. data/platform/shared/common/RhoFile.h +1 -0
  272. data/platform/shared/common/RhodesApp.cpp +16 -3
  273. data/platform/shared/common/RhodesApp.h +1 -0
  274. data/platform/shared/common/RhodesAppBase.cpp +102 -62
  275. data/platform/shared/common/RhodesAppBase.h +7 -1
  276. data/platform/shared/curl/lib/rhossl.c +1 -0
  277. data/platform/shared/db/DBAdapter.cpp +14 -2
  278. data/platform/shared/logging/RhoLogConf.cpp +21 -0
  279. data/platform/shared/logging/RhoLogConf.h +11 -0
  280. data/platform/shared/logging/RhoLogSink.cpp +24 -0
  281. data/platform/shared/logging/RhoLogSink.h +20 -1
  282. data/platform/shared/net/HttpServer.cpp +8 -6
  283. data/platform/shared/net/RawSocket.cpp +130 -0
  284. data/platform/shared/net/RawSocket.h +74 -0
  285. data/platform/shared/ruby/ext/rho/rhoruby.c +37 -1
  286. data/platform/shared/ruby/ext/rho/rhosupport.c +74 -21
  287. data/platform/shared/ruby/ext/sqlite3_api/sqlite3_api_wrap.c +9 -1
  288. data/platform/shared/ruby/vm_eval.c +4 -3
  289. data/platform/shared/sync/SyncEngine.cpp +11 -12
  290. data/platform/shared/sync/SyncEngine.h +2 -2
  291. data/platform/shared/sync/SyncNotify.cpp +41 -13
  292. data/platform/shared/sync/SyncNotify.h +20 -3
  293. data/platform/shared/sync/SyncSource.cpp +21 -19
  294. data/platform/shared/sync/SyncThread.cpp +11 -1
  295. data/platform/shared/sync/SyncThread.h +3 -0
  296. data/platform/shared/test/test_helper.cpp +7 -0
  297. data/platform/win32/RhoSimulator/QtCore4.dll +0 -0
  298. data/platform/win32/RhoSimulator/QtGui4.dll +0 -0
  299. data/platform/win32/RhoSimulator/QtNetwork4.dll +0 -0
  300. data/platform/win32/RhoSimulator/QtWebKit4.dll +0 -0
  301. data/platform/win32/RhoSimulator/imageformats/qgif4.dll +0 -0
  302. data/platform/win32/RhoSimulator/imageformats/qjpeg4.dll +0 -0
  303. data/platform/win32/RhoSimulator/rhosimulator.exe +0 -0
  304. data/platform/wm/RhoLib/RhoLib.vcproj +762 -14
  305. data/platform/wm/build/wm.rake +87 -10
  306. data/platform/wm/rhodes.sln +155 -72
  307. data/platform/wm/rhodes/MainWindow.cpp +5 -2
  308. data/platform/wm/rhodes/MainWindow.h +9 -1
  309. data/platform/wm/rhodes/RhoNativeViewManager.cpp +4 -0
  310. data/platform/wm/rhodes/Rhodes.cpp +60 -6
  311. data/platform/wm/rhodes/emulator/ExternalWebView.cpp +20 -0
  312. data/platform/wm/rhodes/emulator/ExternalWebView.h +23 -0
  313. data/platform/wm/rhodes/emulator/ExternalWebView.ui +46 -0
  314. data/platform/wm/rhodes/emulator/MainWindowCallback.h +18 -0
  315. data/platform/wm/rhodes/emulator/MainWindowProxy.cpp +268 -0
  316. data/platform/wm/rhodes/emulator/MainWindowProxy.h +34 -0
  317. data/platform/wm/rhodes/emulator/MainWindowQt.cpp +345 -0
  318. data/platform/wm/rhodes/emulator/MainWindowQt.h +118 -0
  319. data/platform/wm/rhodes/emulator/NativeToolbarQt.cpp +57 -0
  320. data/platform/wm/rhodes/emulator/NativeToolbarQt.h +52 -0
  321. data/platform/wm/rhodes/emulator/QtMainWindow.cpp +219 -0
  322. data/platform/wm/rhodes/emulator/QtMainWindow.h +62 -0
  323. data/platform/wm/rhodes/emulator/QtMainWindow.ui +122 -0
  324. data/platform/wm/rhodes/{RhoCryptImpl.cpp → rho/common/RhoCryptImpl.cpp} +0 -0
  325. data/platform/wm/rhodes/{RhoCryptImpl.h → rho/common/RhoCryptImpl.h} +0 -0
  326. data/platform/wm/rhodes/rho/rubyext/NativeToolbar.cpp +2 -86
  327. data/platform/wm/rhodes/rho/rubyext/NativeToolbarExt.cpp +87 -0
  328. data/platform/wm/rhodes/rho/rubyext/NativeToolbarExt.h +6 -0
  329. data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +60 -0
  330. data/platform/wm/rhodes/rhodes.vcproj +4025 -365
  331. data/platform/wm/rhodes/signature/Signature.cpp +29 -13
  332. data/platform/wm/rubylib/rubylib.vcproj +1167 -195
  333. data/platform/wm/shttpd/shttpd.vcproj +4 -4
  334. data/platform/wm/sqlite3/sqlite3.vcproj +441 -13
  335. data/platform/wm/syncengine/syncengine.vcproj +443 -15
  336. data/platform/wm/tcmalloc/tcmalloc.vcproj +0 -154
  337. data/platform/wm/tools/detool/LogServer.cpp +150 -0
  338. data/platform/wm/tools/detool/LogServer.h +23 -0
  339. data/platform/wm/tools/detool/detool.cpp +42 -4
  340. data/platform/wm/tools/detool/detool.vcproj +10 -1
  341. data/platform/wp7/IronRuby/Bin/Silverlight3Release/IronRuby.Libraries.dll +0 -0
  342. data/platform/wp7/IronRuby/Bin/Silverlight3Release/IronRuby.dll +0 -0
  343. data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Dynamic.dll +0 -0
  344. data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Scripting.Core.dll +0 -0
  345. data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Scripting.dll +0 -0
  346. data/platform/wp7/RhoAppRunner/Program.cs +20 -3
  347. data/platform/wp7/RhoLogServer/Program.cs +22 -0
  348. data/platform/wp7/RhoLogServer/Properties/AssemblyInfo.cs +36 -0
  349. data/platform/wp7/RhoLogServer/RhoLogServer.csproj +65 -0
  350. data/platform/wp7/RhoLogServer/SocketServer.cs +210 -0
  351. data/platform/wp7/RhoRubyExtGen/RhoAsyncHttp.cs +6 -0
  352. data/platform/wp7/RhoRubyLib/Initializers.Generated.cs +3 -2
  353. data/platform/wp7/RhoRubyLib/RhoRuby.cs +82 -0
  354. data/platform/wp7/RhoRubyLib/RhoRubyLib.csproj +7 -5
  355. data/platform/wp7/RhoRubyLib/WP_PlatformAdaptationLayer.cs +1 -1
  356. data/platform/wp7/RhoRubyLib/common/RhoParams.cs +1 -1
  357. data/platform/wp7/RhoRubyLib/common/ThreadQueue.cs +4 -1
  358. data/platform/wp7/RhoRubyLib/db/DBAdapter.cs +2 -2
  359. data/platform/wp7/RhoRubyLib/logging/IRhoLogSink.cs +1 -1
  360. data/platform/wp7/RhoRubyLib/logging/RhoEmptyLogger.cs +30 -0
  361. data/platform/wp7/RhoRubyLib/logging/RhoLogConf.cs +10 -0
  362. data/platform/wp7/RhoRubyLib/logging/RhoLogFileSink.cs +6 -1
  363. data/platform/wp7/RhoRubyLib/logging/RhoLogServerSink.cs +56 -0
  364. data/platform/wp7/RhoRubyLib/logging/RhoLogger.cs +24 -11
  365. data/platform/wp7/RhoRubyLib/net/AsyncHttp.cs +57 -14
  366. data/platform/wp7/RhoRubyLib/net/NetRequest.cs +32 -9
  367. data/platform/wp7/RhoRubyLib/rubyext/RhoAsyncHttp.cs +7 -0
  368. data/platform/wp7/RhoRubyLib/rubyext/RhoKernelOps.cs +6 -0
  369. data/platform/wp7/RhoRubyLib/sync/SyncEngine.cs +20 -16
  370. data/platform/wp7/RhoRubyLib/sync/SyncNotify.cs +2 -2
  371. data/platform/wp7/RhoRubyLib/sync/SyncSource.cs +138 -40
  372. data/platform/wp7/WPApplication/rho/apps/app/layout.erb +3 -1
  373. data/platform/wp7/build/wp.rake +151 -12
  374. data/platform/wp7/rhodes.sln +10 -0
  375. data/platform/wp7/rhodes/App.xaml.cs +6 -0
  376. data/platform/wp7/rhodes/MainPage.xaml +3 -0
  377. data/platform/wp7/rhodes/MainPage.xaml.cs +19 -0
  378. data/platform/wp7/rhodes/Rhodes.csproj +4 -2
  379. data/rakefile.rb +7 -36
  380. data/res/build-tools/RhoAppRunner.exe +0 -0
  381. data/res/build-tools/RhoLogServer.exe +0 -0
  382. data/res/build-tools/detool.exe +0 -0
  383. data/res/build-tools/wp7explorer.exe +0 -0
  384. data/res/generators/templates/application/app/layout.erb +3 -1
  385. data/res/generators/templates/application/public/jqtouch/jqtouch.js +1 -1
  386. data/rhodes.gemspec +1 -1
  387. data/spec/framework_spec/app/layout.erb +1 -1
  388. data/spec/framework_spec/build.yml +1 -0
  389. data/spec/perfomance_spec/app/layout.erb +3 -0
  390. data/spec/phone_spec/app/Account_s/account_s.rb +4 -1
  391. data/spec/phone_spec/app/spec/rhom_object_spec.rb +30 -1
  392. data/spec/phone_spec/app/spec_runner.rb +1 -1
  393. data/spec/phone_spec/build.yml +4 -1
  394. metadata +262 -10
  395. data/platform/wp7/IronRuby/Languages/Ruby/Ruby/Builtins/ConsoleStream.cs +0 -107
@@ -0,0 +1,52 @@
1
+ /*
2
+ * Copyright 2008 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.common;
18
+
19
+ /**
20
+ * Superclass of classes encapsulating types ECIs, according to "Extended Channel Interpretations"
21
+ * 5.3 of ISO 18004.
22
+ *
23
+ * @author Sean Owen
24
+ */
25
+ public abstract class ECI {
26
+
27
+ private final int value;
28
+
29
+ ECI(int value) {
30
+ this.value = value;
31
+ }
32
+
33
+ public int getValue() {
34
+ return value;
35
+ }
36
+
37
+ /**
38
+ * @param value ECI value
39
+ * @return {@link ECI} representing ECI of given value, or null if it is legal but unsupported
40
+ * @throws IllegalArgumentException if ECI value is invalid
41
+ */
42
+ public static ECI getECIByValue(int value) {
43
+ if (value < 0 || value > 999999) {
44
+ throw new IllegalArgumentException("Bad ECI value: " + value);
45
+ }
46
+ if (value < 900) { // Character set ECIs use 000000 - 000899
47
+ return CharacterSetECI.getCharacterSetECIByValue(value);
48
+ }
49
+ return null;
50
+ }
51
+
52
+ }
@@ -0,0 +1,196 @@
1
+ /*
2
+ * Copyright 2009 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.common;
18
+
19
+ import com.google.zxing.Binarizer;
20
+ import com.google.zxing.LuminanceSource;
21
+ import com.google.zxing.NotFoundException;
22
+
23
+ /**
24
+ * This Binarizer implementation uses the old ZXing global histogram approach. It is suitable
25
+ * for low-end mobile devices which don't have enough CPU or memory to use a local thresholding
26
+ * algorithm. However, because it picks a global black point, it cannot handle difficult shadows
27
+ * and gradients.
28
+ *
29
+ * Faster mobile devices and all desktop applications should probably use HybridBinarizer instead.
30
+ *
31
+ * @author dswitkin@google.com (Daniel Switkin)
32
+ * @author Sean Owen
33
+ */
34
+ public class GlobalHistogramBinarizer extends Binarizer {
35
+
36
+ private static final int LUMINANCE_BITS = 5;
37
+ private static final int LUMINANCE_SHIFT = 8 - LUMINANCE_BITS;
38
+ private static final int LUMINANCE_BUCKETS = 1 << LUMINANCE_BITS;
39
+
40
+ private byte[] luminances = null;
41
+ private int[] buckets = null;
42
+
43
+ public GlobalHistogramBinarizer(LuminanceSource source) {
44
+ super(source);
45
+ }
46
+
47
+ // Applies simple sharpening to the row data to improve performance of the 1D Readers.
48
+ public BitArray getBlackRow(int y, BitArray row) throws NotFoundException {
49
+ LuminanceSource source = getLuminanceSource();
50
+ int width = source.getWidth();
51
+ if (row == null || row.getSize() < width) {
52
+ row = new BitArray(width);
53
+ } else {
54
+ row.clear();
55
+ }
56
+
57
+ initArrays(width);
58
+ byte[] localLuminances = source.getRow(y, luminances);
59
+ int[] localBuckets = buckets;
60
+ for (int x = 0; x < width; x++) {
61
+ int pixel = localLuminances[x] & 0xff;
62
+ localBuckets[pixel >> LUMINANCE_SHIFT]++;
63
+ }
64
+ int blackPoint = estimateBlackPoint(localBuckets);
65
+
66
+ int left = localLuminances[0] & 0xff;
67
+ int center = localLuminances[1] & 0xff;
68
+ for (int x = 1; x < width - 1; x++) {
69
+ int right = localLuminances[x + 1] & 0xff;
70
+ // A simple -1 4 -1 box filter with a weight of 2.
71
+ int luminance = ((center << 2) - left - right) >> 1;
72
+ if (luminance < blackPoint) {
73
+ row.set(x);
74
+ }
75
+ left = center;
76
+ center = right;
77
+ }
78
+ return row;
79
+ }
80
+
81
+ // Does not sharpen the data, as this call is intended to only be used by 2D Readers.
82
+ public BitMatrix getBlackMatrix() throws NotFoundException {
83
+ LuminanceSource source = getLuminanceSource();
84
+ int width = source.getWidth();
85
+ int height = source.getHeight();
86
+ BitMatrix matrix = new BitMatrix(width, height);
87
+
88
+ // Quickly calculates the histogram by sampling four rows from the image. This proved to be
89
+ // more robust on the blackbox tests than sampling a diagonal as we used to do.
90
+ initArrays(width);
91
+ int[] localBuckets = buckets;
92
+ for (int y = 1; y < 5; y++) {
93
+ int row = height * y / 5;
94
+ byte[] localLuminances = source.getRow(row, luminances);
95
+ int right = (width << 2) / 5;
96
+ for (int x = width / 5; x < right; x++) {
97
+ int pixel = localLuminances[x] & 0xff;
98
+ localBuckets[pixel >> LUMINANCE_SHIFT]++;
99
+ }
100
+ }
101
+ int blackPoint = estimateBlackPoint(localBuckets);
102
+
103
+ // We delay reading the entire image luminance until the black point estimation succeeds.
104
+ // Although we end up reading four rows twice, it is consistent with our motto of
105
+ // "fail quickly" which is necessary for continuous scanning.
106
+ byte[] localLuminances = source.getMatrix();
107
+ for (int y = 0; y < height; y++) {
108
+ int offset = y * width;
109
+ for (int x = 0; x< width; x++) {
110
+ int pixel = localLuminances[offset + x] & 0xff;
111
+ if (pixel < blackPoint) {
112
+ matrix.set(x, y);
113
+ }
114
+ }
115
+ }
116
+
117
+ return matrix;
118
+ }
119
+
120
+ public Binarizer createBinarizer(LuminanceSource source) {
121
+ return new GlobalHistogramBinarizer(source);
122
+ }
123
+
124
+ private void initArrays(int luminanceSize) {
125
+ if (luminances == null || luminances.length < luminanceSize) {
126
+ luminances = new byte[luminanceSize];
127
+ }
128
+ if (buckets == null) {
129
+ buckets = new int[LUMINANCE_BUCKETS];
130
+ } else {
131
+ for (int x = 0; x < LUMINANCE_BUCKETS; x++) {
132
+ buckets[x] = 0;
133
+ }
134
+ }
135
+ }
136
+
137
+ private static int estimateBlackPoint(int[] buckets) throws NotFoundException {
138
+ // Find the tallest peak in the histogram.
139
+ int numBuckets = buckets.length;
140
+ int maxBucketCount = 0;
141
+ int firstPeak = 0;
142
+ int firstPeakSize = 0;
143
+ for (int x = 0; x < numBuckets; x++) {
144
+ if (buckets[x] > firstPeakSize) {
145
+ firstPeak = x;
146
+ firstPeakSize = buckets[x];
147
+ }
148
+ if (buckets[x] > maxBucketCount) {
149
+ maxBucketCount = buckets[x];
150
+ }
151
+ }
152
+
153
+ // Find the second-tallest peak which is somewhat far from the tallest peak.
154
+ int secondPeak = 0;
155
+ int secondPeakScore = 0;
156
+ for (int x = 0; x < numBuckets; x++) {
157
+ int distanceToBiggest = x - firstPeak;
158
+ // Encourage more distant second peaks by multiplying by square of distance.
159
+ int score = buckets[x] * distanceToBiggest * distanceToBiggest;
160
+ if (score > secondPeakScore) {
161
+ secondPeak = x;
162
+ secondPeakScore = score;
163
+ }
164
+ }
165
+
166
+ // Make sure firstPeak corresponds to the black peak.
167
+ if (firstPeak > secondPeak) {
168
+ int temp = firstPeak;
169
+ firstPeak = secondPeak;
170
+ secondPeak = temp;
171
+ }
172
+
173
+ // If there is too little contrast in the image to pick a meaningful black point, throw rather
174
+ // than waste time trying to decode the image, and risk false positives.
175
+ // TODO: It might be worth comparing the brightest and darkest pixels seen, rather than the
176
+ // two peaks, to determine the contrast.
177
+ if (secondPeak - firstPeak <= numBuckets >> 4) {
178
+ throw NotFoundException.getNotFoundInstance();
179
+ }
180
+
181
+ // Find a valley between them that is low and closer to the white peak.
182
+ int bestValley = secondPeak - 1;
183
+ int bestValleyScore = -1;
184
+ for (int x = secondPeak - 1; x > firstPeak; x--) {
185
+ int fromFirst = x - firstPeak;
186
+ int score = fromFirst * fromFirst * (secondPeak - x) * (maxBucketCount - buckets[x]);
187
+ if (score > bestValleyScore) {
188
+ bestValley = x;
189
+ bestValleyScore = score;
190
+ }
191
+ }
192
+
193
+ return bestValley << LUMINANCE_SHIFT;
194
+ }
195
+
196
+ }
@@ -0,0 +1,171 @@
1
+ /*
2
+ * Copyright 2007 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.common;
18
+
19
+ import com.google.zxing.NotFoundException;
20
+
21
+ /**
22
+ * Implementations of this class can, given locations of finder patterns for a QR code in an
23
+ * image, sample the right points in the image to reconstruct the QR code, accounting for
24
+ * perspective distortion. It is abstracted since it is relatively expensive and should be allowed
25
+ * to take advantage of platform-specific optimized implementations, like Sun's Java Advanced
26
+ * Imaging library, but which may not be available in other environments such as J2ME, and vice
27
+ * versa.
28
+ *
29
+ * The implementation used can be controlled by calling {@link #setGridSampler(GridSampler)}
30
+ * with an instance of a class which implements this interface.
31
+ *
32
+ * @author Sean Owen
33
+ */
34
+ public abstract class GridSampler {
35
+
36
+ private static GridSampler gridSampler = new DefaultGridSampler();
37
+
38
+ /**
39
+ * Sets the implementation of {@link GridSampler} used by the library. One global
40
+ * instance is stored, which may sound problematic. But, the implementation provided
41
+ * ought to be appropriate for the entire platform, and all uses of this library
42
+ * in the whole lifetime of the JVM. For instance, an Android activity can swap in
43
+ * an implementation that takes advantage of native platform libraries.
44
+ *
45
+ * @param newGridSampler The platform-specific object to install.
46
+ */
47
+ public static void setGridSampler(GridSampler newGridSampler) {
48
+ if (newGridSampler == null) {
49
+ throw new IllegalArgumentException();
50
+ }
51
+ gridSampler = newGridSampler;
52
+ }
53
+
54
+ /**
55
+ * @return the current implementation of {@link GridSampler}
56
+ */
57
+ public static GridSampler getInstance() {
58
+ return gridSampler;
59
+ }
60
+
61
+ /**
62
+ * <p>Samples an image for a square matrix of bits of the given dimension. This is used to extract
63
+ * the black/white modules of a 2D barcode like a QR Code found in an image. Because this barcode
64
+ * may be rotated or perspective-distorted, the caller supplies four points in the source image
65
+ * that define known points in the barcode, so that the image may be sampled appropriately.</p>
66
+ *
67
+ * <p>The last eight "from" parameters are four X/Y coordinate pairs of locations of points in
68
+ * the image that define some significant points in the image to be sample. For example,
69
+ * these may be the location of finder pattern in a QR Code.</p>
70
+ *
71
+ * <p>The first eight "to" parameters are four X/Y coordinate pairs measured in the destination
72
+ * {@link BitMatrix}, from the top left, where the known points in the image given by the "from"
73
+ * parameters map to.</p>
74
+ *
75
+ * <p>These 16 parameters define the transformation needed to sample the image.</p>
76
+ *
77
+ * @param image image to sample
78
+ * @param dimension width/height of {@link BitMatrix} to sample from image
79
+ * @return {@link BitMatrix} representing a grid of points sampled from the image within a region
80
+ * defined by the "from" parameters
81
+ * @throws NotFoundException if image can't be sampled, for example, if the transformation defined
82
+ * by the given points is invalid or results in sampling outside the image boundaries
83
+ */
84
+ public abstract BitMatrix sampleGrid(BitMatrix image,
85
+ int dimension,
86
+ float p1ToX, float p1ToY,
87
+ float p2ToX, float p2ToY,
88
+ float p3ToX, float p3ToY,
89
+ float p4ToX, float p4ToY,
90
+ float p1FromX, float p1FromY,
91
+ float p2FromX, float p2FromY,
92
+ float p3FromX, float p3FromY,
93
+ float p4FromX, float p4FromY) throws NotFoundException;
94
+
95
+ public BitMatrix sampleGrid(BitMatrix image,
96
+ int dimension,
97
+ PerspectiveTransform transform) throws NotFoundException {
98
+ throw new IllegalStateException(); // Can't use UnsupportedOperationException
99
+ }
100
+
101
+
102
+ /**
103
+ * <p>Checks a set of points that have been transformed to sample points on an image against
104
+ * the image's dimensions to see if the point are even within the image.</p>
105
+ *
106
+ * <p>This method will actually "nudge" the endpoints back onto the image if they are found to be
107
+ * barely (less than 1 pixel) off the image. This accounts for imperfect detection of finder
108
+ * patterns in an image where the QR Code runs all the way to the image border.</p>
109
+ *
110
+ * <p>For efficiency, the method will check points from either end of the line until one is found
111
+ * to be within the image. Because the set of points are assumed to be linear, this is valid.</p>
112
+ *
113
+ * @param image image into which the points should map
114
+ * @param points actual points in x1,y1,...,xn,yn form
115
+ * @throws NotFoundException if an endpoint is lies outside the image boundaries
116
+ */
117
+ protected static void checkAndNudgePoints(BitMatrix image, float[] points)
118
+ throws NotFoundException {
119
+ int width = image.getWidth();
120
+ int height = image.getHeight();
121
+ // Check and nudge points from start until we see some that are OK:
122
+ boolean nudged = true;
123
+ for (int offset = 0; offset < points.length && nudged; offset += 2) {
124
+ int x = (int) points[offset];
125
+ int y = (int) points[offset + 1];
126
+ if (x < -1 || x > width || y < -1 || y > height) {
127
+ throw NotFoundException.getNotFoundInstance();
128
+ }
129
+ nudged = false;
130
+ if (x == -1) {
131
+ points[offset] = 0.0f;
132
+ nudged = true;
133
+ } else if (x == width) {
134
+ points[offset] = width - 1;
135
+ nudged = true;
136
+ }
137
+ if (y == -1) {
138
+ points[offset + 1] = 0.0f;
139
+ nudged = true;
140
+ } else if (y == height) {
141
+ points[offset + 1] = height - 1;
142
+ nudged = true;
143
+ }
144
+ }
145
+ // Check and nudge points from end:
146
+ nudged = true;
147
+ for (int offset = points.length - 2; offset >= 0 && nudged; offset -= 2) {
148
+ int x = (int) points[offset];
149
+ int y = (int) points[offset + 1];
150
+ if (x < -1 || x > width || y < -1 || y > height) {
151
+ throw NotFoundException.getNotFoundInstance();
152
+ }
153
+ nudged = false;
154
+ if (x == -1) {
155
+ points[offset] = 0.0f;
156
+ nudged = true;
157
+ } else if (x == width) {
158
+ points[offset] = width - 1;
159
+ nudged = true;
160
+ }
161
+ if (y == -1) {
162
+ points[offset + 1] = 0.0f;
163
+ nudged = true;
164
+ } else if (y == height) {
165
+ points[offset + 1] = height - 1;
166
+ nudged = true;
167
+ }
168
+ }
169
+ }
170
+
171
+ }
@@ -0,0 +1,185 @@
1
+ /*
2
+ * Copyright 2009 ZXing authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ package com.google.zxing.common;
18
+
19
+ import com.google.zxing.Binarizer;
20
+ import com.google.zxing.LuminanceSource;
21
+ import com.google.zxing.NotFoundException;
22
+
23
+ /**
24
+ * This class implements a local thresholding algorithm, which while slower than the
25
+ * GlobalHistogramBinarizer, is fairly efficient for what it does. It is designed for
26
+ * high frequency images of barcodes with black data on white backgrounds. For this application,
27
+ * it does a much better job than a global blackpoint with severe shadows and gradients.
28
+ * However it tends to produce artifacts on lower frequency images and is therefore not
29
+ * a good general purpose binarizer for uses outside ZXing.
30
+ *
31
+ * This class extends GlobalHistogramBinarizer, using the older histogram approach for 1D readers,
32
+ * and the newer local approach for 2D readers. 1D decoding using a per-row histogram is already
33
+ * inherently local, and only fails for horizontal gradients. We can revisit that problem later,
34
+ * but for now it was not a win to use local blocks for 1D.
35
+ *
36
+ * This Binarizer is the default for the unit tests and the recommended class for library users.
37
+ *
38
+ * @author dswitkin@google.com (Daniel Switkin)
39
+ */
40
+ public final class HybridBinarizer extends GlobalHistogramBinarizer {
41
+
42
+ // This class uses 5x5 blocks to compute local luminance, where each block is 8x8 pixels.
43
+ // So this is the smallest dimension in each axis we can accept.
44
+ private static final int MINIMUM_DIMENSION = 40;
45
+
46
+ private BitMatrix matrix = null;
47
+
48
+ public HybridBinarizer(LuminanceSource source) {
49
+ super(source);
50
+ }
51
+
52
+ public BitMatrix getBlackMatrix() throws NotFoundException {
53
+ binarizeEntireImage();
54
+ return matrix;
55
+ }
56
+
57
+ public Binarizer createBinarizer(LuminanceSource source) {
58
+ return new HybridBinarizer(source);
59
+ }
60
+
61
+ // Calculates the final BitMatrix once for all requests. This could be called once from the
62
+ // constructor instead, but there are some advantages to doing it lazily, such as making
63
+ // profiling easier, and not doing heavy lifting when callers don't expect it.
64
+ private void binarizeEntireImage() throws NotFoundException {
65
+ if (matrix == null) {
66
+ LuminanceSource source = getLuminanceSource();
67
+ if (source.getWidth() >= MINIMUM_DIMENSION && source.getHeight() >= MINIMUM_DIMENSION) {
68
+ byte[] luminances = source.getMatrix();
69
+ int width = source.getWidth();
70
+ int height = source.getHeight();
71
+ int subWidth = width >> 3;
72
+ if ((width & 0x07) != 0) {
73
+ subWidth++;
74
+ }
75
+ int subHeight = height >> 3;
76
+ if ((height & 0x07) != 0) {
77
+ subHeight++;
78
+ }
79
+ int[][] blackPoints = calculateBlackPoints(luminances, subWidth, subHeight, width, height);
80
+
81
+ matrix = new BitMatrix(width, height);
82
+ calculateThresholdForBlock(luminances, subWidth, subHeight, width, height, blackPoints, matrix);
83
+ } else {
84
+ // If the image is too small, fall back to the global histogram approach.
85
+ matrix = super.getBlackMatrix();
86
+ }
87
+ }
88
+ }
89
+
90
+ // For each 8x8 block in the image, calculate the average black point using a 5x5 grid
91
+ // of the blocks around it. Also handles the corner cases (fractional blocks are computed based
92
+ // on the last 8 pixels in the row/column which are also used in the previous block).
93
+ private static void calculateThresholdForBlock(byte[] luminances, int subWidth, int subHeight,
94
+ int width, int height, int[][] blackPoints, BitMatrix matrix) {
95
+ for (int y = 0; y < subHeight; y++) {
96
+ int yoffset = y << 3;
97
+ if ((yoffset + 8) >= height) {
98
+ yoffset = height - 8;
99
+ }
100
+ for (int x = 0; x < subWidth; x++) {
101
+ int xoffset = x << 3;
102
+ if ((xoffset + 8) >= width) {
103
+ xoffset = width - 8;
104
+ }
105
+ int left = (x > 1) ? x : 2;
106
+ left = (left < subWidth - 2) ? left : subWidth - 3;
107
+ int top = (y > 1) ? y : 2;
108
+ top = (top < subHeight - 2) ? top : subHeight - 3;
109
+ int sum = 0;
110
+ for (int z = -2; z <= 2; z++) {
111
+ int[] blackRow = blackPoints[top + z];
112
+ sum += blackRow[left - 2];
113
+ sum += blackRow[left - 1];
114
+ sum += blackRow[left];
115
+ sum += blackRow[left + 1];
116
+ sum += blackRow[left + 2];
117
+ }
118
+ int average = sum / 25;
119
+ threshold8x8Block(luminances, xoffset, yoffset, average, width, matrix);
120
+ }
121
+ }
122
+ }
123
+
124
+ // Applies a single threshold to an 8x8 block of pixels.
125
+ private static void threshold8x8Block(byte[] luminances, int xoffset, int yoffset, int threshold,
126
+ int stride, BitMatrix matrix) {
127
+ for (int y = 0; y < 8; y++) {
128
+ int offset = (yoffset + y) * stride + xoffset;
129
+ for (int x = 0; x < 8; x++) {
130
+ int pixel = luminances[offset + x] & 0xff;
131
+ if (pixel < threshold) {
132
+ matrix.set(xoffset + x, yoffset + y);
133
+ }
134
+ }
135
+ }
136
+ }
137
+
138
+ // Calculates a single black point for each 8x8 block of pixels and saves it away.
139
+ private static int[][] calculateBlackPoints(byte[] luminances, int subWidth, int subHeight,
140
+ int width, int height) {
141
+ int[][] blackPoints = new int[subHeight][subWidth];
142
+ for (int y = 0; y < subHeight; y++) {
143
+ int yoffset = y << 3;
144
+ if ((yoffset + 8) >= height) {
145
+ yoffset = height - 8;
146
+ }
147
+ for (int x = 0; x < subWidth; x++) {
148
+ int xoffset = x << 3;
149
+ if ((xoffset + 8) >= width) {
150
+ xoffset = width - 8;
151
+ }
152
+ int sum = 0;
153
+ int min = 255;
154
+ int max = 0;
155
+ for (int yy = 0; yy < 8; yy++) {
156
+ int offset = (yoffset + yy) * width + xoffset;
157
+ for (int xx = 0; xx < 8; xx++) {
158
+ int pixel = luminances[offset + xx] & 0xff;
159
+ sum += pixel;
160
+ if (pixel < min) {
161
+ min = pixel;
162
+ }
163
+ if (pixel > max) {
164
+ max = pixel;
165
+ }
166
+ }
167
+ }
168
+
169
+ // If the contrast is inadequate, use half the minimum, so that this block will be
170
+ // treated as part of the white background, but won't drag down neighboring blocks
171
+ // too much.
172
+ int average;
173
+ if (max - min > 24) {
174
+ average = sum >> 6;
175
+ } else {
176
+ // When min == max == 0, let average be 1 so all is black
177
+ average = max == 0 ? 1 : min >> 1;
178
+ }
179
+ blackPoints[y][x] = average;
180
+ }
181
+ }
182
+ return blackPoints;
183
+ }
184
+
185
+ }