libdmtx 0.7.8.7
libdmtx is a software library that enables programs to read and write Data Matrix barcodes of the modern ECC200 variety.
Loading...
Searching...
No Matches
dmtxstatic.h
Go to the documentation of this file.
1
17#ifndef __DMTXSTATIC_H__
18#define __DMTXSTATIC_H__
19
20#include <assert.h>
21#include <stdio.h>
22
23#include "dmtx.h"
24
25#define DmtxAlmostZero 0.000001
26#define DmtxAlmostInfinity -1
27
28#define DmtxValueC40Latch 230
29#define DmtxValueTextLatch 239
30#define DmtxValueX12Latch 238
31#define DmtxValueEdifactLatch 240
32#define DmtxValueBase256Latch 231
33
34#define DmtxValueCTXUnlatch 254
35#define DmtxValueEdifactUnlatch 31
36
37#define DmtxValueAsciiPad 129
38#define DmtxValueAsciiUpperShift 235
39#define DmtxValueCTXShift1 0
40#define DmtxValueCTXShift2 1
41#define DmtxValueCTXShift3 2
42#define DmtxValueFNC1 232
43#define DmtxValueStructuredAppend 233
44#define DmtxValueReaderProgramming 234
45#define DmtxValue05Macro 236
46#define DmtxValue06Macro 237
47#define DmtxValueECI 241
48
49#define DmtxC40TextBasicSet 0
50#define DmtxC40TextShift1 1
51#define DmtxC40TextShift2 2
52#define DmtxC40TextShift3 3
53
54#define DmtxUnlatchExplicit 0
55#define DmtxUnlatchImplicit 1
56
57#define DmtxChannelValid 0x00
58#define DmtxChannelUnsupportedChar 0x01 << 0
59#define DmtxChannelCannotUnlatch 0x01 << 1
60
61#undef min
62#define min(X, Y) (((X) < (Y)) ? (X) : (Y))
63
64#undef max
65#define max(X, Y) (((X) > (Y)) ? (X) : (Y))
66
67#undef ISDIGIT
68#define ISDIGIT(n) (n > 47 && n < 58)
69
70/* Verify stream is using expected scheme */
71#define CHKSCHEME(s) \
72 { \
73 if (stream->currentScheme != (s)) { \
74 streamMarkFatal(stream, DmtxErrorUnexpectedScheme); \
75 return; \
76 } \
77 }
78
79/* CHKERR should follow any call that might alter stream status */
80#define CHKERR \
81 { \
82 if (stream->status != DmtxStatusEncoding) { \
83 return; \
84 } \
85 }
86
87/* CHKSIZE should follows typical calls to findSymbolSize() */
88#define CHKSIZE \
89 { \
90 if (sizeIdx == DmtxUndefined) { \
91 streamMarkInvalid(stream, DmtxErrorUnknown); \
92 return; \
93 } \
94 }
95
96#define DmtxAssert(expr) \
97 do { \
98 assert(expr); \
99 if (!!(expr)) { \
100 } else { \
101 dmtxLogError("%s\n", #expr); \
102 } \
103 } while (0)
104
106{
107 DmtxEncodeNormal, /* Use normal scheme behavior (e.g., ASCII auto) */
108 DmtxEncodeCompact, /* Use only compact format within scheme */
109 DmtxEncodeFull /* Use only fully expanded format within scheme */
111
118
119typedef enum DmtxEdge_enum
120{
121 DmtxEdgeTop = 0x01 << 0,
122 DmtxEdgeBottom = 0x01 << 1,
123 DmtxEdgeLeft = 0x01 << 2,
124 DmtxEdgeRight = 0x01 << 3
126
128{
129 DmtxMaskBit8 = 0x01 << 0,
130 DmtxMaskBit7 = 0x01 << 1,
131 DmtxMaskBit6 = 0x01 << 2,
132 DmtxMaskBit5 = 0x01 << 3,
133 DmtxMaskBit4 = 0x01 << 4,
134 DmtxMaskBit3 = 0x01 << 5,
135 DmtxMaskBit2 = 0x01 << 6,
136 DmtxMaskBit1 = 0x01 << 7
138
143typedef struct DmtxFollow_struct
144{
145 unsigned char *ptr;
146 unsigned char neighbor;
147 int step;
150
171
177
179{
180 va_list ap;
181 const char *fmt;
182 const char *file;
183 struct tm *time;
184 void *udata;
185 int line;
186 int level;
188
189typedef void (*DmtxLogFn)(DmtxLogEvent *ev);
190typedef void (*DmtxLogLockFn)(DmtxBoolean lock, void *udata);
191
192/* dmtxregion.c */
193static double rightAngleTrueness(DmtxVector2 c0, DmtxVector2 c1, DmtxVector2 c2, double angle);
197static int readModuleColor(DmtxDecode *dec, DmtxRegion *reg, int symbolRow, int symbolCol, int sizeIdx, int colorPlane);
198
200static int countJumpTally(DmtxDecode *dec, DmtxRegion *reg, int xStart, int yStart, DmtxDirection dir);
201static DmtxPointFlow getPointFlow(DmtxDecode *dec, int colorPlane, DmtxPixelLoc loc, int arrive);
203static DmtxFollow followSeek(DmtxDecode *dec, DmtxRegion *reg, int seek);
205static DmtxFollow followStep(DmtxDecode *dec, DmtxRegion *reg, DmtxFollow followBeg, int sign);
206static DmtxFollow followStep2(DmtxDecode *dec, DmtxFollow followBeg, int sign);
207static DmtxPassFail trailBlazeContinuous(DmtxDecode *dec, DmtxRegion *reg, DmtxPointFlow flowBegin, int maxDiagonal);
208static int trailBlazeGapped(DmtxDecode *dec, DmtxRegion *reg, DmtxBresLine line, int streamDir);
209static int trailClear(DmtxDecode *dec, DmtxRegion *reg, int clearMask);
210static DmtxBestLine findBestSolidLine(DmtxDecode *dec, DmtxRegion *reg, int step0, int step1, int streamDir,
211 int houghAvoid);
212static DmtxBestLine findBestSolidLine2(DmtxDecode *dec, DmtxPixelLoc loc0, int tripSteps, int sign, int houghAvoid);
216static DmtxPassFail bresLineGetStep(DmtxBresLine line, DmtxPixelLoc target, int *travel, int *outward);
217static DmtxPassFail bresLineStep(DmtxBresLine *line, int travel, int outward);
218/*static void WriteDiagnosticImage(DmtxDecode *dec, DmtxRegion *reg, char *imagePath);*/
219
220/* dmtxdecode.c */
221static void tallyModuleJumps(DmtxDecode *dec, DmtxRegion *reg, INOUT int tally[][24], int xOrigin, int yOrigin,
222 int mapWidth, int mapHeight, DmtxDirection dir);
224
225/* dmtxdecodescheme.c */
226static DmtxPassFail decodeDataStream(DmtxMessage *msg, int sizeIdx, unsigned char *outputStart);
227static int getEncodationScheme(unsigned char cw);
228static void pushOutputWord(DmtxMessage *msg, int value);
229static void pushOutputC40TextWord(DmtxMessage *msg, C40TextState *state, int value);
230static void pushOutputMacroHeader(DmtxMessage *msg, int macroType);
232static unsigned char *decodeSchemeAscii(DmtxMessage *msg, unsigned char *ptr, unsigned char *dataEnd);
233static unsigned char *decodeSchemeC40Text(DmtxMessage *msg, unsigned char *ptr, unsigned char *dataEnd,
234 DmtxScheme encScheme);
235static unsigned char *decodeSchemeX12(DmtxMessage *msg, unsigned char *ptr, unsigned char *dataEnd);
236static unsigned char *decodeSchemeEdifact(DmtxMessage *msg, unsigned char *ptr, unsigned char *dataEnd);
237static unsigned char *decodeSchemeBase256(DmtxMessage *msg, unsigned char *ptr, unsigned char *dataEnd);
238
239/* dmtxencode.c */
240static void printPattern(DmtxEncode *encode);
241static int encodeDataCodewords(DmtxByteList *input, DmtxByteList *output, int sizeIdxRequest, DmtxScheme scheme,
242 int fnc1);
243
244/* dmtxplacemod.c */
245static int modulePlacementEcc200(INOUT unsigned char *modules, OUT unsigned char *codewords, int sizeIdx,
246 int moduleOnColor);
247static void patternShapeStandard(unsigned char *modules, int mappingRows, int mappingCols, int row, int col,
248 unsigned char *codeword, int moduleOnColor);
249static void patternShapeSpecial1(unsigned char *modules, int mappingRows, int mappingCols, unsigned char *codeword,
250 int moduleOnColor);
251static void patternShapeSpecial2(unsigned char *modules, int mappingRows, int mappingCols, unsigned char *codeword,
252 int moduleOnColor);
253static void patternShapeSpecial3(unsigned char *modules, int mappingRows, int mappingCols, unsigned char *codeword,
254 int moduleOnColor);
255static void patternShapeSpecial4(unsigned char *modules, int mappingRows, int mappingCols, unsigned char *codeword,
256 int moduleOnColor);
257static void placeModule(unsigned char *modules, int mappingRows, int mappingCols, int row, int col,
258 unsigned char *codeword, int mask, int moduleOnColor);
259
260/* dmtxreedsol.c */
261static DmtxPassFail rsEncode(DmtxMessage *message, int sizeIdx);
262static DmtxPassFail rsDecode(unsigned char *code, int sizeIdx, int fix);
263static DmtxPassFail rsGenPoly(DmtxByteList *gen, int errorWordCount);
264static DmtxBoolean rsComputeSyndromes(DmtxByteList *syn, const DmtxByteList *rec, int blockErrorWords);
265static DmtxBoolean rsFindErrorLocatorPoly(DmtxByteList *elp, const DmtxByteList *syn, int errorWordCount,
266 int maxCorrectable);
269 const DmtxByteList *syn);
270
271/* dmtxscangrid.c */
273static int popGridLocation(DmtxScanGrid *grid, OUT DmtxPixelLoc *locPtr);
276
277/* dmtxsymbol.c */
278static int findSymbolSize(int dataWords, int sizeIdxRequest);
279
280/* dmtximage.c */
281static int getBitsPerPixel(int pack);
282
283/* dmtxencodestream.c */
286static void streamMarkComplete(DmtxEncodeStream *stream, int sizeIdx);
287static void streamMarkInvalid(DmtxEncodeStream *stream, int reasonIdx);
288static void streamMarkFatal(DmtxEncodeStream *stream, int reasonIdx);
291static void streamOutputSet(DmtxEncodeStream *stream, int index, DmtxByte value);
296
297/* dmtxencodescheme.c */
298static int encodeSingleScheme(DmtxByteList *input, DmtxByteList *output, int sizeIdxRequest, DmtxScheme scheme,
299 int fnc1);
300static void encodeNextChunk(DmtxEncodeStream *stream, int scheme, int subScheme, int sizeIdxRequest);
301static void encodeChangeScheme(DmtxEncodeStream *stream, DmtxScheme targetScheme, int unlatchType);
302static int getRemainingSymbolCapacity(int outputLength, int sizeIdx);
303
304/* dmtxencodeoptimize.c */
305static int encodeOptimizeBest(DmtxByteList *input, DmtxByteList *output, int sizeIdxRequest, int fnc1);
306static void streamAdvanceFromBest(DmtxEncodeStream *streamNext, DmtxEncodeStream *streamList, int targeteState,
307 int sizeIdxRequest);
308static void advanceAsciiCompact(DmtxEncodeStream *streamNext, DmtxEncodeStream *streamList, int state, int inputNext,
309 int sizeIdxRequest);
310static void advanceCTX(DmtxEncodeStream *streamNext, DmtxEncodeStream *streamList, int state, int inputNext,
311 int ctxValueCount, int sizeIdxRequest);
312static void advanceEdifact(DmtxEncodeStream *streamNext, DmtxEncodeStream *streamList, int state, int inputNext,
313 int sizeIdxRequest);
314static int getScheme(int state);
315static DmtxBoolean validStateSwitch(int fromState, int targetState);
316
317/* dmtxencodeascii.c */
318static void encodeNextChunkAscii(DmtxEncodeStream *stream, int option);
319static void appendValueAscii(DmtxEncodeStream *stream, DmtxByte value);
320static void completeIfDoneAscii(DmtxEncodeStream *stream, int sizeIdxRequest);
321static void padRemainingInAscii(DmtxEncodeStream *stream, int sizeIdx);
323 DmtxPassFail *passFail);
324static DmtxByte randomize253State(DmtxByte cwValue, int cwPosition);
325
326/* dmtxencodec40textx12.c */
327static void encodeNextChunkCTX(DmtxEncodeStream *stream, int sizeIdxRequest);
328static void appendValuesCTX(DmtxEncodeStream *stream, DmtxByteList *valueList);
330static void completeIfDoneCTX(DmtxEncodeStream *stream, int sizeIdxRequest);
331static void completePartialC40Text(DmtxEncodeStream *stream, DmtxByteList *valueList, int sizeIdxRequest);
332static void completePartialX12(DmtxEncodeStream *stream, DmtxByteList *valueList, int sizeIdxRequest);
334static void pushCTXValues(DmtxByteList *valueList, DmtxByte inputValue, int targetScheme, DmtxPassFail *passFail,
335 int fnc1);
336static DmtxBoolean isCTX(int scheme);
337static void shiftValueListBy3(DmtxByteList *list, DmtxPassFail *passFail);
338
339/* dmtxencodeedifact.c */
341static void appendValueEdifact(DmtxEncodeStream *stream, DmtxByte value);
342static void completeIfDoneEdifact(DmtxEncodeStream *stream, int sizeIdxRequest);
343
344/* dmtxencodebase256.c */
346static void appendValueBase256(DmtxEncodeStream *stream, DmtxByte value);
347static void completeIfDoneBase256(DmtxEncodeStream *stream, int sizeIdxRequest);
348static void updateBase256ChainHeader(DmtxEncodeStream *stream, int perfectSizeIdx);
351static DmtxByte randomize255State(DmtxByte cwValue, int cwPosition);
352static unsigned char unRandomize255State(unsigned char value, int idx);
353
354static const int dmtxNeighborNone = 8;
355static const int dmtxPatternX[] = {-1, 0, 1, 1, 1, 0, -1, -1};
356static const int dmtxPatternY[] = {-1, -1, -1, 0, 1, 1, 1, 0};
357static const DmtxPointFlow dmtxBlankEdge = {0, 0, 0, DmtxUndefined, {-1, -1}};
358
365
366/*@ +charint @*/
367
368static int rHvX[] = {
369 256, 256, 256, 256, 255, 255, 255, 254, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245,
370 243, 242, 241, 239, 237, 236, 234, 232, 230, 228, 226, 224, 222, 219, 217, 215, 212, 210,
371 207, 204, 202, 199, 196, 193, 190, 187, 184, 181, 178, 175, 171, 168, 165, 161, 158, 154,
372 150, 147, 143, 139, 136, 132, 128, 124, 120, 116, 112, 108, 104, 100, 96, 92, 88, 83,
373 79, 75, 71, 66, 62, 58, 53, 49, 44, 40, 36, 31, 27, 22, 18, 13, 9, 4,
374 0, -4, -9, -13, -18, -22, -27, -31, -36, -40, -44, -49, -53, -58, -62, -66, -71, -75,
375 -79, -83, -88, -92, -96, -100, -104, -108, -112, -116, -120, -124, -128, -132, -136, -139, -143, -147,
376 -150, -154, -158, -161, -165, -168, -171, -175, -178, -181, -184, -187, -190, -193, -196, -199, -202, -204,
377 -207, -210, -212, -215, -217, -219, -222, -224, -226, -228, -230, -232, -234, -236, -237, -239, -241, -242,
378 -243, -245, -246, -247, -248, -249, -250, -251, -252, -253, -254, -254, -255, -255, -255, -256, -256, -256};
379
380static int rHvY[] = {0, 4, 9, 13, 18, 22, 27, 31, 36, 40, 44, 49, 53, 58, 62, 66, 71, 75, 79, 83,
381 88, 92, 96, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 139, 143, 147, 150, 154, 158, 161,
382 165, 168, 171, 175, 178, 181, 184, 187, 190, 193, 196, 199, 202, 204, 207, 210, 212, 215, 217, 219,
383 222, 224, 226, 228, 230, 232, 234, 236, 237, 239, 241, 242, 243, 245, 246, 247, 248, 249, 250, 251,
384 252, 253, 254, 254, 255, 255, 255, 256, 256, 256, 256, 256, 256, 256, 255, 255, 255, 254, 254, 253,
385 252, 251, 250, 249, 248, 247, 246, 245, 243, 242, 241, 239, 237, 236, 234, 232, 230, 228, 226, 224,
386 222, 219, 217, 215, 212, 210, 207, 204, 202, 199, 196, 193, 190, 187, 184, 181, 178, 175, 171, 168,
387 165, 161, 158, 154, 150, 147, 143, 139, 136, 132, 128, 124, 120, 116, 112, 108, 104, 100, 96, 92,
388 88, 83, 79, 75, 71, 66, 62, 58, 53, 49, 44, 40, 36, 31, 27, 22, 18, 13, 9, 4};
389
390/*@ -charint @*/
391
405
406static char *dmtxErrorMessage[] = {"Unknown error",
407 "Unsupported character",
408 "Not on byte boundary",
409 "Illegal parameter value",
410 "Encountered empty list",
411 "Out of bounds",
412 "Message too large",
413 "Can't compact non-digits",
414 "Encountered unexpected scheme",
415 "Encountered incomplete value list"};
416
417#endif
libdmtx - Data Matrix Encoding/Decoding Library Copyright 2008, 2009 Mike Laughton.
#define DmtxPassFail
Definition dmtx.h:42
void(* DmtxCallbackBuildMatrixRegion)(DmtxRegion *region)
Definition dmtx.h:673
enum DmtxDirection_enum DmtxDirection
#define DmtxBoolean
Definition dmtx.h:46
enum DmtxScheme_enum DmtxScheme
#define DmtxUndefined
Definition dmtx.h:40
void(* DmtxCallbackBuildMatrix)(DmtxMatrix3 matrix)
Definition dmtx.h:674
void(* DmtxCallbackXfrmPlotPoint)(DmtxVector2 point, DmtxMatrix3 xfrm, int paneNbr, int dispType)
Definition dmtx.h:676
#define INOUT
Definition dmtx.h:76
void(* DmtxCallbackFinal)(DmtxDecode *decode, DmtxRegion *region)
Definition dmtx.h:678
unsigned char DmtxByte
Definition dmtx.h:293
void(* DmtxCallbackPlotModule)(DmtxDecode *info, DmtxRegion *region, int row, int col, float colorHue)
Definition dmtx.h:677
void(* DmtxCallbackPlotPoint)(DmtxPixelLoc loc, float colorHue, int paneNbr, int dispType)
Definition dmtx.h:675
#define OUT
Definition dmtx.h:75
void * udata
Definition dmtxlog.c:48
DmtxLogLockFn lock
Definition dmtxlog.c:49
static int encodeSingleScheme(DmtxByteList *input, DmtxByteList *output, int sizeIdxRequest, DmtxScheme scheme, int fnc1)
static int encodeOptimizeBest(DmtxByteList *input, DmtxByteList *output, int sizeIdxRequest, int fnc1)
static DmtxBoolean validStateSwitch(int fromState, int targetState)
static DmtxScanGrid initScanGrid(DmtxDecode *dec)
static DmtxByte streamInputAdvanceNext(DmtxEncodeStream *stream)
static void encodeNextChunk(DmtxEncodeStream *stream, int scheme, int subScheme, int sizeIdxRequest)
static unsigned char * decodeSchemeC40Text(DmtxMessage *msg, unsigned char *ptr, unsigned char *dataEnd, DmtxScheme encScheme)
static void completeIfDoneAscii(DmtxEncodeStream *stream, int sizeIdxRequest)
static void shiftValueListBy3(DmtxByteList *list, DmtxPassFail *passFail)
static DmtxPassFail matrixRegionOrientation(DmtxDecode *dec, DmtxRegion *reg, DmtxPointFlow flowBegin)
static void encodeNextChunkBase256(DmtxEncodeStream *stream)
static void appendValueBase256(DmtxEncodeStream *stream, DmtxByte value)
static void streamOutputChainAppend(DmtxEncodeStream *stream, DmtxByte value)
static unsigned char * decodeSchemeAscii(DmtxMessage *msg, unsigned char *ptr, unsigned char *dataEnd)
static void updateBase256ChainHeader(DmtxEncodeStream *stream, int perfectSizeIdx)
static DmtxPassFail rsDecode(unsigned char *code, int sizeIdx, int fix)
struct DmtxLogEvent_struct DmtxLogEvent
static void completePartialX12(DmtxEncodeStream *stream, DmtxByteList *valueList, int sizeIdxRequest)
DmtxEncodeOption_enum
Definition dmtxstatic.h:106
@ DmtxEncodeFull
Definition dmtxstatic.h:109
@ DmtxEncodeNormal
Definition dmtxstatic.h:107
@ DmtxEncodeCompact
Definition dmtxstatic.h:108
static DmtxPointFlow findStrongestNeighbor(DmtxDecode *dec, DmtxPointFlow center, int sign)
static void advanceEdifact(DmtxEncodeStream *streamNext, DmtxEncodeStream *streamList, int state, int inputNext, int sizeIdxRequest)
static void completeIfDoneCTX(DmtxEncodeStream *stream, int sizeIdxRequest)
static void streamOutputSet(DmtxEncodeStream *stream, int index, DmtxByte value)
static DmtxCallbackXfrmPlotPoint cbXfrmPlotPoint
Definition dmtxstatic.h:362
DmtxErrorMessage
Definition dmtxstatic.h:393
@ DmtxErrorUnsupportedCharacter
Definition dmtxstatic.h:395
@ DmtxErrorCantCompactNonDigits
Definition dmtxstatic.h:401
@ DmtxErrorIncompleteValueList
Definition dmtxstatic.h:403
@ DmtxErrorEmptyList
Definition dmtxstatic.h:398
@ DmtxErrorOutOfBounds
Definition dmtxstatic.h:399
@ DmtxErrorUnknown
Definition dmtxstatic.h:394
@ DmtxErrorNotOnByteBoundary
Definition dmtxstatic.h:396
@ DmtxErrorIllegalParameterValue
Definition dmtxstatic.h:397
@ DmtxErrorMessageTooLarge
Definition dmtxstatic.h:400
@ DmtxErrorUnexpectedScheme
Definition dmtxstatic.h:402
static DmtxByte randomize253State(DmtxByte cwValue, int cwPosition)
static void completeIfDoneEdifact(DmtxEncodeStream *stream, int sizeIdxRequest)
static void padRemainingInAscii(DmtxEncodeStream *stream, int sizeIdx)
static DmtxEncodeStream streamInit(DmtxByteList *input, DmtxByteList *output)
static DmtxPassFail matrixRegionAlignCalibEdge(DmtxDecode *dec, DmtxRegion *reg, int edgeLoc)
static DmtxBoolean rsFindErrorLocatorPoly(DmtxByteList *elp, const DmtxByteList *syn, int errorWordCount, int maxCorrectable)
static DmtxPassFail matrixRegionFindSize(DmtxDecode *dec, DmtxRegion *reg)
static double rightAngleTrueness(DmtxVector2 c0, DmtxVector2 c1, DmtxVector2 c2, double angle)
static const DmtxPointFlow dmtxBlankEdge
Definition dmtxstatic.h:357
static DmtxPointFlow matrixRegionSeekEdge(DmtxDecode *dec, DmtxPixelLoc loc0)
static void patternShapeStandard(unsigned char *modules, int mappingRows, int mappingCols, int row, int col, unsigned char *codeword, int moduleOnColor)
static int getBitsPerPixel(int pack)
static void printPattern(DmtxEncode *encode)
static const int dmtxPatternX[]
Definition dmtxstatic.h:355
static DmtxBestLine findBestSolidLine2(DmtxDecode *dec, DmtxPixelLoc loc0, int tripSteps, int sign, int houghAvoid)
static void tallyModuleJumps(DmtxDecode *dec, DmtxRegion *reg, INOUT int tally[][24], int xOrigin, int yOrigin, int mapWidth, int mapHeight, DmtxDirection dir)
enum DmtxRange_enum DmtxRange
static void streamCopy(DmtxEncodeStream *dst, DmtxEncodeStream *src)
static void advanceAsciiCompact(DmtxEncodeStream *streamNext, DmtxEncodeStream *streamList, int state, int inputNext, int sizeIdxRequest)
enum DmtxEdge_enum DmtxEdge
static void base256OutputChainRemoveFirst(DmtxEncodeStream *stream)
static DmtxBestLine findBestSolidLine(DmtxDecode *dec, DmtxRegion *reg, int step0, int step1, int streamDir, int houghAvoid)
static int getEncodationScheme(unsigned char cw)
static DmtxPointFlow getPointFlow(DmtxDecode *dec, int colorPlane, DmtxPixelLoc loc, int arrive)
static DmtxPassFail bresLineStep(DmtxBresLine *line, int travel, int outward)
static void base256OutputChainInsertFirst(DmtxEncodeStream *stream)
static DmtxPassFail decodeDataStream(DmtxMessage *msg, int sizeIdx, unsigned char *outputStart)
Translate encoded data stream into final output.
static DmtxPassFail populateArrayFromMatrix(DmtxDecode *dec, DmtxRegion *reg, OUT DmtxMessage *msg)
static DmtxPassFail rsRepairErrors(DmtxByteList *rec, const DmtxByteList *loc, const DmtxByteList *elp, const DmtxByteList *syn)
static int rHvY[]
Definition dmtxstatic.h:380
static DmtxFollow followSeek(DmtxDecode *dec, DmtxRegion *reg, int seek)
static int rHvX[]
Definition dmtxstatic.h:368
static void streamMarkInvalid(DmtxEncodeStream *stream, int reasonIdx)
void(* DmtxLogFn)(DmtxLogEvent *ev)
Definition dmtxstatic.h:189
static int popGridLocation(DmtxScanGrid *grid, OUT DmtxPixelLoc *locPtr)
static void appendUnlatchCTX(DmtxEncodeStream *stream)
static void advanceCTX(DmtxEncodeStream *streamNext, DmtxEncodeStream *streamList, int state, int inputNext, int ctxValueCount, int sizeIdxRequest)
static void placeModule(unsigned char *modules, int mappingRows, int mappingCols, int row, int col, unsigned char *codeword, int mask, int moduleOnColor)
DmtxMaskBit_enum
Definition dmtxstatic.h:128
@ DmtxMaskBit7
Definition dmtxstatic.h:130
@ DmtxMaskBit2
Definition dmtxstatic.h:135
@ DmtxMaskBit1
Definition dmtxstatic.h:136
@ DmtxMaskBit4
Definition dmtxstatic.h:133
@ DmtxMaskBit5
Definition dmtxstatic.h:132
@ DmtxMaskBit3
Definition dmtxstatic.h:134
@ DmtxMaskBit8
Definition dmtxstatic.h:129
@ DmtxMaskBit6
Definition dmtxstatic.h:131
static DmtxByte streamInputPeekNext(DmtxEncodeStream *stream)
static char * dmtxErrorMessage[]
Definition dmtxstatic.h:406
static void patternShapeSpecial3(unsigned char *modules, int mappingRows, int mappingCols, unsigned char *codeword, int moduleOnColor)
static DmtxBoolean rsComputeSyndromes(DmtxByteList *syn, const DmtxByteList *rec, int blockErrorWords)
static void encodeNextChunkAscii(DmtxEncodeStream *stream, int option)
static unsigned char * decodeSchemeX12(DmtxMessage *msg, unsigned char *ptr, unsigned char *dataEnd)
static DmtxBoolean partialX12ChunkRemains(DmtxEncodeStream *stream)
static void pushOutputWord(DmtxMessage *msg, int value)
static void streamInputAdvancePrev(DmtxEncodeStream *stream)
struct C40TextState_struct C40TextState
static DmtxPassFail trailBlazeContinuous(DmtxDecode *dec, DmtxRegion *reg, DmtxPointFlow flowBegin, int maxDiagonal)
static DmtxPassFail findTravelLimits(DmtxDecode *dec, DmtxRegion *reg, DmtxBestLine *line)
static DmtxFollow followStep2(DmtxDecode *dec, DmtxFollow followBeg, int sign)
static const int dmtxPatternY[]
Definition dmtxstatic.h:356
static void appendValuesCTX(DmtxEncodeStream *stream, DmtxByteList *valueList)
static DmtxByte streamOutputChainRemoveLast(DmtxEncodeStream *stream)
static void encodeNextChunkCTX(DmtxEncodeStream *stream, int sizeIdxRequest)
static int findSymbolSize(int dataWords, int sizeIdxRequest)
static void setDerivedFields(DmtxScanGrid *grid)
DmtxEdge_enum
Definition dmtxstatic.h:120
@ DmtxEdgeLeft
Definition dmtxstatic.h:123
@ DmtxEdgeRight
Definition dmtxstatic.h:124
@ DmtxEdgeTop
Definition dmtxstatic.h:121
@ DmtxEdgeBottom
Definition dmtxstatic.h:122
static DmtxByteList encodeTmpRemainingInAscii(DmtxEncodeStream *stream, DmtxByte *storage, int capacity, DmtxPassFail *passFail)
static void completeIfDoneBase256(DmtxEncodeStream *stream, int sizeIdxRequest)
static void pushOutputMacroHeader(DmtxMessage *msg, int macroType)
static const int dmtxNeighborNone
Definition dmtxstatic.h:354
enum DmtxEncodeOption_enum DmtxEncodeOption
static int getGridCoordinates(DmtxScanGrid *grid, OUT DmtxPixelLoc *locPtr)
static void pushCTXValues(DmtxByteList *valueList, DmtxByte inputValue, int targetScheme, DmtxPassFail *passFail, int fnc1)
static DmtxBoolean rsFindErrorLocations(DmtxByteList *loc, const DmtxByteList *elp)
struct DmtxBresLine_struct DmtxBresLine
static void streamMarkComplete(DmtxEncodeStream *stream, int sizeIdx)
static DmtxPassFail rsGenPoly(DmtxByteList *gen, int errorWordCount)
static void encodeChangeScheme(DmtxEncodeStream *stream, DmtxScheme targetScheme, int unlatchType)
static void patternShapeSpecial4(unsigned char *modules, int mappingRows, int mappingCols, unsigned char *codeword, int moduleOnColor)
static int getRemainingSymbolCapacity(int outputLength, int sizeIdx)
struct DmtxFollow_struct DmtxFollow
static void streamAdvanceFromBest(DmtxEncodeStream *streamNext, DmtxEncodeStream *streamList, int targeteState, int sizeIdxRequest)
static DmtxCallbackPlotModule cbPlotModule
Definition dmtxstatic.h:363
static void encodeNextChunkEdifact(DmtxEncodeStream *stream)
static unsigned char unRandomize255State(unsigned char value, int idx)
static long distanceSquared(DmtxPixelLoc a, DmtxPixelLoc b)
static void completePartialC40Text(DmtxEncodeStream *stream, DmtxByteList *valueList, int sizeIdxRequest)
static void appendValueAscii(DmtxEncodeStream *stream, DmtxByte value)
static DmtxByte randomize255State(DmtxByte cwValue, int cwPosition)
static int readModuleColor(DmtxDecode *dec, DmtxRegion *reg, int symbolRow, int symbolCol, int sizeIdx, int colorPlane)
static DmtxFollow followSeekLoc(DmtxDecode *dec, DmtxPixelLoc loc)
static DmtxCallbackPlotPoint cbPlotPoint
Definition dmtxstatic.h:361
static int trailClear(DmtxDecode *dec, DmtxRegion *reg, int clearMask)
static DmtxBresLine bresLineInit(DmtxPixelLoc loc0, DmtxPixelLoc loc1, DmtxPixelLoc locInside)
void(* DmtxLogLockFn)(DmtxBoolean lock, void *udata)
Definition dmtxstatic.h:190
static DmtxCallbackBuildMatrix cbBuildMatrix
Definition dmtxstatic.h:360
static void patternShapeSpecial2(unsigned char *modules, int mappingRows, int mappingCols, unsigned char *codeword, int moduleOnColor)
static int getScheme(int state)
static DmtxCallbackBuildMatrixRegion cbBuildMatrixRegion
Definition dmtxstatic.h:359
static unsigned char * decodeSchemeEdifact(DmtxMessage *msg, unsigned char *ptr, unsigned char *dataEnd)
static DmtxBoolean isCTX(int scheme)
enum DmtxMaskBit_enum DmtxMaskBit
static int modulePlacementEcc200(INOUT unsigned char *modules, OUT unsigned char *codewords, int sizeIdx, int moduleOnColor)
static void streamMarkFatal(DmtxEncodeStream *stream, int reasonIdx)
static int countJumpTally(DmtxDecode *dec, DmtxRegion *reg, int xStart, int yStart, DmtxDirection dir)
static int encodeDataCodewords(DmtxByteList *input, DmtxByteList *output, int sizeIdxRequest, DmtxScheme scheme, int fnc1)
static DmtxCallbackFinal cbFinal
Definition dmtxstatic.h:364
static int trailBlazeGapped(DmtxDecode *dec, DmtxRegion *reg, DmtxBresLine line, int streamDir)
DmtxRange_enum
Definition dmtxstatic.h:113
@ DmtxRangeBad
Definition dmtxstatic.h:115
@ DmtxRangeEnd
Definition dmtxstatic.h:116
@ DmtxRangeGood
Definition dmtxstatic.h:114
static DmtxPassFail bresLineGetStep(DmtxBresLine line, DmtxPixelLoc target, int *travel, int *outward)
static DmtxPassFail rsEncode(DmtxMessage *message, int sizeIdx)
static void pushOutputMacroTrailer(DmtxMessage *msg)
static void appendValueEdifact(DmtxEncodeStream *stream, DmtxByte value)
static DmtxBoolean streamInputHasNext(DmtxEncodeStream *stream)
static DmtxFollow followStep(DmtxDecode *dec, DmtxRegion *reg, DmtxFollow followBeg, int sign)
static void patternShapeSpecial1(unsigned char *modules, int mappingRows, int mappingCols, unsigned char *codeword, int moduleOnColor)
static unsigned char * decodeSchemeBase256(DmtxMessage *msg, unsigned char *ptr, unsigned char *dataEnd)
static void pushOutputC40TextWord(DmtxMessage *msg, C40TextState *state, int value)
DmtxBoolean upperShift
Definition dmtxstatic.h:175
DmtxPixelLoc loc1
Definition dmtxstatic.h:169
DmtxPixelLoc loc0
Definition dmtxstatic.h:168
DmtxPixelLoc loc
Definition dmtxstatic.h:167
DmtxBresLine.
DmtxByteList Use signed int for length fields instead of size_t to play nicely with RS arithmetic.
DmtxDecode.
DmtxEncode.
unsigned char * ptr
Definition dmtxstatic.h:145
unsigned char neighbor
Definition dmtxstatic.h:146
DmtxPixelLoc loc
图像像素坐标
Definition dmtxstatic.h:148
DmtxFollow.
const char * fmt
Definition dmtxstatic.h:181
const char * file
Definition dmtxstatic.h:182
DataMatrix编码内容
Definition dmtx.h:421
像素坐标
Definition dmtx.h:268
图像像素点及其梯度流动方向
Definition dmtx.h:342
二维码区域(包围框)
Definition dmtx.h:369
DmtxScanGrid.
二维向量
Definition dmtx.h:277