TODO
-----------------------------------------------------------------

version 1.0.0: (planned TBD)
FOCUS: remaining gaps, testing, documentation
  o decoder: Investigate using MMX to optimize inner loops
  o decoder: Investigate using threads to split up image processing
  o testing: Generate metrics in reproducible format to enable historical tracking
  o testing: Investigate option of embedding decoded text into PNG test image comments
  o testing: Tests should compare scanned results to embedded PNG comments
  o testing: 'make test' writes metrics file
  o testing: 'make test' confirms performance

version 0.9.0: (planned TBD)
FOCUS: multiple barcode scanning, structured append, FNC1, macros
  o Implement --auto-fast option using algorithm from spec (lighter & faster?)
  o Structured append reading and writing
  o (test suite) Implement exhaustive comparison between --auto-fast and --auto-best
  o Implement consistent and robust error handling (errno.h + custom)
  o Implement structured append symbols
  o Image quality metric
  o Clean up source file permissions (write script to detect outliers?)

version 0.8.0: (planned TBD)
FOCUS: region detection
  o Use calibration edge alignment to set precise locs for all edges
  o Replace DmtxDirection (e.g., DmtxDirUp) with index range 0-7 (?)
  o Rename outputIdx to outputLength? (Count pad codewords instead of pointer)
  o Rename math types to drop unnecessary numeral (DmtxVector2, DmtxRay2, etc...)
  o Inspect SDL image packing naming conventions (stride vs. pad, etc...)
  o Clean up API for use with external ROI finders
  o Is there a good way to know if dmtxRegionFindNext() timed out or finished file?
  o testing: Test error corrections with controled damage to images
  o library: Add .gitignore for generated files
  o library: Add explicit build targets for debug and release
  o library: Library should never call exit() or assert()
  x encoder: Fixed Data Mosaic encoding bug

version 0.7.4: (02-Jun-2011)
  x library: Relicensed to use Simplified BSD with waiver option
  x library: Added new error codes and messages in dmtxencode.c
  x library: Added DmtxByteList struct and supporting functions
  x library: Changed file header with updated text
  x library: Fixed ECC bug for 144x144 case (thanks Huver!)
  x library: New Reed Solomon implementation
  x library: New repository structure: libdmtx, dmtx-utils, and dmtx-wrappers
  x testing: Added test in compare_generated.sh to create directory if needed
  x testing: Fix compare_generated.sh to prevent false negatives
  x encoder: Review CHK macro strategy
  x encoder: New encoding implementation
  x encoder: Added Base 256 "encode to end of symbol" single byte header
  x encoder: Check ProcessEndOfSymbolTriplet() for same problem fixed in Edifact
  x encoder: Clean up PushCTXValues() passFail handling
  x encoder: Fixed all encoding bugs reported by compare_generated.sh
  x encoder: Fixed encoding bug affecting certain end-of-symbol conditions
  x encoder: Replaced "twothirdsbits" encoder concept (major source of headaches)
  x encoder: Track intermediate states in "optimize best" to handle all possibilities
  x decoder: Use new Edifact decode function that doesn't assume full triplet

version 0.7.2: (04-Sep-2009)
  x Added initial macro decoding support (thanks Marlon!)
  x Fast quad fill for dmtxDecodeMatrixRegion() (thanks Mackenzie!)
  x Fixed capacity bug with rectangle requests
  x Add libdmtx-X.X.X.zip as source package option
  x Add libdmtx-win32-X.X.X.zip as binary package option
  x Add "project" directory to EXTRA_DIST in Makefile.am

version 0.7.0: (02-Mar-2009)
  x Fix 64b->32b int assignment warnings
  x FNC1 and correct upper shift (thanks Robin!)
  x Support byte-padded row sizes via dmtxImageSetProp()
  x Move image scaling factors to DmtxDecode
  x Add DmtxUndefined to replace "-1" for undefined fixes, offset, etc...
  x Update dmtxImageCreate() parameter options
  x Switch DmtxFlipNone represent top-down row order
  x Add dmtxEncodeSetProp() and dmtxEncodeGetProp()
  x Relocate scan cache from DmtxImage to DmtxDecode
  x Remove status from DmtxPixelLoc
  x Configurable pixel packing
  x Removed DmtxRgb, dmtxcolor.c, DmtxColor3, and DmtxGradient
  x DmtxTrue/DmtxFalse replaces DMTX_TRUE/DMTX_FALSE
  x DmtxPass/DmtxFail replaces DMTX_SUCCESS/DMTX_FAILURE
  x Change all major types to use Create() and Destroy() convention
  x Update documentation to reflect API changes
  x Add comment to wiki pages that points to source README
  x Figure out earliest usable Magick version for configure.ac
  x Add simple_test project to libdmtx.sln
  x Rename wiki page to "Windows (VisualC)"
  x Introduce "project" directory for non-autotools platforms
  x Rename "wrappers" directory to "wrapper" for consistency
  x Create a common tasks and release checklist document

version 0.6.0: (23-Nov-2008)
  x Initial work preparing for custom pixel packing in future
  x Begin static analysis cleanup with splint
  x New --disable-dmtxread and --disable-dmtxwrite [Romain]
  x Ability to specify max/min expected barcode sizes
  x New edge neighbor tracking (Hough Transform + 2 way edge cache)
  x Info cache to track scan progress and avoid rescanning pixels
  x Scan multiple barcodes within an image
  x Significantly reduced memory footprint
  x Major reduction in floating point operations
  x Dedicated README.xxx instructions for specific platforms
  x Various improvements for cross platform builds

version 0.5.2: (04-Sep-2008)
  x Move SetRangeLimit and SetScanRegion into library
  x Replace DMTXUTIL_SUCCESS/ERROR with DMTX_SUCCESS/FAILURE
  x Add edge threshold filtering
  x Add encoding support for 144x144 barcodes
  x Fixed encoding case when message starts with two digits
  x Fixed bug in range limit option
  x Add dynamic image shrinking (pixel skipping)
  x Add step-by-step diagnostic image dump (debug build)
  x Fixed bug in minimum scan gap setting
  x Removed y-flip from internal pixel storage
  x Added strict border tests to eliminate false positives
  x Added squareness deviation filter
  x Implement simplified Hough transform for locating first edge
  x Several behind-the-scenes performance enhancements
  x Various improvements when building for OS X and FreeBSD

version 0.5.1: (01-Jul-2008)
  x Fixed Extended ASCII encoding bug
  x Fixed error correction bug related to multiple interleaved blocks
  x Added timeout condition for region detection
  x Allow partial and complete disabling of error correction
  x Replaced DmtxPixel struct with DmtxRgb for safe pixel copies
  x Tighter integration with libfec
  x (test suite) Started unit test executable for low level testing
  x Include local copies of getopt1.c getopt.c getopt.h
  x Various things to help compiling in MS VC++
  x Added missing header comments

version 0.5: (13-Apr-2008)
  x Rework encoding and decoding API for consistency and intuitiveness
  x Handle region detection and region decoding as separate tasks
  x Pass found regions back to calling app before attempting decode
  x Image mask approach (for performance and multi-barcode scans)
  x Remove "2" from functions named *MatrixRegion2*() (whoops)
  x Fix TestForEndOfSymbolEdifact() to handle special cases correctly
  x Roll scan pattern into core library (inward breadth-first cross)
  x Replace dmtxScanLine() with dmtxScanPixel()
  x Implement 4-direction weighted module decisions (eliminates thresholds)
  x Error correction using libfec (thanks Florian!)
  x Remove gltest and simpletest from default build target
  x Update Subversion to be keyword friendly ($Id$)
  x Updated documentation to reflect API and option changes
  x (test suite) Moved all public images to common directory with single copyright file

version 0.4: (07-Dec-2008)
  x Remove arbitrary sz scaling (100.0) since it doesn't matter anyway
  x Fix 4 bottom-right modules in sizes where they are not used (thanks Matthias R.!)
  x Replace callback references with preprocessor macros
  x Implement remaining encodation schemes for encoding (X12, Base 256, etc...)
  x Implement remaining encodation schemes for decoding (X12, Base 256, etc...)
  x Implement --auto-best option for best possible encoding efficiency
  x Implement multi-region symbols
  x Read and write rectangle shaped barcodes
  x Use GNU autotools (autoconf, automake, libtool)
  x New region detection overhaul
  x Fix chcon error in Makefile (right answer might be to use autoconf)
  x (test suite) 'make test' executes regression tests for encodation
  x (test suite) Add marathon images to project (thanks John!)

version 0.3: (15-Oct-2006)
  x Use preprocessor to pull code into one big file before compiling
  x Update Makefile to handle monolithic approach; add targets for test, util, tarball
  x Rename DmtxInfo struct and variables to DmtxDecode (for consistency with DmtxEncode)
  x Merge placement logic into single implementation for both encoding and decoding
  x Deploy codebase to SourceForge CVS
  x Add revision control keywords to source files
  x Implement remaining encodation schemes in dmtxdecode.c (X12, Base 256, etc...)
  x Create separate file for callback functions (allows them to be optional)
  x Move PNG (and other format) logic and dependencies to dmtxread, dmtxwrite, etc...
  x Fix the regressions (crash bugs) introduced during v0.2 structural rework
  x Add multi-page TIFF capabilities to dmtxread
  x Move pure decode calls from dmtxScanLine into a dmtxdecode.c function
  x Sample module color from more than one pixel location
  x Rename DmtxVector3 to DmtxColor3 and merge into dmtxcolor.c
  x Add package/build dependencies to INSTALL file
  x Build coding style test scripts
  x Replace current calibration size estimate with new approach
  x Size step size dynamically according to pixel size

version 0.2: (11-Jun-2006)
  x Move dmtxCapturePixel routine to library code
  x Initial restructuring of code for architectural goodness
  x Improve API for real-world use (and not just dumping results to STDOUT)
  x Implement error detection
  x Create "simpletest.c" for full-circle processing
  x Use libpng(3) in library to read Data Matrix images
  x Slap together some basic documentation

version 0.1: (22-Apr-2006)
  x Cycle texture images with right-click
  x Complete PlotPoint so it handles floating rows and columns
  x Implement right and left directions of FollowEdge
  x Call right and left edge following scans started from vertical step scans
  x Implement 2D vector and matrix functions
  x Trace lines with actual line object (2D ray)
  x Turn corners when encountering the end of a followed line
  x Build 2d transformation to wrap around region, assuming parallelogram
  x Display pane 4 with reverse-transformed image capture
  x Enhance dmtxCapturePixel to use "area averaging" instead of nearest neighbor
  x Figure out why squares are 3 pixels off (to start: draw white gl lines over follower paths)
  x Add callback function for PlotEventPoint(x, y, event_type)
  x Improve follower logic (weighted line fit)
  x dmtxGetPixel: do averaged interpolation followed by a tMin/tMid/tMax cutoff
  x Add in de-skew transformation
  x Refactor vector libraries to consistently list target parameter first
  x Calibrate based on calibration lines
  x Shrink-fit transformation around region

Future Versions:
-----------------------------------------------------------------
  o Capture high-level design in documentation (data flow, module analogies)
  o Try bi-linear approximation (instead of linear) in follower edge detection
  o Implement fixed point math functions for use on mobile platforms
  o Add calibration functionality to remove spherical distortion

Perhaps Never:
-----------------------------------------------------------------
  o Implement pre-ECC200 Data Matrix standards (big effort/low demand)

Website:
-----------------------------------------------------------------
  o Explore using single background image instead of split
  o Add what we currently do, don't do, would like to do in the future
  o Add http://hosted-projects.com/trac/hudora/public/wiki/huBarcode to resources page
