[packages/zbar] - updated to 0.20 release from linuxtv.org - removed obsolete update_to_hg,use_libv4l,ac patches - a

qboosh qboosh at pld-linux.org
Sun May 14 16:31:59 CEST 2017


commit 781118792c4f651f45a9b4ddba7eb0c59ce2956d
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date:   Sun May 14 16:32:43 2017 +0200

    - updated to 0.20 release from linuxtv.org
    - removed obsolete update_to_hg,use_libv4l,ac patches
    - added sh patch (avoid bash specific regex subst)
    - qt interface now defaults to qt5

 zbar-ac.patch           |    19 -
 zbar-sh.patch           |    11 +
 zbar.spec               |    76 +-
 zbar_update_to_hg.patch | 35415 ----------------------------------------------
 zbar_use_libv4l.patch   |   295 -
 5 files changed, 68 insertions(+), 35748 deletions(-)
---
diff --git a/zbar.spec b/zbar.spec
index 529fd75..f1417ba 100644
--- a/zbar.spec
+++ b/zbar.spec
@@ -1,45 +1,67 @@
 #
 # Conditional build:
-%bcond_with	npapi	# NPAPI plugin (nothing really yet)
-%bcond_with	tests	# perform "make test" for perl module (needs X display)
+%bcond_with	java	# Java interface [some file missing]
+%bcond_with	npapi	# NPAPI plugin for Firefox/OpenOffice [nothing really yet]
+%bcond_without	qt	# Qt widget (Qt5 or Qt4)
+%bcond_with	qt4	# Qt4 instead of Qt5
+%bcond_with	tests	# "make test" for Perl module [needs X display]
 #
 %include	/usr/lib/rpm/macros.perl
 Summary:	ZBar Bar Code Reader
 Summary(pl.UTF-8):	ZBar - czytnik kodów paskowych
 Name:		zbar
-Version:	0.10
-Release:	20
+Version:	0.20
+Release:	1
 License:	LGPL v2.1+
 Group:		Libraries
-Source0:	http://downloads.sourceforge.net/zbar/%{name}-%{version}.tar.bz2
-# Source0-md5:	0fd61eb590ac1bab62a77913c8b086a5
-Patch0:		zbar_update_to_hg.patch
+# no releases since 2009
+#Source0:	http://downloads.sourceforge.net/zbar/%{name}-%{version}.tar.bz2
+# non-maintainer release
+Source0:	https://linuxtv.org/downloads/zbar/%{name}-%{version}.tar.bz2
+# Source0-md5:	116805d44246e288f1f42729950878bf
+#Patch0:		zbar_update_to_hg.patch
+Patch0:		%{name}-sh.patch
 Patch1:		%{name}-link.patch
 Patch2:		%{name}-npapi.patch
-Patch3:		zbar_use_libv4l.patch
-Patch4:		%{name}-ac.patch
-Patch5:		imagemagick7.patch
+#Patch3:		zbar_use_libv4l.patch
+#Patch3:		%{name}-ac.patch
+Patch3:		imagemagick7.patch
 URL:		http://zbar.sourceforge.net/
 BuildRequires:	ImageMagick-devel >= 1:6.2.6
-BuildRequires:	QtCore-devel >= 4
-BuildRequires:	QtGui-devel >= 4
-BuildRequires:	autoconf >= 2.61
-BuildRequires:	automake >= 1:1.10
+BuildRequires:	autoconf >= 2.68
+BuildRequires:	automake >= 1:1.13
 BuildRequires:	gettext-tools
 BuildRequires:	gtk+2-devel >= 2.0
+%{?with_java:BuildRequires:	jdk}
 BuildRequires:	libjpeg-devel
+BuildRequires:	libstdc++-devel
 BuildRequires:	libtool >= 2:2.2
 BuildRequires:	libv4l-devel
 BuildRequires:	perl-devel >= 1:5.8.0
 BuildRequires:	pkgconfig
+%{?with_npapi:BuildRequires:	pkgconfig(mozilla-plugin)}
 BuildRequires:	python-devel >= 2.3.5
 BuildRequires:	python-pygtk-devel >= 2:2.0
-BuildRequires:	qt4-build >= 4
 BuildRequires:	rpm-perlprov >= 4.1-13
 BuildRequires:	rpm-pythonprov
 BuildRequires:	rpmbuild(macros) >= 1.357
+BuildRequires:	xmlto
+BuildRequires:	xorg-lib-libX11-devel
 BuildRequires:	xorg-lib-libXext-devel
 BuildRequires:	xorg-lib-libXv-devel
+%if %{with qt}
+%if %{with qt4}
+BuildRequires:	QtCore-devel >= 4
+BuildRequires:	QtGui-devel >= 4
+BuildRequires:	qt4-build >= 4
+%else
+BuildRequires:	Qt5Core-devel >= 5
+BuildRequires:	Qt5Gui-devel >= 5
+BuildRequires:	Qt5Widgets-devel >= 5
+BuildRequires:	Qt5X11Extras-devel >= 5
+BuildRequires:	qt5-build >= 5
+%endif
+%endif
 Requires:	ImageMagick-libs >= 1:6.2.6
 BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 
@@ -149,8 +171,15 @@ Summary(pl.UTF-8):	Plik nagłówkowy widgetu Qt4 do skanowania i dekodowania kod
 Group:		X11/Development/Libraries
 Requires:	%{name}-devel = %{version}-%{release}
 Requires:	%{name}-qt = %{version}-%{release}
+%if %{with qt4}
 Requires:	QtCore-devel >= 4
 Requires:	QtGui-devel >= 4
+%else
+Requires:	Qt5Core >= 5
+Requires:	Qt5Gui >= 5
+Requires:	Qt5Widgets >= 5
+Requires:	Qt5X11Extras >= 5
+%endif
 
 %description qt-devel
 Header file for bar code scanning and decoding Qt4 widget.
@@ -229,9 +258,10 @@ Wtyczka ZBar dla przeglądarek WWW.
 %patch0 -p1
 %patch1 -p1
 %patch2 -p1
+#patch4 -p1
+%if "%(rpm -q ImageMagick-devel --qf '%{VERSION}')" >= "7"
 %patch3 -p1
-%patch4 -p1
-%patch5 -p1
+%endif
 
 %build
 %{__libtoolize}
@@ -239,8 +269,12 @@ Wtyczka ZBar dla przeglądarek WWW.
 %{__autoconf}
 %{__autoheader}
 %{__automake}
+# for ">>" in nested template usage
+CXXFLAGS="%{rpmcxxflags} -std=c++11"
 %configure \
-	--without-java \
+	%{!?with_java:--without-java} \
+	%{!?with_qt:--without-qt} \
+	%{?with_qt4:--without-qt5} \
 	%{?with_npapi:--with-npapi}
 %{__make}
 
@@ -277,7 +311,7 @@ rmdir $RPM_BUILD_ROOT%{perl_vendorarch}/Barcode/ZBar
 
 %if %{with npapi}
 install -d $RPM_BUILD_ROOT%{_browserpluginsdir}
-mv $RPM_BUILD_ROOT%{_libdir}/libzbarplugin.so* $RPM_BUILD_ROOT%{_browserpluginsdir}
+%{__mv} $RPM_BUILD_ROOT%{_libdir}/libzbarplugin.so* $RPM_BUILD_ROOT%{_browserpluginsdir}
 %{__rm} $RPM_BUILD_ROOT%{_libdir}/libzbarplugin.{la,a}
 %endif
 
@@ -338,6 +372,7 @@ fi
 
 %files gtk
 %defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/zbarcam-gtk
 %attr(755,root,root) %{_libdir}/libzbargtk.so.*.*.*
 %attr(755,root,root) %ghost %{_libdir}/libzbargtk.so.0
 
@@ -352,8 +387,10 @@ fi
 %defattr(644,root,root,755)
 %{_libdir}/libzbargtk.a
 
+%if %{with qt}
 %files qt
 %defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/zbarcam-qt
 %attr(755,root,root) %{_libdir}/libzbarqt.so.*.*.*
 %attr(755,root,root) %ghost %{_libdir}/libzbarqt.so.0
 
@@ -368,6 +405,7 @@ fi
 %files qt-static
 %defattr(644,root,root,755)
 %{_libdir}/libzbarqt.a
+%endif
 
 %files -n perl-Barcode-ZBar
 %defattr(644,root,root,755)
diff --git a/zbar-ac.patch b/zbar-ac.patch
deleted file mode 100644
index b41ca61..0000000
--- a/zbar-ac.patch
+++ /dev/null
@@ -1,19 +0,0 @@
---- zbar-0.10/configure.ac~	2013-06-09 16:31:55.000000000 +0200
-+++ zbar-0.10/configure.ac	2013-06-09 16:32:58.874515406 +0200
-@@ -3,7 +3,7 @@
- AC_INIT([zbar], [0.10], [spadix at users.sourceforge.net])
- AC_CONFIG_AUX_DIR(config)
- AC_CONFIG_MACRO_DIR(config)
--AM_INIT_AUTOMAKE([1.10 -Wall -Werror foreign subdir-objects std-options dist-bzip2])
-+AM_INIT_AUTOMAKE([1.10 -Wall foreign subdir-objects std-options dist-bzip2])
- AC_CONFIG_HEADERS([include/config.h])
- AC_CONFIG_SRCDIR(zbar/scanner.c)
- LT_PREREQ([2.2])
-@@ -65,6 +65,7 @@
- AC_PROG_CC
- AM_PROG_CC_C_O
- AC_PROG_CXX
-+AM_PROG_AR
- 
- PKG_PROG_PKG_CONFIG
- 
diff --git a/zbar-sh.patch b/zbar-sh.patch
new file mode 100644
index 0000000..b68a01c
--- /dev/null
+++ b/zbar-sh.patch
@@ -0,0 +1,11 @@
+--- zbar-0.20/configure.ac.orig	2017-05-14 09:01:27.438180076 +0200
++++ zbar-0.20/configure.ac	2017-05-14 09:04:18.028178129 +0200
+@@ -91,7 +91,7 @@
+ 
+ AC_ARG_VAR([JAVAC], [location of Java language compiler])
+ AC_PATH_PROGS([JAVAC], [javac jikes ecj gcj], [:], [$JAVA_PATH])
+-JAVAC=${JAVAC/ecj/ecj -1.5}
++JAVAC=$(echo "$JAVAC" | sed -e 's/ecj/ecj -1.5/')
+ AS_IF([test "x$JAVAC" = "x:"], [have_java="no"])
+ 
+ AC_ARG_VAR([JAVAH], [location of Java header generator])
diff --git a/zbar_update_to_hg.patch b/zbar_update_to_hg.patch
deleted file mode 100644
index 16486fb..0000000
--- a/zbar_update_to_hg.patch
+++ /dev/null
@@ -1,35415 +0,0 @@
-diff -r 563557a923d0 COPYING
---- a/COPYING	Tue Oct 27 11:25:59 2009 -0400
-+++ b/COPYING	Fri Feb 22 08:54:29 2013 -0300
-@@ -1,4 +1,4 @@
--The ZBar Bar Code Reader is Copyright (C) 2007-2009 Jeff Brown
-+The ZBar Bar Code Reader is Copyright (C) 2007-2011 Jeff Brown
-  <spadix at users.sourceforge.net>
- The QR Code reader is Copyright (C) 1999-2009 Timothy B. Terriberry
-  <tterribe at xiph.org>
-diff -r 563557a923d0 ChangeLog
---- a/ChangeLog	Tue Oct 27 11:25:59 2009 -0400
-+++ b/ChangeLog	Fri Feb 22 08:54:29 2013 -0300
-@@ -1,3 +1,95 @@
-+current:
-+  * Codabar reliability enhancements
-+    - fix missing check
-+    - require minimum quality
-+    - bump default uncertainty
-+  * tweak Codabar bar/space ratio validation
-+  * finish Codabar support for python, perl, java and iPhone interfaces
-+    - reduce Codabar uncertainty to minimum
-+  * add core support for Codabar symbology
-+    - TBD: python, perl, java and iPhone interfaces
-+  * fix v4l config and build variations (bug #3348888)
-+    - thanks to jarekczek for reporting this!
-+    - NB v4l1 removed from kernel as of 2.6.38
-+  * fix missing python thread initialization (bug #3349199)
-+    - thanks to jarekczek for reporting this problem!
-+  * fix missing configure check for Python.h (bug #3092663)
-+    - thanks to Zoltan Kovacs for reporting this problem!
-+  * fix C++ wrapper missing Symbol.quality (bug #3076524)
-+    - thanks to Rudy Melli for pointing this out!
-+  * fix C++ wrapper bugs (bug #3396068)
-+    - thanks to anotheruser1 for reporting this!
-+    - add new C++ wrapper test
-+  * fix avoid compositing ISBN10 data
-+  * add support for GraphicsMagick as ImageMagick alternative
-+  * mention xmlto in HACKING (patch #3297039)
-+    - thanks to jarekczek for the patch!
-+  * disable addons by default until synchronization with main symbol is working
-+  * fix image scanner min quality filtering
-+  * fix i25 buffer overrun corner case
-+  * fix EAN addon enables
-+  * fix zbarimg to accept autodetected stdin (lone dash)
-+  * fix Qt 4.6.3 compilation error (patch #3178244)
-+    - thanks to hrhristov for the patch!
-+  * add Python Processor support for request_size interface
-+  * fix Python Processor support for GIL, allowing asynchronous scanning
-+  * fix jpeg decoder skip handling
-+    - thanks to jarekczek for the patch!
-+  * rename dprintf macro to avoid conflicts (patch #3128538)
-+    - thanks to maurochehab for the patch!
-+  * add support for EAN/UPC 2 and 5 digit add-on symbols
-+    - deprecate original, unfinished add-on APIs
-+    - add self-checking to test_decode
-+  * fix support for GS1 AIs
-+    - thanks to jockusch for a patch!
-+    - add decoder/symbol "modifier" flags and config read access
-+    - set flags or emit GS appropriately for Code 128 FNC1
-+    - add iphone, java, perl, python bindings for modifiers and configs
-+  * add support for Code 93 symbology
-+  * add video size request to (Py)GTK widget (req #3034522)
-+    - thanks to Jerome Charaoui for the patch!
-+  * add support for GS1 DataBar Expanded (RSS Expanded) symbology
-+  * add language bindings for DataBar
-+  * add preliminary support for GS1 DataBar (RSS-14) symbology
-+  * enhance decoder reliability (EAN, Code 39, Code 128)
-+    - enhance decoder test
-+  * fix documentation of command exit codes (bug #3017322)
-+  * fix C++ video callback bug
-+    - add C and C++ processor examples
-+  * add per-symbology cache consistency
-+    - reliable symbologies decode immediately by default
-+    - no more need to disable cache with video
-+    - also fix crop bugs w/video scanning
-+  * add support for scanning partial images (cropping)
-+    - update c++, python, perl, java bindings and tests
-+  * fix couple of leaks
-+  * remove doc hints about GFDL (bug #3004411)
-+    - apply LGPL to API docs
-+  * relax Code 39 width ratio checks
-+  * core library portability improvements
-+    - remove some unnecessary C99 syntax
-+    - add configure checks for errno
-+    - enhance C++ Symbol interface
-+  * adjust Python module README (add examples and note DLL in path)
-+  * fix QR Code missing from man pages (bug #2969857)
-+  * cleanup decoder assertions and locking (bug #2966916)
-+  * add Java interface to library via JNI
-+    - add Java tools and JNI build tests to configure
-+    - fix compiler warnings from binary output changes
-+  * fix output of binary data in zbarimg and zbarcam
-+    - thanks to fukuchi for a patch!
-+    - add base64 format for binary xml output
-+  * add coarse symbol orientation information (patch #2913094)
-+    - thanks to Anssi for a patch!
-+    - add decode direction feedback to decoder
-+    - update C++, Python, Perl and ObjC wrappers
-+    - add orientation to test suites
-+  * fix inconsistent fourcc endian handling bugs (bug #2918994)
-+    - thanks to jdccdevel for a patch!
-+    - add fourcc conversion and parse interfaces to zbar.h
-+  * report QR immediately for video (no inter-frame consistency check)
-+  * add python distutils build infrastructure
-+
- version 0.10:
-   * hotfix add MinGW import lib to Windows installer
-   * attempt fix for Qt4 < 4.4
-diff -r 563557a923d0 HACKING
---- a/HACKING	Tue Oct 27 11:25:59 2009 -0400
-+++ b/HACKING	Fri Feb 22 08:54:29 2013 -0300
-@@ -13,6 +13,12 @@
-     GNU autoconf 2.61
-     GNU automake 1.10.1
-     GNU libtool 2.2.6
-+    GNU gettext 0.18.1.1
-+    GNU pkg-config 0.25
-+    xmlto 0.0.20-5 (for docs building)
-+all above mentioned tools (except xmlto) must be installed in the same
-+prefix. mixing prefixes (i.g. /usr/bin and /usr/local/bin) may lead to
-+errors in configuration stages
- 
- when you're done hacking and want to make your patch, run:
- 
-diff -r 563557a923d0 Makefile.am
---- a/Makefile.am	Tue Oct 27 11:25:59 2009 -0400
-+++ b/Makefile.am	Fri Feb 22 08:54:29 2013 -0300
-@@ -1,6 +1,3 @@
--AM_CPPFLAGS = -I$(srcdir)/include
--AM_CFLAGS = -Wall -Wno-parentheses
--AM_CXXFLAGS = $(AM_CFLAGS)
- ACLOCAL_AMFLAGS = -I config
- bin_PROGRAMS =
- check_PROGRAMS =
-@@ -9,8 +6,10 @@
- pyexec_LTLIBRARIES =
- CLEANFILES =
- DISTCLEANFILES =
-+MAINTAINERCLEANFILES =
- BUILT_SOURCES =
- EXTRA_DIST =
-+SUBDIRS = .
- 
- pkgconfigdir = $(libdir)/pkgconfig
- pkgconfig_DATA = zbar.pc
-@@ -39,6 +38,9 @@
- include $(srcdir)/qt/Makefile.am.inc
- pkgconfig_DATA += zbar-qt.pc
- endif
-+if HAVE_JAVA
-+SUBDIRS += java
-+endif
- if HAVE_NPAPI
- include $(srcdir)/plugin/Makefile.am.inc
- endif
-@@ -47,11 +49,8 @@
- 
- EXTRA_DIST += zbar.ico zbar.nsi
- 
--EXTRA_DIST += examples/upcrpc.pl examples/upcrpc.py examples/paginate.pl \
--    examples/barcode.png examples/processor.pl examples/processor.py \
--    examples/read_one.py examples/read_one.pl \
--    examples/scan_image.c examples/scan_image.cpp examples/scan_image.pl \
--    examples/scan_image.py examples/scan_image.vcproj
-+EXTRA_DIST += examples/barcode.png examples/upcrpc.py examples/upcrpc.pl \
-+    examples/scan_image.c examples/scan_image.cpp examples/scan_image.vcproj
- 
- EXTRA_DIST += perl/MANIFEST perl/README perl/Changes perl/COPYING.LIB \
-     perl/Makefile.PL perl/typemap perl/ZBar.xs perl/ppport.h \
-diff -r 563557a923d0 README
---- a/README	Tue Oct 27 11:25:59 2009 -0400
-+++ b/README	Fri Feb 22 08:54:29 2013 -0300
-@@ -4,9 +4,9 @@
- ZBar Bar Code Reader is an open source software suite for reading bar
- codes from various sources, such as video streams, image files and raw
- intensity sensors. It supports EAN-13/UPC-A, UPC-E, EAN-8, Code 128,
--Code 39, Interleaved 2 of 5 and QR Code.  Included with the library
--are basic applications for decoding captured bar code images and using
--a video device (eg, webcam) as a bar code scanner.  For application
-+Code 39, Codabar, Interleaved 2 of 5 and QR Code.  Included with the
-+library are basic applications for decoding captured bar code images and
-+using a video device (eg, webcam) as a bar code scanner.  For application
- developers, language bindings are included for C, C++, Python and Perl
- as well as GUI widgets for Qt, GTK and PyGTK.
- 
-diff -r 563557a923d0 README.windows
---- a/README.windows	Tue Oct 27 11:25:59 2009 -0400
-+++ b/README.windows	Fri Feb 22 08:54:29 2013 -0300
-@@ -3,8 +3,8 @@
- 
- ZBar Bar Code Reader is an open source software suite for reading bar codes
- from various sources, such as video streams, image files and raw intensity
--sensors. It supports EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39,
--Interleaved 2 of 5 and QR Code.  Included with the library are basic
-+sensors. It supports EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 93, Code 39,
-+Codabar, Interleaved 2 of 5 and QR Code.  Included with the library are basic
- applications for decoding captured bar code images and using a video device
- (eg, webcam) as a bar code scanner.  For application developers, language
- bindings are included for C, C++, Python and Perl as well as GUI widgets for
-diff -r 563557a923d0 TODO
---- a/TODO	Tue Oct 27 11:25:59 2009 -0400
-+++ b/TODO	Fri Feb 22 08:54:29 2013 -0300
-@@ -25,7 +25,6 @@
-   * Code 39, i25 optional features (check digit and ASCII escapes)
-   * handle Code 128 function characters (FNC1-4)
-   * Code 128 trailing quiet zone checks
--  * finish addon decoding
- 
- decoder:
-   * start/stop/abort and location detail APIs (PDF417, OMR)
-diff -r 563557a923d0 android/AndroidManifest.xml
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/AndroidManifest.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,15 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-+      package="net.sourceforge.zbar.android"
-+      android:versionCode="1"
-+      android:versionName="1.0">
-+    <application android:label="@string/app_name" >
-+        <activity android:name="ACTIVITY_ENTRY_NAME"
-+                  android:label="@string/app_name">
-+            <intent-filter>
-+                <action android:name="android.intent.action.MAIN" />
-+                <category android:name="android.intent.category.LAUNCHER" />
-+            </intent-filter>
-+        </activity>
-+    </application>
-+</manifest> 
-diff -r 563557a923d0 android/ChangeLog
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/ChangeLog	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,2 @@
-+version 0.1:
-+  * Add initial support for Android platform
-diff -r 563557a923d0 android/README
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/README	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,112 @@
-+ZBar Android SDK
-+================
-+
-+ZBar Bar Code Reader is an open source software suite for reading bar
-+codes from various sources, such as video streams, image files and raw
-+intensity sensors. It supports EAN-13/UPC-A, UPC-E, EAN-8, Code 128,
-+Code 93, Code 39, Codabar, Interleaved 2 of 5, QR Code and
-+DataBar. These are the JNI wrappers for developing the library on
-+Android platform.
-+
-+Check the ZBar home page for the latest release, mailing lists, etc.
-+    http://zbar.sourceforge.net/
-+
-+Copyright and License
-+---------------------
-+Licensed under the GNU Lesser General Public License, version 2.1.
-+http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
-+
-+Copyright 2008-2012 � Jeff Brown <spadix at users.sourceforge.net> et al
-+
-+The Android distribution also includes pre-compiled binaries of
-+supporting libaries, for which copyright, license and source code
-+locations are as follows:
-+  * The GNU libiconv character set conversion library
-+    Copyright (C) 1999-2011 Free Software Foundation, Inc.
-+    This distribution includes GNU libiconv version 1.14, licensed under
-+    the LGPL version 2.  The source code is available from
-+        http://www.gnu.org/software/libiconv
-+
-+See included files COPYING and LICENSE for details.
-+
-+
-+Installation
-+------------
-+
-+After downloading the ZBar-Android-Lib-<version>.zip file, you need to
-+unzip the file and add it to your Android project. Unzip the file
-+using your favorite method (ie: command-line, finder, windows
-+explorer...)
-+
-+Follow one of the two options.
-+Option 1 - via command line
-+  cd <android project>
-+  cp -r ZBar-Android-SDK-<version>/libs .
-+
-+Option 2 - via Eclipse
-+  Right click on Android Project
-+  Select "Import" -> "File System"
-+  Select "Browse" (next to "From directory File" and select the
-+    ZBar-Android-SDK-<verion>/libs directory and click "Open".
-+  Click the check box next to "libs" and the "Options" "Create top-level folder"
-+  check box (below).
-+  Then click "Finish".
-+      
-+  You should then see a "libs" folder under your project.
-+
-+Building
-+--------
-+
-+Via Eclipse
-+You have to add the zbar.jar file to your build path
-+  1) select zbar.jar under libs
-+  2) right-click, select "Build Path" -> "Add to Build Path"
-+  
-+Via command-line
-+You are all set; ant will automatcially find jar files under the "libs"
-+subdirectory.
-+
-+Documentation
-+-------------
-+   TDB
-+
-+Examples
-+--------
-+
-+You should be able to open and build the examples directly from the
-+unzipped directory. You will need to run the android tools to setup
-+the local.properties file which sets sdk.dir.
-+  1) cd <unzip dir>/examples/CameraTest
-+  2) android update project --path .
-+  3) ant debug install
-+
-+If you have problems with this, please create a new Android project
-+and copy the necessary files from the examples.
-+
-+examples/CameraTest is a simple demonstration of how to integrate the
-+ZBar image scanner with the camera.
-+
-+Manually building ZBar JNI library
-+----------------------------------
-+First download and unzip the iconv library source from 
-+  http://www.gnu.org/software/libiconv/
-+
-+Then kick off the build from the ZBar android directory. You will
-+need to run the android tools to setup the local.properties file which
-+setups sdk.dir.
-+
-+  1) cd <zbar project>/android
-+  2) android update project --path . 
-+  3) ant -Dndk.dir=<NDK path> -Diconv.src=<iconv library src> zbar-all
-+
-+This will rebuild all source files, create zbar.jar and
-+ZBarAndroidSDK.zip file (which bundles the jar and shared
-+libraries). From here, you can follow the steps for "Integrating ZBar
-+JNI library in Android project".
-+
-+To clean run:
-+  ant -Dndk.dir=<NDK path> zbar-clean
-+
-+See build-ndk.xml for additional target options.
-+
-+
-diff -r 563557a923d0 android/ant.properties
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/ant.properties	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,17 @@
-+# This file is used to override default values used by the Ant build system.
-+#
-+# This file must be checked in Version Control Systems, as it is
-+# integral to the build system of your project.
-+
-+# This file is only used by the Ant script.
-+
-+# You can use this to override default values such as
-+#  'source.dir' for the location of your java source folder and
-+#  'out.dir' for the location of your output folder.
-+
-+# You can also use it define how the release builds are signed by declaring
-+# the following properties:
-+#  'key.store' for the location of your keystore and
-+#  'key.alias' for the name of the key to use.
-+# The password will be asked during the build when you use the 'release' target.
-+
-diff -r 563557a923d0 android/build-ndk.xml
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/build-ndk.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,66 @@
-+<!-- 
-+Ant build file to compile the ZBar JNI files using Android NDK tool
-+targets:
-+  zbar-clean     - removes build generated files, build dir, jar and zip files
-+  zbar-ndk-build - builds the zbarjni and iconv shared libraries
-+  zbar-compile   - builds the zbar java files
-+  zbar-jar       - builds and jars the zbar java files
-+  zbar-zip       - Creates ZBarAndroidSDK-x.y.zip of jar, .so, etc
-+  zbar-all       - performs all the above :)
-+-->
-+<project name="zbar">
-+  <property name="project.name" value="zbar" />
-+  <property name="project.sdk.name" value="ZBarAndroidSDK" />
-+
-+  <target name="zbar-clean">
-+      <delete dir="../java/build"/>
-+      <delete file="libs/${project.name}.jar"/>
-+      <delete file="${ant.project.name}.zip"/>
-+      <exec executable="${ndk.dir}/ndk-build" failonerror="true">
-+          <arg value="clean"/>
-+      </exec>
-+  </target>
-+
-+  <target name="zbar-ndk-build">
-+      <exec executable="${ndk.dir}/ndk-build" failonerror="true">
-+          <arg value="ICONV_SRC=${iconv.src}" />
-+      </exec>
-+  </target>
-+
-+  <target name="zbar-compile" depends="zbar-ndk-build">
-+      <mkdir dir="../java/build" />
-+      <javac srcdir="../java/net" destdir="../java/build" />
-+  </target>
-+
-+  <target name="zbar-jar" depends="zbar-compile">
-+      <jar destfile="libs/${project.name}.jar" basedir="../java/build">
-+      </jar>
-+  </target>
-+
-+  <target name="zbar-zip">
-+      <if><condition><not><isset property="version"/></not></condition><then>
-+         <property name="version" value="0.2" />
-+      </then></if>
-+      <zip destfile="${project.sdk.name}-${version}.zip" >
-+          <zipfileset dir="../" prefix="${project.sdk.name}-${version}" includes="COPYING, LICENSE"/>
-+          <zipfileset dir="." prefix="${project.sdk.name}-${version}" includes="README"/>
-+          <zipfileset dir="libs" prefix="${project.sdk.name}-${version}/libs"/>
-+          <zipfileset dir="examples" prefix="${project.sdk.name}-${version}/examples"/>
-+          <zipfileset dir="libs" prefix="${project.sdk.name}-${version}/examples/CameraTest/libs"/>
-+      </zip>
-+  </target>
-+
-+  <target name="zbar-all" depends="zbar-jar">
-+      <if><condition><not><isset property="version"/></not></condition><then>
-+         <property name="version" value="0.2" />
-+      </then></if>
-+      <zip destfile="${project.sdk.name}-${version}.zip" >
-+          <zipfileset dir="../" prefix="${project.sdk.name}-${version}" includes="COPYING, LICENSE"/>
-+          <zipfileset dir="." prefix="${project.sdk.name}-${version}" includes="README"/>
-+          <zipfileset dir="libs" prefix="${project.sdk.name}-${version}/libs"/>
-+          <zipfileset dir="examples" prefix="${project.sdk.name}-${version}/examples"/>
-+          <zipfileset dir="libs" prefix="${project.sdk.name}-${version}/examples/CameraTest/libs"/>
-+      </zip>
-+  </target>
-+</project>
-+
-diff -r 563557a923d0 android/build.xml
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/build.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,86 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<project name="ZBarAndroidSDK" default="help">
-+
-+    <!-- The local.properties file is created and updated by the 'android' tool.
-+         It contains the path to the SDK. It should *NOT* be checked into
-+         Version Control Systems. -->
-+    <property file="local.properties" />
-+
-+    <!-- The ant.properties file can be created by you. It is only edited by the
-+         'android' tool to add properties to it.
-+         This is the place to change some Ant specific build properties.
-+         Here are some properties you may want to change/update:
-+
-+         source.dir
-+             The name of the source directory. Default is 'src'.
-+         out.dir
-+             The name of the output directory. Default is 'bin'.
-+
-+         For other overridable properties, look at the beginning of the rules
-+         files in the SDK, at tools/ant/build.xml
-+
-+         Properties related to the SDK location or the project target should
-+         be updated using the 'android' tool with the 'update' action.
-+
-+         This file is an integral part of the build system for your
-+         application and should be checked into Version Control Systems.
-+
-+         -->
-+    <property file="ant.properties" />
-+
-+    <!-- The project.properties file is created and updated by the 'android'
-+         tool, as well as ADT.
-+
-+         This contains project specific properties such as project target, and library
-+         dependencies. Lower level build properties are stored in ant.properties
-+         (or in .classpath for Eclipse projects).
-+
-+         This file is an integral part of the build system for your
-+         application and should be checked into Version Control Systems. -->
-+    <loadproperties srcFile="project.properties" />
-+
-+    <!-- quick check on sdk.dir -->
-+    <fail
-+            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
-+            unless="sdk.dir"
-+    />
-+
-+
-+<!-- extension targets. Uncomment the ones where you want to do custom work
-+     in between standard targets -->
-+<!--
-+    <target name="-pre-build">
-+    </target>
-+    <target name="-pre-compile">
-+    </target>
-+
-+    /* This is typically used for code obfuscation.
-+       Compiled code location: ${out.classes.absolute.dir}
-+       If this is not done in place, override ${out.dex.input.absolute.dir} */
-+    <target name="-post-compile">
-+      <copy file="${out.absolute.dir}/classes.jar" tofile="${jar.libs.dir}/zbar_android.jar" />
-+    </target>
-+-->
-+
-+    <!-- Import the actual build file.
-+
-+         To customize existing targets, there are two options:
-+         - Customize only one target:
-+             - copy/paste the target into this file, *before* the
-+               <import> task.
-+             - customize it to your needs.
-+         - Customize the whole content of build.xml
-+             - copy/paste the content of the rules files (minus the top node)
-+               into this file, replacing the <import> task.
-+             - customize to your needs.
-+
-+         ***********************
-+         ****** IMPORTANT ******
-+         ***********************
-+         In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
-+         in order to avoid having your file be overridden by tools such as "android update project"
-+    -->
-+    <!-- version-tag: 1 -->
-+    <import file="build-ndk.xml" />
-+    <import file="${sdk.dir}/tools/ant/build.xml" />
-+</project>
-diff -r 563557a923d0 android/examples/CameraTest/AndroidManifest.xml
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/examples/CameraTest/AndroidManifest.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,19 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-+      package="net.sourceforge.zbar.android.CameraTest"
-+      android:versionCode="1"
-+      android:versionName="1.0">
-+    <uses-sdk android:minSdkVersion="8" />
-+    <uses-permission android:name="android.permission.CAMERA" />
-+    <uses-feature android:name="android.hardware.camera" />
-+    <uses-feature android:name="android.hardware.camera.autofocus" />
-+    <application android:label="@string/app_name" >
-+        <activity android:name="CameraTestActivity"
-+                  android:label="@string/app_name">
-+            <intent-filter>
-+                <action android:name="android.intent.action.MAIN" />
-+                <category android:name="android.intent.category.LAUNCHER" />
-+            </intent-filter>
-+        </activity>
-+    </application>
-+</manifest> 
-diff -r 563557a923d0 android/examples/CameraTest/ant.properties
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/examples/CameraTest/ant.properties	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,17 @@
-+# This file is used to override default values used by the Ant build system.
-+#
-+# This file must be checked in Version Control Systems, as it is
-+# integral to the build system of your project.
-+
-+# This file is only used by the Ant script.
-+
-+# You can use this to override default values such as
-+#  'source.dir' for the location of your java source folder and
-+#  'out.dir' for the location of your output folder.
-+
-+# You can also use it define how the release builds are signed by declaring
-+# the following properties:
-+#  'key.store' for the location of your keystore and
-+#  'key.alias' for the name of the key to use.
-+# The password will be asked during the build when you use the 'release' target.
-+
-diff -r 563557a923d0 android/examples/CameraTest/build.xml
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/examples/CameraTest/build.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,85 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<project name="CameraTest" default="help">
-+
-+    <!-- The local.properties file is created and updated by the 'android' tool.
-+         It contains the path to the SDK. It should *NOT* be checked into
-+         Version Control Systems. -->
-+    <property file="local.properties" />
-+
-+    <!-- The ant.properties file can be created by you. It is only edited by the
-+         'android' tool to add properties to it.
-+         This is the place to change some Ant specific build properties.
-+         Here are some properties you may want to change/update:
-+
-+         source.dir
-+             The name of the source directory. Default is 'src'.
-+         out.dir
-+             The name of the output directory. Default is 'bin'.
-+
-+         For other overridable properties, look at the beginning of the rules
-+         files in the SDK, at tools/ant/build.xml
-+
-+         Properties related to the SDK location or the project target should
-+         be updated using the 'android' tool with the 'update' action.
-+
-+         This file is an integral part of the build system for your
-+         application and should be checked into Version Control Systems.
-+
-+         -->
-+    <property file="ant.properties" />
-+
-+    <!-- The project.properties file is created and updated by the 'android'
-+         tool, as well as ADT.
-+
-+         This contains project specific properties such as project target, and library
-+         dependencies. Lower level build properties are stored in ant.properties
-+         (or in .classpath for Eclipse projects).
-+
-+         This file is an integral part of the build system for your
-+         application and should be checked into Version Control Systems. -->
-+    <loadproperties srcFile="project.properties" />
-+
-+    <!-- quick check on sdk.dir -->
-+    <fail
-+            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
-+            unless="sdk.dir"
-+    />
-+
-+
-+<!-- extension targets. Uncomment the ones where you want to do custom work
-+     in between standard targets -->
-+<!--
-+    <target name="-pre-build">
-+    </target>
-+    <target name="-pre-compile">
-+    </target>
-+
-+    /* This is typically used for code obfuscation.
-+       Compiled code location: ${out.classes.absolute.dir}
-+       If this is not done in place, override ${out.dex.input.absolute.dir} */
-+    <target name="-post-compile">
-+    </target>
-+-->
-+
-+    <!-- Import the actual build file.
-+
-+         To customize existing targets, there are two options:
-+         - Customize only one target:
-+             - copy/paste the target into this file, *before* the
-+               <import> task.
-+             - customize it to your needs.
-+         - Customize the whole content of build.xml
-+             - copy/paste the content of the rules files (minus the top node)
-+               into this file, replacing the <import> task.
-+             - customize to your needs.
-+
-+         ***********************
-+         ****** IMPORTANT ******
-+         ***********************
-+         In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
-+         in order to avoid having your file be overridden by tools such as "android update project"
-+    -->
-+    <!-- version-tag: 1 -->
-+    <import file="${sdk.dir}/tools/ant/build.xml" />
-+
-+</project>
-diff -r 563557a923d0 android/examples/CameraTest/proguard.cfg
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/examples/CameraTest/proguard.cfg	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,40 @@
-+-optimizationpasses 5
-+-dontusemixedcaseclassnames
-+-dontskipnonpubliclibraryclasses
-+-dontpreverify
-+-verbose
-+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-+
-+-keep public class * extends android.app.Activity
-+-keep public class * extends android.app.Application
-+-keep public class * extends android.app.Service
-+-keep public class * extends android.content.BroadcastReceiver
-+-keep public class * extends android.content.ContentProvider
-+-keep public class * extends android.app.backup.BackupAgentHelper
-+-keep public class * extends android.preference.Preference
-+-keep public class com.android.vending.licensing.ILicensingService
-+
-+-keepclasseswithmembernames class * {
-+    native <methods>;
-+}
-+
-+-keepclasseswithmembers class * {
-+    public <init>(android.content.Context, android.util.AttributeSet);
-+}
-+
-+-keepclasseswithmembers class * {
-+    public <init>(android.content.Context, android.util.AttributeSet, int);
-+}
-+
-+-keepclassmembers class * extends android.app.Activity {
-+   public void *(android.view.View);
-+}
-+
-+-keepclassmembers enum * {
-+    public static **[] values();
-+    public static ** valueOf(java.lang.String);
-+}
-+
-+-keep class * implements android.os.Parcelable {
-+  public static final android.os.Parcelable$Creator *;
-+}
-diff -r 563557a923d0 android/examples/CameraTest/project.properties
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/examples/CameraTest/project.properties	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,11 @@
-+# This file is automatically generated by Android Tools.
-+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-+#
-+# This file must be checked in Version Control Systems.
-+#
-+# To customize properties used by the Ant build system use,
-+# "ant.properties", and override values to adapt the script to your
-+# project structure.
-+
-+# Project target.
-+target=android-15
-diff -r 563557a923d0 android/examples/CameraTest/res/layout/main.xml
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/examples/CameraTest/res/layout/main.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,28 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<LinearLayout
-+  xmlns:android="http://schemas.android.com/apk/res/android"
-+  android:orientation="vertical"
-+  android:layout_width="match_parent"
-+  android:layout_height="match_parent">
-+
-+  <FrameLayout
-+    android:id="@+id/cameraPreview"
-+    android:layout_width="match_parent"
-+    android:layout_height="match_parent"
-+    android:layout_weight="1"
-+  />
-+
-+  <TextView
-+    android:id="@+id/scanText"
-+    android:text="Scanning..."
-+    android:layout_height="wrap_content" 
-+    android:layout_width="match_parent">
-+  </TextView>
-+  <Button
-+    android:id="@+id/ScanButton"
-+    android:text="Scan"
-+    android:layout_width="wrap_content"
-+    android:layout_height="wrap_content"
-+    android:layout_gravity="center"
-+  />
-+</LinearLayout>
-diff -r 563557a923d0 android/examples/CameraTest/res/values/strings.xml
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/examples/CameraTest/res/values/strings.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,4 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<resources>
-+    <string name="app_name">ZBar CameraTest</string>
-+</resources>
-diff -r 563557a923d0 android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraPreview.java
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraPreview.java	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,108 @@
-+/*
-+ * Barebones implementation of displaying camera preview.
-+ * 
-+ * Created by lisah0 on 2012-02-24
-+ */
-+package net.sourceforge.zbar.android.CameraTest;
-+
-+import java.io.IOException;
-+
-+import android.app.Activity;
-+import android.os.Bundle;
-+
-+import android.util.Log;
-+
-+import android.view.View;
-+import android.view.Surface;
-+import android.view.SurfaceView;
-+import android.view.SurfaceHolder;
-+
-+import android.content.Context;
-+
-+import android.hardware.Camera;
-+import android.hardware.Camera.PreviewCallback;
-+import android.hardware.Camera.AutoFocusCallback;
-+import android.hardware.Camera.Parameters;
-+
-+/** A basic Camera preview class */
-+public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
-+    private SurfaceHolder mHolder;
-+    private Camera mCamera;
-+    private PreviewCallback previewCallback;
-+    private AutoFocusCallback autoFocusCallback;
-+
-+    public CameraPreview(Context context, Camera camera,
-+                         PreviewCallback previewCb,
-+                         AutoFocusCallback autoFocusCb) {
-+        super(context);
-+        mCamera = camera;
-+        previewCallback = previewCb;
-+        autoFocusCallback = autoFocusCb;
-+
-+        /* 
-+         * Set camera to continuous focus if supported, otherwise use
-+         * software auto-focus. Only works for API level >=9.
-+         */
-+        /*
-+        Camera.Parameters parameters = camera.getParameters();
-+        for (String f : parameters.getSupportedFocusModes()) {
-+            if (f == Parameters.FOCUS_MODE_CONTINUOUS_PICTURE) {
-+                mCamera.setFocusMode(Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
-+                autoFocusCallback = null;
-+                break;
-+            }
-+        }
-+        */
-+
-+        // Install a SurfaceHolder.Callback so we get notified when the
-+        // underlying surface is created and destroyed.
-+        mHolder = getHolder();
-+        mHolder.addCallback(this);
-+
-+        // deprecated setting, but required on Android versions prior to 3.0
-+        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
-+    }
-+
-+    public void surfaceCreated(SurfaceHolder holder) {
-+        // The Surface has been created, now tell the camera where to draw the preview.
-+        try {
-+            mCamera.setPreviewDisplay(holder);
-+        } catch (IOException e) {
-+            Log.d("DBG", "Error setting camera preview: " + e.getMessage());
-+        }
-+    }
-+
-+    public void surfaceDestroyed(SurfaceHolder holder) {
-+        // Camera preview released in activity
-+    }
-+
-+    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
-+        /*
-+         * If your preview can change or rotate, take care of those events here.
-+         * Make sure to stop the preview before resizing or reformatting it.
-+         */
-+        if (mHolder.getSurface() == null){
-+          // preview surface does not exist
-+          return;
-+        }
-+
-+        // stop preview before making changes
-+        try {
-+            mCamera.stopPreview();
-+        } catch (Exception e){
-+          // ignore: tried to stop a non-existent preview
-+        }
-+
-+        try {
-+            // Hard code camera surface rotation 90 degs to match Activity view in portrait
-+            mCamera.setDisplayOrientation(90);
-+
-+            mCamera.setPreviewDisplay(mHolder);
-+            mCamera.setPreviewCallback(previewCallback);
-+            mCamera.startPreview();
-+            mCamera.autoFocus(autoFocusCallback);
-+        } catch (Exception e){
-+            Log.d("DBG", "Error starting camera preview: " + e.getMessage());
-+        }
-+    }
-+}
-diff -r 563557a923d0 android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraTestActivity.java
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraTestActivity.java	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,155 @@
-+/*
-+ * Basic no frills app which integrates the ZBar barcode scanner with
-+ * the camera.
-+ * 
-+ * Created by lisah0 on 2012-02-24
-+ */
-+package net.sourceforge.zbar.android.CameraTest;
-+
-+import net.sourceforge.zbar.android.CameraTest.CameraPreview;
-+
-+import android.app.Activity;
-+import android.content.pm.ActivityInfo;
-+import android.os.Bundle;
-+import android.os.Handler;
-+import android.util.Log;
-+
-+import android.view.View;
-+import android.view.View.OnClickListener;
-+import android.view.Window;
-+import android.widget.FrameLayout;
-+import android.widget.Button;
-+
-+import android.hardware.Camera;
-+import android.hardware.Camera.PreviewCallback;
-+import android.hardware.Camera.AutoFocusCallback;
-+import android.hardware.Camera.Parameters;
-+import android.hardware.Camera.Size;
-+
-+import android.widget.TextView;
-+import android.graphics.ImageFormat;
-+
-+/* Import ZBar Class files */
-+import net.sourceforge.zbar.ImageScanner;
-+import net.sourceforge.zbar.Image;
-+import net.sourceforge.zbar.Symbol;
-+import net.sourceforge.zbar.SymbolSet;
-+import net.sourceforge.zbar.Config;
-+
-+public class CameraTestActivity extends Activity
-+{
-+    private Camera mCamera;
-+    private CameraPreview mPreview;
-+    private Handler autoFocusHandler;
-+
-+    TextView scanText;
-+    Button scanButton;
-+
-+    ImageScanner scanner;
-+
-+    private boolean barcodeScanned = false;
-+    private boolean previewing = true;
-+
-+    static {
-+        System.loadLibrary("iconv");
-+    } 
-+
-+    public void onCreate(Bundle savedInstanceState) {
-+        super.onCreate(savedInstanceState);
-+
-+        setContentView(R.layout.main);
-+
-+        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
-+
-+        autoFocusHandler = new Handler();
-+        mCamera = getCameraInstance();
-+
-+        /* Instance barcode scanner */
-+        scanner = new ImageScanner();
-+        scanner.setConfig(0, Config.X_DENSITY, 3);
-+        scanner.setConfig(0, Config.Y_DENSITY, 3);
-+
-+        mPreview = new CameraPreview(this, mCamera, previewCb, autoFocusCB);
-+        FrameLayout preview = (FrameLayout)findViewById(R.id.cameraPreview);
-+        preview.addView(mPreview);
-+
-+        scanText = (TextView)findViewById(R.id.scanText);
-+
-+        scanButton = (Button)findViewById(R.id.ScanButton);
-+
-+        scanButton.setOnClickListener(new OnClickListener() {
-+                public void onClick(View v) {
-+                    if (barcodeScanned) {
-+                        barcodeScanned = false;
-+                        scanText.setText("Scanning...");
-+                        mCamera.setPreviewCallback(previewCb);
-+                        mCamera.startPreview();
-+                        previewing = true;
-+                        mCamera.autoFocus(autoFocusCB);
-+                    }
-+                }
-+            });
-+    }
-+
-+    public void onPause() {
-+        super.onPause();
-+        releaseCamera();
-+    }
-+
-+    /** A safe way to get an instance of the Camera object. */
-+    public static Camera getCameraInstance(){
-+        Camera c = null;
-+        try {
-+            c = Camera.open();
-+        } catch (Exception e){
-+        }
-+        return c;
-+    }
-+
-+    private void releaseCamera() {
-+        if (mCamera != null) {
-+            previewing = false;
-+            mCamera.setPreviewCallback(null);
-+            mCamera.release();
-+            mCamera = null;
-+        }
-+    }
-+
-+    private Runnable doAutoFocus = new Runnable() {
-+            public void run() {
-+                if (previewing)
-+                    mCamera.autoFocus(autoFocusCB);
-+            }
-+        };
-+
-+    PreviewCallback previewCb = new PreviewCallback() {
-+            public void onPreviewFrame(byte[] data, Camera camera) {
-+                Camera.Parameters parameters = camera.getParameters();
-+                Size size = parameters.getPreviewSize();
-+
-+                Image barcode = new Image(size.width, size.height, "Y800");
-+                barcode.setData(data);
-+
-+                int result = scanner.scanImage(barcode);
-+                
-+                if (result != 0) {
-+                    previewing = false;
-+                    mCamera.setPreviewCallback(null);
-+                    mCamera.stopPreview();
-+                    
-+                    SymbolSet syms = scanner.getResults();
-+                    for (Symbol sym : syms) {
-+                        scanText.setText("barcode result " + sym.getData());
-+                        barcodeScanned = true;
-+                    }
-+                }
-+            }
-+        };
-+
-+    // Mimic continuous auto-focusing
-+    AutoFocusCallback autoFocusCB = new AutoFocusCallback() {
-+            public void onAutoFocus(boolean success, Camera camera) {
-+                autoFocusHandler.postDelayed(doAutoFocus, 1000);
-+            }
-+        };
-+}
-diff -r 563557a923d0 android/jni/Android.mk
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/jni/Android.mk	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,76 @@
-+#
-+# Android NDK makefile 
-+#
-+# build - <ndk path>/ndk-build ICONV_SRC=<iconv library src> 
-+# clean -  <ndk path>/ndk-build clean
-+#
-+MY_LOCAL_PATH := $(call my-dir)
-+
-+# libiconv
-+include $(CLEAR_VARS)
-+LOCAL_PATH := $(ICONV_SRC)
-+
-+LOCAL_MODULE := libiconv
-+
-+LOCAL_CFLAGS := \
-+    -Wno-multichar \
-+    -D_ANDROID \
-+    -DLIBDIR="c" \
-+    -DBUILDING_LIBICONV \
-+    -DBUILDING_LIBCHARSET \
-+    -DIN_LIBRARY
-+
-+LOCAL_SRC_FILES := \
-+	lib/iconv.c \
-+	libcharset/lib/localcharset.c \
-+	lib/relocatable.c
-+
-+LOCAL_C_INCLUDES := \
-+	$(ICONV_SRC)/include \
-+	$(ICONV_SRC)/libcharset \
-+	$(ICONV_SRC)/libcharset/include
-+
-+include $(BUILD_SHARED_LIBRARY)
-+
-+LOCAL_LDLIBS := -llog -lcharset
-+
-+# libzbarjni
-+include $(CLEAR_VARS)
-+
-+LOCAL_PATH := $(MY_LOCAL_PATH)
-+LOCAL_MODULE := zbarjni
-+LOCAL_SRC_FILES := ../../java/zbarjni.c \
-+		   ../../zbar/img_scanner.c \
-+		   ../../zbar/decoder.c \
-+		   ../../zbar/image.c \
-+		   ../../zbar/symbol.c \
-+		   ../../zbar/convert.c \
-+		   ../../zbar/config.c \
-+		   ../../zbar/scanner.c \
-+		   ../../zbar/error.c \
-+		   ../../zbar/refcnt.c \
-+		   ../../zbar/video.c \
-+		   ../../zbar/video/null.c \
-+		   ../../zbar/decoder/code128.c \
-+		   ../../zbar/decoder/code39.c \
-+		   ../../zbar/decoder/code93.c \
-+		   ../../zbar/decoder/codabar.c \
-+		   ../../zbar/decoder/databar.c \
-+		   ../../zbar/decoder/ean.c \
-+		   ../../zbar/decoder/i25.c \
-+		   ../../zbar/decoder/qr_finder.c \
-+		   ../../zbar/qrcode/bch15_5.c \
-+		   ../../zbar/qrcode/binarize.c \
-+		   ../../zbar/qrcode/isaac.c \
-+		   ../../zbar/qrcode/qrdec.c \
-+		   ../../zbar/qrcode/qrdectxt.c \
-+		   ../../zbar/qrcode/rs.c \
-+		   ../../zbar/qrcode/util.c
-+
-+LOCAL_C_INCLUDES := ../include \
-+		    ../zbar \
-+		    $(ICONV_SRC)/include 
-+
-+LOCAL_SHARED_LIBRARIES := libiconv
-+
-+include $(BUILD_SHARED_LIBRARY)
-\ No newline at end of file
-diff -r 563557a923d0 android/jni/Application.mk
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/jni/Application.mk	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,1 @@
-+APP_ABI := armeabi armeabi-v7a x86
-diff -r 563557a923d0 android/jni/config.h
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/jni/config.h	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,236 @@
-+/* manually customized for iPhone platform */
-+
-+#define HAVE_LANGINFO_CODESET 0
-+
-+/* whether to build support for Code 128 symbology */
-+#define ENABLE_CODE128 1
-+
-+/* whether to build support for Code 93 symbology */
-+#define ENABLE_CODE93 1
-+
-+/* whether to build support for Code 39 symbology */
-+#define ENABLE_CODE39 1
-+
-+/* whether to build support for Codabar symbology */
-+#define ENABLE_CODABAR 1
-+
-+/* whether to build support for DataBar symbology */
-+#define ENABLE_DATABAR 1
-+
-+/* whether to build support for EAN symbologies */
-+#define ENABLE_EAN 1
-+
-+/* whether to build support for Interleaved 2 of 5 symbology */
-+#define ENABLE_I25 1
-+
-+/* whether to build support for PDF417 symbology */
-+#undef ENABLE_PDF417
-+
-+/* whether to build support for QR Code */
-+#define ENABLE_QRCODE 1
-+
-+/* Define to 1 if you have the `atexit' function. */
-+#undef HAVE_ATEXIT
-+
-+/* Define to 1 if you have the <dlfcn.h> header file. */
-+#undef HAVE_DLFCN_H
-+
-+/* Define to 1 if you have the <fcntl.h> header file. */
-+#undef HAVE_FCNTL_H
-+
-+/* Define to 1 if you have the <features.h> header file. */
-+#undef HAVE_FEATURES_H
-+
-+/* Define to 1 if you have the `getpagesize' function. */
-+#undef HAVE_GETPAGESIZE
-+
-+/* Define if you have the iconv() function and it works. */
-+#undef HAVE_ICONV
-+
-+/* Define to 1 if you have the <inttypes.h> header file. */
-+#define HAVE_INTTYPES_H 1
-+
-+/* Define to 1 if you have the <jpeglib.h> header file. */
-+#undef HAVE_JPEGLIB_H
-+
-+/* Define to 1 if you have the `jpeg' library (-ljpeg). */
-+#undef HAVE_LIBJPEG
-+
-+/* Define to 1 if you have the `pthread' library (-lpthread). */
-+#undef HAVE_LIBPTHREAD
-+
-+/* Define to 1 if you have the <linux/videodev2.h> header file. */
-+#undef HAVE_LINUX_VIDEODEV2_H
-+
-+/* Define to 1 if you have the <linux/videodev.h> header file. */
-+#undef HAVE_LINUX_VIDEODEV_H
-+
-+/* Define to 1 if you have the <memory.h> header file. */
-+#undef HAVE_MEMORY_H
-+
-+/* Define to 1 if you have the `memset' function. */
-+#define HAVE_MEMSET 1
-+
-+/* Define to 1 if you have a working `mmap' system call. */
-+#undef HAVE_MMAP
-+
-+/* Define to 1 if you have the <poll.h> header file. */
-+#undef HAVE_POLL_H
-+
-+/* Define to 1 if you have the <pthread.h> header file. */
-+#undef HAVE_PTHREAD_H
-+
-+/* Define to 1 if you have the `setenv' function. */
-+#undef HAVE_SETENV
-+
-+/* Define to 1 if you have the <stdint.h> header file. */
-+#define HAVE_STDINT_H 1
-+
-+/* Define to 1 if you have the <stdlib.h> header file. */
-+#define HAVE_STDLIB_H 1
-+
-+/* Define to 1 if you have the <strings.h> header file. */
-+#define HAVE_STRINGS_H 1
-+
-+/* Define to 1 if you have the <string.h> header file. */
-+#define HAVE_STRING_H 1
-+
-+/* Define to 1 if you have the <sys/ioctl.h> header file. */
-+#undef HAVE_SYS_IOCTL_H
-+
-+/* Define to 1 if you have the <sys/ipc.h> header file. */
-+#undef HAVE_SYS_IPC_H
-+
-+/* Define to 1 if you have the <sys/mman.h> header file. */
-+#undef HAVE_SYS_MMAN_H
-+
-+/* Define to 1 if you have the <sys/shm.h> header file. */
-+#undef HAVE_SYS_SHM_H
-+
-+/* Define to 1 if you have the <sys/stat.h> header file. */
-+#define HAVE_SYS_STAT_H 1
-+
-+/* Define to 1 if you have the <sys/times.h> header file. */
-+#define HAVE_SYS_TIMES_H 1
-+
-+/* Define to 1 if you have the <sys/time.h> header file. */
-+#define HAVE_SYS_TIME_H 1
-+
-+/* Define to 1 if you have the <sys/types.h> header file. */
-+#define HAVE_SYS_TYPES_H 1
-+
-+/* Define to 1 if the system has the type `uintptr_t'. */
-+#define HAVE_UINTPTR_T 1
-+
-+/* Define to 1 if you have the <unistd.h> header file. */
-+#define HAVE_UNISTD_H 1
-+
-+/* Define to 1 if you have the <vfw.h> header file. */
-+#undef HAVE_VFW_H
-+
-+/* Define to 1 if you have the <X11/extensions/XShm.h> header file. */
-+#undef HAVE_X11_EXTENSIONS_XSHM_H
-+
-+/* Define to 1 if you have the <X11/extensions/Xvlib.h> header file. */
-+#undef HAVE_X11_EXTENSIONS_XVLIB_H
-+
-+/* Define as const if the declaration of iconv() needs const. */
-+#undef ICONV_CONST
-+
-+/* Library major version */
-+#define LIB_VERSION_MAJOR 0
-+
-+/* Library minor version */
-+#define LIB_VERSION_MINOR 2
-+
-+/* Library revision */
-+#define LIB_VERSION_REVISION 0
-+
-+/* Define to the sub-directory in which libtool stores uninstalled libraries.
-+   */
-+#undef LT_OBJDIR
-+
-+/* Define to 1 if assertions should be disabled. */
-+//#undef NDEBUG
-+
-+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-+#undef NO_MINUS_C_MINUS_O
-+
-+/* Name of package */
-+#define PACKAGE "zbar"
-+
-+/* Define to the address where bug reports for this package should be sent. */
-+#define PACKAGE_BUGREPORT "spadix at users.sourceforge.net"
-+
-+/* Define to the full name of this package. */
-+#define PACKAGE_NAME "zbar"
-+
-+/* Define to the full name and version of this package. */
-+#define PACKAGE_STRING "zbar 0.10"
-+
-+/* Define to the one symbol short name of this package. */
-+#define PACKAGE_TARNAME "zbar"
-+
-+/* Define to the version of this package. */
-+#define PACKAGE_VERSION "0.10"
-+
-+/* Define to 1 if you have the ANSI C header files. */
-+#define STDC_HEADERS 1
-+
-+/* Version number of package */
-+#define VERSION "0.10"
-+
-+/* Define to 1 if the X Window System is missing or not being used. */
-+#define X_DISPLAY_MISSING 1
-+
-+/* Program major version (before the '.') as a number */
-+#define ZBAR_VERSION_MAJOR 0
-+
-+/* Program minor version (after '.') as a number */
-+#define ZBAR_VERSION_MINOR 10
-+
-+/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
-+   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
-+   #define below would cause a syntax error. */
-+#undef _UINT32_T
-+
-+/* Define for Solaris 2.5.1 so the uint8_t typedef from <sys/synch.h>,
-+   <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
-+   #define below would cause a syntax error. */
-+#undef _UINT8_T
-+
-+/* Minimum Windows API version */
-+#undef _WIN32_WINNT
-+
-+/* used only for pthread debug attributes */
-+#undef __USE_UNIX98
-+
-+/* Define to empty if `const' does not conform to ANSI C. */
-+#undef const
-+
-+/* Define to `__inline__' or `__inline' if that's what the C compiler
-+   calls it, or to nothing if 'inline' is not supported under any name.  */
-+#ifndef __cplusplus
-+#undef inline
-+#endif
-+
-+/* Define to the type of a signed integer type of width exactly 32 bits if
-+   such a type exists and the standard includes do not define it. */
-+#undef int32_t
-+
-+/* Define to the type of an unsigned integer type of width exactly 32 bits if
-+   such a type exists and the standard includes do not define it. */
-+#undef uint32_t
-+
-+/* Define to the type of an unsigned integer type of width exactly 8 bits if
-+   such a type exists and the standard includes do not define it. */
-+#undef uint8_t
-+
-+/* Define to the type of an unsigned integer type wide enough to hold a
-+   pointer, if such a type exists, and if the system does not define it. */
-+#undef uintptr_t
-+
-+#ifndef X_DISPLAY_MISSING
-+# define HAVE_X
-+#endif
-+
-diff -r 563557a923d0 android/proguard.cfg
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/proguard.cfg	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,40 @@
-+-optimizationpasses 5
-+-dontusemixedcaseclassnames
-+-dontskipnonpubliclibraryclasses
-+-dontpreverify
-+-verbose
-+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-+
-+-keep public class * extends android.app.Activity
-+-keep public class * extends android.app.Application
-+-keep public class * extends android.app.Service
-+-keep public class * extends android.content.BroadcastReceiver
-+-keep public class * extends android.content.ContentProvider
-+-keep public class * extends android.app.backup.BackupAgentHelper
-+-keep public class * extends android.preference.Preference
-+-keep public class com.android.vending.licensing.ILicensingService
-+
-+-keepclasseswithmembernames class * {
-+    native <methods>;
-+}
-+
-+-keepclasseswithmembers class * {
-+    public <init>(android.content.Context, android.util.AttributeSet);
-+}
-+
-+-keepclasseswithmembers class * {
-+    public <init>(android.content.Context, android.util.AttributeSet, int);
-+}
-+
-+-keepclassmembers class * extends android.app.Activity {
-+   public void *(android.view.View);
-+}
-+
-+-keepclassmembers enum * {
-+    public static **[] values();
-+    public static ** valueOf(java.lang.String);
-+}
-+
-+-keep class * implements android.os.Parcelable {
-+  public static final android.os.Parcelable$Creator *;
-+}
-diff -r 563557a923d0 android/project.properties
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/project.properties	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,12 @@
-+# This file is automatically generated by Android Tools.
-+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-+#
-+# This file must be checked in Version Control Systems.
-+#
-+# To customize properties used by the Ant build system use,
-+# "ant.properties", and override values to adapt the script to your
-+# project structure.
-+
-+android.library=true
-+# Project target.
-+target=android-8
-diff -r 563557a923d0 android/res/layout/main.xml
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/res/layout/main.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,13 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-+    android:orientation="vertical"
-+    android:layout_width="fill_parent"
-+    android:layout_height="fill_parent"
-+    >
-+<TextView  
-+    android:layout_width="fill_parent" 
-+    android:layout_height="wrap_content" 
-+    android:text="Hello World, ACTIVITY_ENTRY_NAME"
-+    />
-+</LinearLayout>
-+
-diff -r 563557a923d0 android/res/values/strings.xml
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/android/res/values/strings.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,4 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<resources>
-+    <string name="app_name">ACTIVITY_ENTRY_NAME</string>
-+</resources>
-diff -r 563557a923d0 configure.ac
---- a/configure.ac	Tue Oct 27 11:25:59 2009 -0400
-+++ b/configure.ac	Fri Feb 22 08:54:29 2013 -0300
-@@ -46,6 +46,13 @@
-   [[`echo "$LIB_VERSION" | sed -e 's/^[^:]*:\([^:]*\):.*$/\1/'`]],
-   [Library revision])
- 
-+AM_CPPFLAGS="-I$srcdir/include"
-+AM_CFLAGS="-Wall -Wno-parentheses -Werror"
-+AM_CXXFLAGS="$AM_CFLAGS"
-+AC_SUBST([AM_CPPFLAGS])
-+AC_SUBST([AM_CFLAGS])
-+AC_SUBST([AM_CXXFLAGS])
-+
- dnl windows build
- 
- AC_CANONICAL_HOST
-@@ -73,13 +80,36 @@
- AC_ARG_VAR([XMLTOFLAGS], [additional arguments for xmlto])
- AC_CHECK_PROGS([XMLTO], [xmlto], [:])
- 
-+have_java="maybe"
-+AC_ARG_VAR([JAVA_HOME], [root location of JDK])
-+AS_IF([test "x$JAVA_HOME" = "x"],
-+  [JAVA_PATH="$PATH"],
-+  [JAVA_PATH="$JAVA_HOME/bin$PATH_SEPARATOR$PATH"])
-+
-+AC_ARG_VAR([JAVAC], [location of Java language compiler])
-+AC_PATH_PROGS([JAVAC], [javac jikes ecj gcj], [:], [$JAVA_PATH])
-+AS_IF([test "x$JAVAC" = "x:"], [have_java="no"])
-+
-+AC_ARG_VAR([JAVAH], [location of Java header generator])
-+AC_PATH_PROGS([JAVAH], [javah], [/bin/false], [$JAVA_PATH])
-+
-+AC_ARG_VAR([JAR], [location of Java archive tool])
-+AC_PATH_PROGS([JAR], [jar], [:], [$JAVA_PATH])
-+AS_IF([test "x$JAR" = "x:"], [have_java="no"])
-+
-+AC_ARG_VAR([JAVA], [location of Java application launcher])
-+AC_PATH_PROGS([JAVA], [java], [/bin/false], [$JAVA_PATH])
-+
-+AC_ARG_VAR([CLASSPATH], [Java class path (include JUnit to run java tests)])
-+AS_IF([test "x$CLASSPATH" = "x"], [CLASSPATH="."])
-+
- dnl symbologies
- 
- AC_ARG_ENABLE([codes],
-   [AS_HELP_STRING([--enable-codes=SYMS],
--    [select symbologies to compile [default=ean,i25,code39,code128,qrcode]])],
-+    [select symbologies to compile [default=ean,databar,code128,code93,code39,codabar,i25,qrcode]])],
-   [],
--  [enable_codes="ean,code39,code128,i25,qrcode"]) dnl pdf417
-+  [enable_codes="ean,databar,code128,code93,code39,codabar,i25,qrcode"])
- 
- AC_DEFUN([ZBAR_CHK_CODE], [
-   AC_MSG_CHECKING([whether to build $2])
-@@ -97,11 +127,14 @@
- ])dnl
- 
- ZBAR_CHK_CODE([ean], [EAN symbologies])
-+ZBAR_CHK_CODE([databar], [DataBar symbology])
- ZBAR_CHK_CODE([code128], [Code 128 symbology])
-+ZBAR_CHK_CODE([code93], [Code 93 symbology])
- ZBAR_CHK_CODE([code39], [Code 39 symbology])
--ZBAR_CHK_CODE([pdf417], [PDF417 symbology])
-+ZBAR_CHK_CODE([codabar], [Codabar symbology])
- ZBAR_CHK_CODE([i25], [Interleaved 2 of 5 symbology])
- ZBAR_CHK_CODE([qrcode], [QR Code])
-+ZBAR_CHK_CODE([pdf417], [PDF417 symbology])
- 
- dnl libraries
- 
-@@ -144,23 +177,26 @@
-   [],
-   [enable_video="yes"])
- 
--with_video="no"
--AS_IF([test "x$enable_video" != "xno"],
--  [AS_IF([test "x$win32" = "xno"],
--    [AC_CHECK_HEADERS([linux/videodev.h], [with_video="v4l1"],
--      [AC_MSG_FAILURE([test for video support failed!
-+have_v4l1="no"
-+have_v4l2="no"
-+AS_IF([test "x$enable_video" = "xno"],
-+  [],
-+  [test "x$win32" = "xno"],
-+  [AC_CHECK_HEADERS([linux/videodev.h], [have_v4l1="yes"])
-+   AC_CHECK_HEADERS([linux/videodev2.h], [have_v4l2="yes"])
-+   AS_IF([test "x$have_v4l2" = "xno" && test "x$have_v4l1" = "xno"],
-+     [AC_MSG_FAILURE([test for video support failed!
- rebuild your kernel to include video4linux support or
--configure --disable-video to skip building video support.])])
--       AC_CHECK_HEADERS([linux/videodev2.h], [with_video="v4l2"],
--         [AC_MSG_WARN([v4l2 API not detected, upgrade your kernel!])])],
--    [AC_CHECK_HEADERS([vfw.h], [with_video="vfw"],
--      [AC_MSG_FAILURE([test for VfW video support failed!
--configure --disable-video to skip building vidoe support.])])])
--])
-+configure --disable-video to skip building video support.])],
-+     [test "x$have_v4l2" = "xno"],
-+     [AC_MSG_WARN([v4l2 API not detected, upgrade your kernel!])])],
-+  [AC_CHECK_HEADERS([vfw.h], [with_video="vfw"],
-+    [AC_MSG_FAILURE([test for VfW video support failed!
-+configure --disable-video to skip building video support.])])])
-+
- AM_CONDITIONAL([HAVE_VIDEO], [test "x$enable_video" != "xno"])
--AM_CONDITIONAL([HAVE_V4L1],
--  [test "x$with_video" = "xv4l1" || test "x$with_video" = "xv4l2"])
--AM_CONDITIONAL([HAVE_V4L2], [test "x$with_video" = "xv4l2"])
-+AM_CONDITIONAL([HAVE_V4L1], [test "x$have_v4l1" != "xno"])
-+AM_CONDITIONAL([HAVE_V4L2], [test "x$have_v4l2" != "xno"])
- 
- dnl X
- AC_ARG_VAR([XSHM_LIBS], [linker flags for X shared memory extension])
-@@ -252,51 +288,105 @@
- ])
- AM_CONDITIONAL([HAVE_JPEG], [test "x$with_jpeg" = "xyes"])
- 
--dnl ImageMagick
-+dnl ImageMagick or GraphicsMagick
-+dnl disable both if IM is explicitly disabled to preserve old behavior
-+
- AC_ARG_WITH([imagemagick],
-   [AS_HELP_STRING([--without-imagemagick],
--    [disable support for scanning images using ImageMagick])],
-+    [disable support for scanning images with ImageMagick])],
-   [],
--  [with_imagemagick="yes"])
-+  [with_imagemagick="check"])
- 
--AS_IF([test "x$with_imagemagick" != "xno"],
--  [PKG_CHECK_MODULES([MAGICK], [MagickWand >= 6.2.6], [],
--     [dnl Wand is deprecated in favor of MagickWand,
--      dnl but the latter doesn't exist in older verisons (bug #2848437)
-+AC_ARG_WITH([graphicsmagick],
-+  [AS_HELP_STRING([--with-graphicsmagick],
-+    [use GraphicsMagick alternative to ImageMagick])],
-+  [],
-+  [with_graphicsmagick="check"])
-+
-+magick="UnknownMagick"
-+have_IM="maybe"
-+AS_IF([test "x$with_imagemagick" = "xno"], [],
-+      [test "x$with_imagemagick" = "xyes" || \
-+       test "x$with_graphicsmagick" != "xyes"],
-+  [looked_for="ImageMagick >= 6.2.6"
-+   PKG_CHECK_MODULES([MAGICK], [MagickWand >= 6.2.6],
-+     [MAGICK_VERSION=`$PKG_CONFIG MagickWand --modversion`],
-+     [dnl
-+dnl Wand is deprecated in favor of MagickWand,
-+dnl but the latter doesn't exist in older verisons (bug #2848437)
-       saved_error=$MAGICK_PKG_ERRORS
--      PKG_CHECK_MODULES([MAGICK], [Wand >= 6.2.6], [],
--        [AC_MSG_FAILURE([dnl
--Unable to find ImageMagick >= 6.2.6:
-+      PKG_CHECK_MODULES([MAGICK], [Wand >= 6.2.6],
-+        [MAGICK_VERSION=`$PKG_CONFIG Wand --modversion`],
-+        [have_IM="no"])])
-+   AS_IF([test "x$have_IM" != "xno"],
-+     [magick="ImageMagick"
-+      AC_MSG_NOTICE([trying ImageMagick version $MAGICK_VERSION])
-+dnl double check ImageMagick install (bug #2582232)
-+      CPPFLAGS_save="$CPPFLAGS"
-+      CPPFLAGS="$CPPFLAGS $MAGICK_CFLAGS"
-+      AC_CHECK_HEADER([wand/MagickWand.h],
-+        [have_IM="yes"],
-+        [have_IM="broken"])
-+      CPPFLAGS="$CPPFLAGS_save"])])
-+
-+have_GM="maybe"
-+AS_IF([test "x$have_IM" = "xyes"], [],
-+      [test "x$with_graphicsmagick" = "xno"], [],
-+      [test "x$with_graphicsmagick" = "xyes" || \
-+       test "x$with_imagemagick" = "xcheck"],
-+  [AS_IF([test "x$looked_for" = "x"],
-+     [looked_for="GraphicsMagick"],
-+     [looked_for="$looked_for or GraphicsMagick"])
-+   PKG_CHECK_MODULES([MAGICK], [GraphicsMagickWand],
-+     [have_GM="yes"
-+      magick="GraphicsMagick"
-+      MAGICK_VERSION=`$PKG_CONFIG GraphicsMagickWand --modversion`],
-+     [have_GM="no"
-+      AS_IF([test "x$saved_error" = "x"],
-+        [saved_error=$MAGICK_PKG_ERRORS])])])
-+
-+dnl now that we have collected all the info abt what Magick is available
-+dnl let the user know what we will or can't do
-+AS_IF([test "x$have_IM" = "xbroken" && test "x$have_GM" = "xyes"],
-+  [AC_MSG_WARN([Your ImageMagick install is broken, using GraphicsMagick instead])])
-+
-+AS_IF([test "x$have_IM" = "xyes" || test "x$have_GM" = "xyes"],
-+  [AC_MSG_NOTICE([using $magick version $MAGICK_VERSION])],
-+  [test "x$with_imagemagick" = "xno" && \
-+   test "x$with_graphicsmagick" != "xyes"],
-+  [AC_MSG_NOTICE([image scanning disabled -- zbarimg will *not* be built])],
-+  [test "x$have_IM" = "xbroken"],
-+  [AC_MSG_FAILURE([$magick package found but wand/MagickWand.h not installed?!
-+this is a problem with your $magick install, please try again after
-+resolving the inconsistency or installing GraphicsMagick alternative...])],
-+  [AC_MSG_FAILURE([dnl
-+Unable to find $looked_for:
- 
- $saved_error
- 
--* Ensure that you installed any "development" packages for ImageMagick.
-+* Ensure that you installed any "development" packages for ImageMagick or
-+  GraphicsMagick.
- * Consider adjusting the PKG_CONFIG_PATH environment variable if you
-   installed software in a non-standard prefix.
- * You may set the environment variables MAGICK_CFLAGS and MAGICK_LIBS
-   to avoid the need to call pkg-config.
-   See the pkg-config man page for more details.
--* To avoid using ImageMagick altogether you may add the --without-imagemagick
--  flag to the configure command; the zbarimg program will not be built.
--])])])
--   MAGICK_VERSION=`$PKG_CONFIG MagickWand --modversion`
--   AC_MSG_NOTICE([using ImageMagick version $MAGICK_VERSION])
-+* To avoid using ImageMagick or GraphicsMagick altogether you may add the
-+  --without-imagemagick flag to the configure command; the zbarimg program
-+  will *not* be built.
-+])])
- 
--dnl double check ImageMagick install (bug #2582232)
--   CPPFLAGS_save="$CPPFLAGS"
--   CPPFLAGS="$CPPFLAGS $MAGICK_CFLAGS"
--   AC_CHECK_HEADER([wand/MagickWand.h], [],
--     [AC_MSG_FAILURE([ImageMagick package found but wand/MagickWand.h not installed?!
--this is a problem with your ImageMagick install,
--please resolve the inconsistency and try again...])])
--   CPPFLAGS="$CPPFLAGS_save"])
--
--AM_CONDITIONAL([HAVE_MAGICK], [test "x$with_imagemagick" = "xyes"])
-+AS_IF([test "x$have_IM" = "xyes"],
-+  [AC_DEFINE([HAVE_IMAGEMAGICK], [1], [Define to 1 to use ImageMagick])],
-+  [test "x$have_GM" = "xyes"],
-+  [AC_DEFINE([HAVE_GRAPHICSMAGICK], [1], [Define to 1 to use GraphicsMagick])])
-+AM_CONDITIONAL([HAVE_MAGICK],
-+  [test "x$have_IM" = "xyes" || test "x$have_GM" = "xyes"])
- 
- dnl Mozilla NPAPI
- AC_ARG_WITH([npapi],
-   [AS_HELP_STRING([--with-npapi],
--    [enable support for Firefox/Mozilla/OpenOffice NPAPI plugin])],
-+    [enable support for Firefox/Mozilla/OpenOffice plugin])],
-   [],
-   [with_npapi="no"])
- 
-@@ -350,7 +440,16 @@
-      [test -x "$PYTHON-config"],
-      [PYTHON_CFLAGS=`$PYTHON-config --cflags`],
-      [PYTHON_CFLAGS=`$PYTHON -c 'import distutils.sysconfig as s; print " ".join(s.get_config_vars("CFLAGS")) + " -I"+s.get_python_inc() + " -I"+s.get_python_inc(plat_specific=True)'`])
--dnl FIXME now should check that #include <Python.h> compiles
-+
-+dnl check that #include <Python.h> compiles (bug #3092663)
-+   CPPFLAGS_save="$CPPFLAGS"
-+   CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
-+   AC_CHECK_HEADER([Python.h], [], [AC_MSG_ERROR([dnl
-+Python module enabled, but unable to compile Python.h.
-+Install the development package for python-$am_cv_python_version, or configure
-+--without-python to disable the python bindings.dnl
-+])])
-+   CPPFLAGS="$CPPFLAGS_save"
- 
-    AS_IF([test "x$with_gtk" = "xyes"],
-      [PKG_CHECK_MODULES([PYGTK], [pygtk-2.0])
-@@ -383,13 +482,39 @@
- 
- AM_CONDITIONAL([HAVE_QT], [test "x$with_qt" = "xyes"])
- 
-+dnl Java
-+AC_ARG_WITH([java],
-+  [AS_HELP_STRING([--without-java],
-+    [disable support for Java interface])],
-+  [],
-+  [with_java="check"])
-+
-+AC_ARG_VAR([JAVA_CFLAGS], [compiler flags for building JNI extensions])
-+AS_IF([test "x$JAVA_CFLAGS" = "x" && test "x$JAVA_HOME" != "x"],
-+  [JAVA_CFLAGS="-I$JAVA_HOME/include"])
-+
-+AS_IF([test "x$with_java" != "xno"],
-+  [CPPFLAGS_save="$CPPFLAGS"
-+   CPPFLAGS="$CPPFLAGS $JAVA_CFLAGS"
-+   AC_CHECK_HEADER([jni.h], [], [have_java="no"])
-+   CPPFLAGS="$CPPFLAGS_save"
-+   AS_IF([test "x$have_java" != "xno"],
-+     [with_java="yes"],
-+     [test "x$with_java" = "xyes"],
-+     [AC_MSG_FAILURE([unable to find Java JNI! ensure CFLAGS are set
-+appropriately or configure --without-java])],
-+     [with_java="no"])
-+])
-+AM_CONDITIONAL([HAVE_JAVA], [test "x$with_java" = "xyes"])
-+
- 
- dnl header files
- 
- dnl FIXME switches for shm, mmap
- AC_HEADER_ASSERT
--AC_CHECK_HEADERS([fcntl.h features.h inttypes.h stdlib.h string.h unistd.h \
--  sys/ioctl.h sys/time.h sys/times.h sys/ipc.h sys/shm.h sys/mman.h])
-+AC_CHECK_HEADERS([errno.h fcntl.h features.h inttypes.h stdlib.h string.h \
-+  unistd.h sys/types.h sys/stat.h sys/ioctl.h sys/time.h sys/times.h \
-+  sys/ipc.h sys/shm.h sys/mman.h])
- 
- dnl types
- 
-@@ -428,6 +553,7 @@
- 
- AC_CONFIG_FILES([
- Makefile
-+java/Makefile
- zbar.pc
- zbar-gtk.pc
- zbar-qt.pc
-@@ -448,8 +574,10 @@
- echo "jpeg              --with-jpeg=$with_jpeg"
- AS_IF([test "x$with_jpeg" != "xyes"],
-   [echo "        => JPEG image conversions will *NOT* be supported"])
--echo "Magick++          --with-imagemagick=$with_imagemagick"
--AS_IF([test "x$with_imagemagick" != "xyes"],
-+AS_IF([test "x$have_GM" = "xyes"],
-+  [echo "GraphicsMagick    --with-graphicsmagick=yes"],
-+  [echo "ImageMagick       --with-imagemagick=$with_imagemagick"])
-+AS_IF([test "x$have_IM" != "xyes" && test "x$have_GM" != "xyes"],
-   [echo "        => the zbarimg file scanner will *NOT* be built"])
- echo "Python            --with-python=$with_python"
- echo "GTK+              --with-gtk=$with_gtk"
-@@ -460,6 +588,9 @@
- echo "Qt4               --with-qt=$with_qt"
- AS_IF([test "x$with_qt" != "xyes"],
-   [echo "        => the Qt4 widget will *NOT* be built"])
-+echo "Java              --with-java=$with_java"
-+AS_IF([test "x$with_java" != "xyes"],
-+  [echo "        => the Java interface will *NOT* be built"])
- #echo "NPAPI Plugin     --with-npapi=$with_npapi"
- #AS_IF([test "x$with_mozilla" != "xyes"],
- #  [echo "       => the Mozilla/Firefox/OpenOffice plugin will *NOT* be built"])
-diff -r 563557a923d0 doc/Makefile.am.inc
---- a/doc/Makefile.am.inc	Tue Oct 27 11:25:59 2009 -0400
-+++ b/doc/Makefile.am.inc	Fri Feb 22 08:54:29 2013 -0300
-@@ -2,6 +2,7 @@
- DOCSOURCES = doc/manual.xml doc/version.xml doc/reldate.xml \
-     doc/ref/zbarimg.xml doc/ref/zbarcam.xml doc/ref/commonoptions.xml
- 
-+MAINTAINERCLEANFILES += doc/man/man.stamp doc/version.xml doc/reldate.xml
- 
- # man page targets to distribute and install
- dist_man_MANS =
-diff -r 563557a923d0 doc/api/footer.html
---- a/doc/api/footer.html	Tue Oct 27 11:25:59 2009 -0400
-+++ b/doc/api/footer.html	Fri Feb 22 08:54:29 2013 -0300
-@@ -9,9 +9,12 @@
- 
- <address><a href="mailto:spadix at users.sourceforge.net">spadix at users.sourceforge.net</a></address>
- 
--<p>Copyright 2008-2009 (c) Jeff Brown - All Rights Reserved.</p>
--<p>Verbatim copying and distribution of this entire article are
--  permitted worldwide, without royalty, in any medium, provided this
--  notice, and the copyright notice, are preserved.</p>
-+<p>Copyright 2008-2010 (c) Jeff Brown</p>
-+<p>This documentation is part of the ZBar Barcode Reader; you can
-+redistribute it and/or modify it under the terms of the
-+<a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">GNU
-+Lesser General Public License</a> as published by the Free Software
-+Foundation; either version 2.1 of the License, or (at your option) any
-+later version.</p>
- 
- </body></html>
-diff -r 563557a923d0 doc/manual.xml
---- a/doc/manual.xml	Tue Oct 27 11:25:59 2009 -0400
-+++ b/doc/manual.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -29,10 +29,10 @@
-       <year>2007</year>
-       <year>2008</year>
-       <year>2009</year>
-+      <year>2010</year>
-       <holder>Jeff Brown</holder>
-     </copyright>
-     <legalnotice><para>All Rights Reserved</para></legalnotice>
--    <!-- <legalnotice><para>insert GNU FDL header?</para></legalnotice> -->
-   </bookinfo>
- 
-   <chapter id="intro">
-@@ -47,7 +47,4 @@
-     &refzbarimg;
- 
-   </reference>
--
--  <!-- insert GNU FDL? -->
--
- </book>
-diff -r 563557a923d0 doc/ref/commonoptions.xml
---- a/doc/ref/commonoptions.xml	Tue Oct 27 11:25:59 2009 -0400
-+++ b/doc/ref/commonoptions.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -47,8 +47,9 @@
-       <option>ean13</option>, <option>ean8</option>,
-       <option>upca</option>, <option>upce</option>,
-       <option>isbn13</option>, <option>isbn10</option>,
--      <option>i25</option>, <option>code39</option>,
--      <option>code128</option> or the special value <option>*</option>.
-+      <option>i25</option>, <option>codabar</option>, <option>code39</option>,
-+      <option>code93</option>, <option>code128</option>,
-+      <option>qrcode</option> or the special value <option>*</option>.
-       If <replaceable class="parameter">symbology</replaceable> is
-       omitted or <option>*</option>, the <replaceable
-       class="parameter">config</replaceable> will be set for all
-@@ -128,11 +129,12 @@
-           If a decode result is outside the configured min/max range
-           (inclusive), it will not be reported.  Set to 0 to disable the
-           corresponding check.  This setting applies to variable-length
--          symbologies: <option>i25</option>, <option>code39</option>,
--          <option>code128</option> and <option>pdf417</option>.
--          <option>min-length</option> defaults to 6 for <option>i25</option>
--          and 1 for <option>code39</option> (per Code 39 autodiscrimination
--          recommendation); all others default to 0</simpara>
-+          symbologies: <option>i25</option>, <option>codabar</option>,
-+          <option>code39</option>, <option>code128</option> and
-+          <option>pdf417</option>. <option>min-length</option> defaults to 6
-+          for <option>i25</option> and 1 for <option>code39</option> (per Code
-+          39 autodiscrimination recommendation); all others default to
-+          0</simpara>
-         </listitem>
-       </varlistentry>
- 
-diff -r 563557a923d0 doc/ref/zbarcam.xml
---- a/doc/ref/zbarcam.xml	Tue Oct 27 11:25:59 2009 -0400
-+++ b/doc/ref/zbarcam.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -60,9 +60,10 @@
-     <filename>/dev/video0</filename></para>
- 
-     <para>The underlying library currently supports EAN-13 (including
--    UPC and ISBN subsets), EAN-8, Code 128, Code 39, and Interleaved
--    2 of 5 symbologies.  The specific type of each detected symbol is
--    printed with the decoded data.</para>
-+    UPC and ISBN subsets), EAN-8, DataBar, DataBar Expanded, Code 128,
-+    Code 93, Code 39, Codabar, Interleaved 2 of 5 and QR Code symbologies.
-+    The specific type of each detected symbol is printed with the decoded
-+    data.</para>
- 
-   </refsection>
- 
-@@ -160,6 +161,37 @@
-   </refsection>
- 
-   <refsection>
-+    <title>Exit Status</title>
-+
-+    <para><command>zbarcam</command> returns an exit code to indicate the
-+    status of the program execution. Current exit codes are:</para>
-+
-+    <variablelist>
-+      <varlistentry>
-+        <term>0</term>
-+        <listitem>
-+          <para>Successful program completion.</para>
-+        </listitem>
-+      </varlistentry>
-+
-+      <varlistentry>
-+        <term>1</term>
-+        <listitem>
-+          <para>An error occurred.  This includes bad arguments and I/O
-+          errors.</para>
-+        </listitem>
-+      </varlistentry>
-+
-+      <varlistentry>
-+        <term>2</term>
-+        <listitem>
-+          <para>A fatal error occurred.</para>
-+        </listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsection>
-+
-+  <refsection>
-     <title>See Also</title>
-     <para><xref linkend="zbarimg"/></para>
-     <para><link xlink:href="http://zbar.sf.net/"/></para>
-diff -r 563557a923d0 doc/ref/zbarimg.xml
---- a/doc/ref/zbarimg.xml	Tue Oct 27 11:25:59 2009 -0400
-+++ b/doc/ref/zbarimg.xml	Fri Feb 22 08:54:29 2013 -0300
-@@ -59,9 +59,10 @@
-     displayed to the screen.</para>
- 
-     <para>The underlying library currently supports EAN-13 (including
--    UPC and ISBN subsets), EAN-8, Code 128, Code 39, and Interleaved
--    2 of 5 symbologies.  The specific type of each detected symbol is
--    printed with the decoded data.</para>
-+    UPC and ISBN subsets), EAN-8, DataBar, DataBar Expanded, Code 128,
-+    Code 93, Code 39, Codabar, Interleaved 2 of 5 and QR Code symbologies.
-+    The specific type of each detected symbol is printed with the decoded
-+    data.</para>
- 
-     <para>Note that "<filename><replaceable>image</replaceable></filename>"
- 
-@@ -166,6 +167,56 @@
-   </refsection>
- 
-   <refsection>
-+    <title>Exit Status</title>
-+
-+    <para><command>zbarimg</command> returns an exit code to indicate the
-+    status of the program execution. Current exit codes are:</para>
-+
-+    <variablelist>
-+      <varlistentry>
-+        <term>0</term>
-+        <listitem>
-+          <para>Barcodes successfully detected in all images. Warnings may
-+          have been generated, but no errors.</para>
-+        </listitem>
-+      </varlistentry>
-+
-+      <varlistentry>
-+        <term>1</term>
-+        <listitem>
-+          <para>An error occurred while processing some image(s).  This
-+          includes bad arguments, I/O errors and image handling errors from
-+          ImageMagick.</para>
-+        </listitem>
-+      </varlistentry>
-+
-+      <varlistentry>
-+        <term>2</term>
-+        <listitem>
-+          <para>ImageMagick fatal error.</para>
-+        </listitem>
-+      </varlistentry>
-+
-+      <varlistentry>
-+        <term>3</term>
-+        <listitem>
-+          <para>The user quit the program before all images were scanned.
-+          Only applies when running in interactive mode
-+          (with <option>--display</option>)</para>
-+        </listitem>
-+      </varlistentry>
-+
-+      <varlistentry>
-+        <term>4</term>
-+        <listitem>
-+          <para>No barcode was detected in one or more of the images.  No
-+          other errors occurred.</para>
-+        </listitem>
-+      </varlistentry>
-+    </variablelist>
-+  </refsection>
-+
-+  <refsection>
-     <title>See Also</title>
-     <para><xref linkend="zbarcam"/></para>
-     <para><link xlink:href="http://zbar.sf.net/"/></para>
-diff -r 563557a923d0 examples/paginate.pl
---- a/examples/paginate.pl	Tue Oct 27 11:25:59 2009 -0400
-+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
-@@ -1,71 +0,0 @@
--#!/usr/bin/perl
--#------------------------------------------------------------------------
--#  Copyright 2009 (c) Jeff Brown <spadix at users.sourceforge.net>
--#
--#  This file is part of the ZBar Bar Code Reader.
--#
--#  The ZBar Bar Code Reader is free software; you can redistribute it
--#  and/or modify it under the terms of the GNU Lesser Public License as
--#  published by the Free Software Foundation; either version 2.1 of
--#  the License, or (at your option) any later version.
--#
--#  The ZBar Bar Code Reader is distributed in the hope that it will be
--#  useful, but WITHOUT ANY WARRANTY; without even the implied warranty
--#  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--#  GNU Lesser Public License for more details.
--#
--#  You should have received a copy of the GNU Lesser Public License
--#  along with the ZBar Bar Code Reader; if not, write to the Free
--#  Software Foundation, Inc., 51 Franklin St, Fifth Floor,
--#  Boston, MA  02110-1301  USA
--#
--#  http://sourceforge.net/projects/zbar
--#------------------------------------------------------------------------
--use warnings;
--use strict;
--
--use Barcode::ZBar;
--use Image::Magick;
--
--warn("no input files specified?\n") if(!@ARGV);
--
--# running output document
--my $out = undef;
--
--# barcode scanner
--my $scanner = Barcode::ZBar::ImageScanner->new();
--
--foreach my $file (@ARGV) {
--    print "scanning from \"$file\"\n";
--    my $imseq = Image::Magick->new();
--    my $err = $imseq->Read($file);
--    warn($err) if($err);
--
--    foreach my $page (@$imseq) {
--        # convert ImageMagick page to ZBar image
--        my $zimg = Barcode::ZBar::Image->new();
--        $zimg->set_format('Y800');
--        $zimg->set_size($page->Get(qw(columns rows)));
--        $zimg->set_data($page->Clone()->ImageToBlob(magick => 'GRAY', depth => 8));
--
--        # scan for barcodes
--        if($scanner->scan_image($zimg)) {
--            # write out previous document
--            $out->write() if($out);
--
--            # use first symbol found to name next image (FIXME sanitize)
--            my $data = ($zimg->get_symbols())[0]->get_data();
--            my $idx = $page->Get('scene') + 1;
--            print "splitting $data from page $idx\n";
--
--            # create new output document
--            $out = Image::Magick->new(filename => $data);
--        }
--
--        # append this page to current output
--        push(@$out, $page) if($out);
--    }
--
--    # write out final document
--    $out->write() if($out);
--}
-diff -r 563557a923d0 examples/processor.c
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/examples/processor.c	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,47 @@
-+#include <stdio.h>
-+#include <zbar.h>
-+
-+static void my_handler (zbar_image_t *image,
-+                        const void *userdata)
-+{
-+    /* extract results */
-+    const zbar_symbol_t *symbol = zbar_image_first_symbol(image);
-+    for(; symbol; symbol = zbar_symbol_next(symbol)) {
-+        /* do something useful with results */
-+        zbar_symbol_type_t typ = zbar_symbol_get_type(symbol);
-+        const char *data = zbar_symbol_get_data(symbol);
-+        printf("decoded %s symbol \"%s\"\n",
-+               zbar_get_symbol_name(typ), data);
-+    }
-+}
-+
-+int main (int argc, char **argv)
-+{
-+    const char *device = "/dev/video0";
-+
-+    /* create a Processor */
-+    zbar_processor_t *proc = zbar_processor_create(1);
-+
-+    /* configure the Processor */
-+    zbar_processor_set_config(proc, 0, ZBAR_CFG_ENABLE, 1);
-+
-+    /* initialize the Processor */
-+    if(argc > 1)
-+        device = argv[1];
-+    zbar_processor_init(proc, device, 1);
-+
-+    /* setup a callback */
-+    zbar_processor_set_data_handler(proc, my_handler, NULL);
-+
-+    /* enable the preview window */
-+    zbar_processor_set_visible(proc, 1);
-+    zbar_processor_set_active(proc, 1);
-+
-+    /* keep scanning until user provides key/mouse input */
-+    zbar_processor_user_wait(proc, -1);
-+
-+    /* clean up */
-+    zbar_processor_destroy(proc);
-+
-+    return(0);
-+}
-diff -r 563557a923d0 examples/processor.cpp
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/examples/processor.cpp	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,45 @@
-+#include <iostream>
-+#include <zbar.h>
-+
-+using namespace std;
-+using namespace zbar;
-+
-+class MyHandler : public Image::Handler
-+{
-+    void image_callback (Image &image)
-+    {
-+        for(SymbolIterator symbol = image.symbol_begin();
-+            symbol != image.symbol_end();
-+            ++symbol)
-+            cout << "decoded " << symbol->get_type_name() << " symbol "
-+                 << "\"" << symbol->get_data() << "\"" << endl;
-+    }
-+};
-+
-+int main (int argc, char **argv)
-+{
-+    // create and initialize a Processor
-+    const char *device = "/dev/video0";
-+    if(argc > 1)
-+        device = argv[1];
-+    Processor proc(true, device);
-+
-+    // configure the Processor
-+    proc.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
-+
-+    // setup a callback
-+    MyHandler my_handler;
-+    proc.set_handler(my_handler);
-+
-+    // enable the preview window
-+    proc.set_visible();
-+    proc.set_active();
-+
-+    try {
-+        // keep scanning until user provides key/mouse input
-+        proc.user_wait();
-+    }
-+    catch(ClosedError &e) {
-+    }
-+    return(0);
-+}
-diff -r 563557a923d0 examples/processor.pl
---- a/examples/processor.pl	Tue Oct 27 11:25:59 2009 -0400
-+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
-@@ -1,35 +0,0 @@
--#!/usr/bin/env perl
--use warnings;
--use strict;
--require Barcode::ZBar;
--
--# create a Processor
--my $proc = Barcode::ZBar::Processor->new();
--
--# configure the Processor
--$proc->parse_config("enable");
--
--# initialize the Processor
--$proc->init($ARGV[0] || '/dev/video0');
--
--# setup a callback
--sub my_handler {
--    my ($proc, $image, $closure) = @_;
--
--    # extract results
--    foreach my $symbol ($proc->get_results()) {
--        # do something useful with results
--        print('decoded ' . $symbol->get_type() .
--              ' symbol "' . $symbol->get_data() . "\"\n");
--    }
--}
--$proc->set_data_handler(\&my_handler);
--
--# enable the preview window
--$proc->set_visible();
--
--# initiate scanning
--$proc->set_active();
--
--# keep scanning until user provides key/mouse input
--$proc->user_wait();
-diff -r 563557a923d0 examples/processor.py
---- a/examples/processor.py	Tue Oct 27 11:25:59 2009 -0400
-+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
-@@ -1,35 +0,0 @@
--#!/usr/bin/python
--from sys import argv
--import zbar
--
--# create a Processor
--proc = zbar.Processor()
--
--# configure the Processor
--proc.parse_config('enable')
--
--# initialize the Processor
--device = '/dev/video0'
--if len(argv) > 1:
--    device = argv[1]
--proc.init(device)
--
--# setup a callback
--def my_handler(proc, image, closure):
--    # extract results
--    for symbol in image.symbols:
--        # do something useful with results
--        print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data
--
--proc.set_data_handler(my_handler)
--
--# enable the preview window
--proc.visible = True
--
--# initiate scanning
--proc.active = True
--try:
--    # keep scanning until user provides key/mouse input
--    proc.user_wait()
--except zbar.WindowClosed, e:
--    pass
-diff -r 563557a923d0 examples/read_one.pl
---- a/examples/read_one.pl	Tue Oct 27 11:25:59 2009 -0400
-+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
-@@ -1,29 +0,0 @@
--#!/usr/bin/env perl
--use warnings;
--use strict;
--require Barcode::ZBar;
--
--# create a Processor
--my $proc = Barcode::ZBar::Processor->new();
--
--# configure the Processor
--$proc->parse_config("enable");
--
--# initialize the Processor
--$proc->init($ARGV[0] || '/dev/video0');
--
--# enable the preview window
--$proc->set_visible();
--
--# read at least one barcode (or until window closed)
--$proc->process_one();
--
--# hide the preview window
--$proc->set_visible(0);
--
--# extract results
--foreach my $symbol ($proc->get_results()) {
--  # do something useful with results
--  print('decoded ' . $symbol->get_type() .
--        ' symbol "' . $symbol->get_data() . "\"\n");
--}
-diff -r 563557a923d0 examples/read_one.py
---- a/examples/read_one.py	Tue Oct 27 11:25:59 2009 -0400
-+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
-@@ -1,29 +0,0 @@
--#!/usr/bin/python
--from sys import argv
--import zbar
--
--# create a Processor
--proc = zbar.Processor()
--
--# configure the Processor
--proc.parse_config('enable')
--
--# initialize the Processor
--device = '/dev/video0'
--if len(argv) > 1:
--    device = argv[1]
--proc.init(device)
--
--# enable the preview window
--proc.visible = True
--
--# read at least one barcode (or until window closed)
--proc.process_one()
--
--# hide the preview window
--proc.visible = False
--
--# extract results
--for symbol in proc.results:
--    # do something useful with results
--    print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data
-diff -r 563557a923d0 examples/scan_image.c
---- a/examples/scan_image.c	Tue Oct 27 11:25:59 2009 -0400
-+++ b/examples/scan_image.c	Fri Feb 22 08:54:29 2013 -0300
-@@ -3,6 +3,20 @@
- #include <png.h>
- #include <zbar.h>
- 
-+#if !defined(PNG_LIBPNG_VER) || \
-+    PNG_LIBPNG_VER < 10018 ||   \
-+    (PNG_LIBPNG_VER > 10200 &&  \
-+     PNG_LIBPNG_VER < 10209)
-+  /* Changes to Libpng from version 1.2.42 to 1.4.0 (January 4, 2010)
-+   * ...
-+   * 2. m. The function png_set_gray_1_2_4_to_8() was removed. It has been
-+   *       deprecated since libpng-1.0.18 and 1.2.9, when it was replaced with
-+   *       png_set_expand_gray_1_2_4_to_8() because the former function also
-+   *       expanded palette images.
-+   */
-+# define png_set_expand_gray_1_2_4_to_8 png_set_gray_1_2_4_to_8
-+#endif
-+
- zbar_image_scanner_t *scanner = NULL;
- 
- /* to complete a runnable example, this abbreviated implementation of
-@@ -30,7 +44,7 @@
-     if(color & PNG_COLOR_TYPE_PALETTE)
-         png_set_palette_to_rgb(png);
-     if(color == PNG_COLOR_TYPE_GRAY && bits < 8)
--        png_set_gray_1_2_4_to_8(png);
-+        png_set_expand_gray_1_2_4_to_8(png);
-     if(bits == 16)
-         png_set_strip_16(png);
-     if(color & PNG_COLOR_MASK_ALPHA)
-@@ -65,7 +79,7 @@
- 
-     /* wrap image data */
-     zbar_image_t *image = zbar_image_create();
--    zbar_image_set_format(image, *(int*)"Y800");
-+    zbar_image_set_format(image, zbar_fourcc('Y','8','0','0'));
-     zbar_image_set_size(image, width, height);
-     zbar_image_set_data(image, raw, width * height, zbar_image_free_data);
- 
-diff -r 563557a923d0 examples/scan_image.pl
---- a/examples/scan_image.pl	Tue Oct 27 11:25:59 2009 -0400
-+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
-@@ -1,37 +0,0 @@
--#!/usr/bin/perl
--use warnings;
--use strict;
--require Image::Magick;
--require Barcode::ZBar;
--
--$ARGV[0] || die;
--
--# create a reader
--my $scanner = Barcode::ZBar::ImageScanner->new();
--
--# configure the reader
--$scanner->parse_config("enable");
--
--# obtain image data
--my $magick = Image::Magick->new();
--$magick->Read($ARGV[0]) && die;
--my $raw = $magick->ImageToBlob(magick => 'GRAY', depth => 8);
--
--# wrap image data
--my $image = Barcode::ZBar::Image->new();
--$image->set_format('Y800');
--$image->set_size($magick->Get(qw(columns rows)));
--$image->set_data($raw);
--
--# scan the image for barcodes
--my $n = $scanner->scan_image($image);
--
--# extract results
--foreach my $symbol ($image->get_symbols()) {
--    # do something useful with results
--    print('decoded ' . $symbol->get_type() .
--          ' symbol "' . $symbol->get_data() . "\"\n");
--}
--
--# clean up
--undef($image);
-diff -r 563557a923d0 examples/scan_image.py
---- a/examples/scan_image.py	Tue Oct 27 11:25:59 2009 -0400
-+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
-@@ -1,31 +0,0 @@
--#!/usr/bin/python
--from sys import argv
--import zbar
--import Image
--
--if len(argv) < 2: exit(1)
--
--# create a reader
--scanner = zbar.ImageScanner()
--
--# configure the reader
--scanner.parse_config('enable')
--
--# obtain image data
--pil = Image.open(argv[1]).convert('L')
--width, height = pil.size
--raw = pil.tostring()
--
--# wrap image data
--image = zbar.Image(width, height, 'Y800', raw)
--
--# scan the image for barcodes
--scanner.scan(image)
--
--# extract results
--for symbol in image:
--    # do something useful with results
--    print 'decoded', symbol.type, 'symbol', '"%s"' % symbol.data
--
--# clean up
--del(image)
-diff -r 563557a923d0 examples/upcrpc.pl
---- a/examples/upcrpc.pl	Tue Oct 27 11:25:59 2009 -0400
-+++ b/examples/upcrpc.pl	Fri Feb 22 08:54:29 2013 -0300
-@@ -3,7 +3,7 @@
- use strict;
- use Frontier::Client;
- use Data::Dumper;
--my $s = Frontier::Client->new('url' => 'http://dev.upcdatabase.com/rpc');
-+my $s = Frontier::Client->new('url' => 'http://www.upcdatabase.com/rpc');
- 
- $| = 1; # autoflush
- 
-diff -r 563557a923d0 examples/upcrpc.py
---- a/examples/upcrpc.py	Tue Oct 27 11:25:59 2009 -0400
-+++ b/examples/upcrpc.py	Fri Feb 22 08:54:29 2013 -0300
-@@ -2,7 +2,7 @@
- from xmlrpclib import ServerProxy
- import sys, re
- 
--server = ServerProxy("http://dev.upcdatabase.com/rpc")
-+server = ServerProxy("http://www.upcdatabase.com/rpc")
- ean_re = re.compile(r'^(UPC-A:|EAN-13:)?(\d{11,13})$', re.M)
- 
- def lookup(decode):
-diff -r 563557a923d0 gtk/zbargtk.c
---- a/gtk/zbargtk.c	Tue Oct 27 11:25:59 2009 -0400
-+++ b/gtk/zbargtk.c	Fri Feb 22 08:54:29 2013 -0300
-@@ -1,5 +1,5 @@
- /*------------------------------------------------------------------------
-- *  Copyright 2008-2009 (c) Jeff Brown <spadix at users.sourceforge.net>
-+ *  Copyright 2008-2010 (c) Jeff Brown <spadix at users.sourceforge.net>
-  *
-  *  This file is part of the ZBar Bar Code Reader.
-  *
-@@ -35,11 +35,6 @@
- #define DEFAULT_WIDTH 640
- #define DEFAULT_HEIGHT 480
- 
--/* adapted from v4l2 spec */
--#define fourcc(a, b, c, d)                      \
--    ((long)(a) | ((long)(b) << 8) |             \
--     ((long)(c) << 16) | ((long)(d) << 24))
--
- enum {
-     DECODED,
-     DECODED_TEXT,
-@@ -88,15 +83,15 @@
- 
-     /* these are all guesses... */
-     if(nchannels == 3 && bps == 8)
--        type = fourcc('R','G','B','3');
-+        type = zbar_fourcc('R','G','B','3');
-     else if(nchannels == 4 && bps == 8)
--        type = fourcc('B','G','R','4'); /* FIXME alpha flipped?! */
-+        type = zbar_fourcc('B','G','R','4'); /* FIXME alpha flipped?! */
-     else if(nchannels == 1 && bps == 8)
--        type = fourcc('Y','8','0','0');
-+        type = zbar_fourcc('Y','8','0','0');
-     else if(nchannels == 3 && bps == 5)
--        type = fourcc('R','G','B','R');
-+        type = zbar_fourcc('R','G','B','R');
-     else if(nchannels == 3 && bps == 4)
--        type = fourcc('R','4','4','4'); /* FIXME maybe? */
-+        type = zbar_fourcc('R','4','4','4'); /* FIXME maybe? */
-     else {
-         g_warning("unsupported combination: nchannels=%d bps=%d\n",
-                   nchannels, bps);
-@@ -142,10 +137,6 @@
- 
-     gdk_threads_enter();
- 
--    zbar->req_width = DEFAULT_WIDTH;
--    zbar->req_height = DEFAULT_HEIGHT;
--    gtk_widget_queue_resize(GTK_WIDGET(self));
--
-     zbar->video_opened = FALSE;
-     if(zbar->thread)
-         g_object_notify(G_OBJECT(self), "video-opened");
-@@ -184,6 +175,10 @@
-          */
-         gdk_threads_enter();
- 
-+        if(zbar->video_width && zbar->video_height)
-+            zbar_video_request_size(zbar->video,
-+                                    zbar->video_width, zbar->video_height);
-+
-         video_opened = !zbar_negotiate_format(zbar->video, zbar->window);
- 
-         if(video_opened) {
-@@ -209,7 +204,7 @@
-     if(!image)
-         return(-1);
- 
--    zbar_image_t *tmp = zbar_image_convert(image, fourcc('Y','8','0','0'));
-+    zbar_image_t *tmp = zbar_image_convert(image, zbar_fourcc('Y','8','0','0'));
-     if(!tmp)
-         return(-1);
- 
-@@ -236,7 +231,6 @@
- 
-                 /* FIXME skip this when unconnected? */
-                 gchar *text = g_strconcat(zbar_get_symbol_name(type),
--                                          zbar_get_addon_name(type),
-                                           ":",
-                                           data,
-                                           NULL);
-@@ -560,6 +554,19 @@
-     return(zbar->video_opened);
- }
- 
-+void zbar_gtk_request_video_size (ZBarGtk *self,
-+                                  int width,
-+                                  int height)
-+{
-+    if(!self->_private || width < 0 || height < 0)
-+        return;
-+    ZBarGtkPrivate *zbar = ZBAR_GTK_PRIVATE(self->_private);
-+
-+    zbar->req_width = zbar->video_width = width;
-+    zbar->req_height = zbar->video_height = height;
-+    gtk_widget_queue_resize(GTK_WIDGET(self));
-+}
-+
- static void zbar_gtk_set_property (GObject *object,
-                                    guint prop_id,
-                                    const GValue *value,
-@@ -613,8 +620,8 @@
-     zbar->window = zbar_window_create();
-     g_assert(zbar->window);
- 
--    zbar->req_width = DEFAULT_WIDTH;
--    zbar->req_height = DEFAULT_HEIGHT;
-+    zbar->req_width = zbar->video_width = DEFAULT_WIDTH;
-+    zbar->req_height = zbar->video_width = DEFAULT_HEIGHT;
- 
-     /* spawn a thread to handle decoding and video */
-     zbar->queue = g_async_queue_new();
-diff -r 563557a923d0 gtk/zbargtkprivate.h
---- a/gtk/zbargtkprivate.h	Tue Oct 27 11:25:59 2009 -0400
-+++ b/gtk/zbargtkprivate.h	Fri Feb 22 08:54:29 2013 -0300
-@@ -71,6 +71,7 @@
-      * protected by main gui lock
-      */
-     unsigned req_width, req_height;
-+    unsigned video_width, video_height;
-     gboolean video_opened;
- 
-     /* window is shared: owned by main gui thread.
-diff -r 563557a923d0 include/zbar.h
---- a/include/zbar.h	Tue Oct 27 11:25:59 2009 -0400
-+++ b/include/zbar.h	Fri Feb 22 08:54:29 2013 -0300
-@@ -1,5 +1,5 @@
- /*------------------------------------------------------------------------
-- *  Copyright 2007-2009 (c) Jeff Brown <spadix at users.sourceforge.net>
-+ *  Copyright 2007-2010 (c) Jeff Brown <spadix at users.sourceforge.net>
-  *
-  *  This file is part of the ZBar Bar Code Reader.
-  *
-@@ -86,23 +86,58 @@
- typedef enum zbar_symbol_type_e {
-     ZBAR_NONE        =      0,  /**< no symbol decoded */
-     ZBAR_PARTIAL     =      1,  /**< intermediate status */
-+    ZBAR_EAN2        =      2,  /**< GS1 2-digit add-on */
-+    ZBAR_EAN5        =      5,  /**< GS1 5-digit add-on */
-     ZBAR_EAN8        =      8,  /**< EAN-8 */
-     ZBAR_UPCE        =      9,  /**< UPC-E */
-     ZBAR_ISBN10      =     10,  /**< ISBN-10 (from EAN-13). @since 0.4 */
-     ZBAR_UPCA        =     12,  /**< UPC-A */
-     ZBAR_EAN13       =     13,  /**< EAN-13 */
-     ZBAR_ISBN13      =     14,  /**< ISBN-13 (from EAN-13). @since 0.4 */
-+    ZBAR_COMPOSITE   =     15,  /**< EAN/UPC composite */
-     ZBAR_I25         =     25,  /**< Interleaved 2 of 5. @since 0.4 */
-+    ZBAR_DATABAR     =     34,  /**< GS1 DataBar (RSS). @since 0.11 */
-+    ZBAR_DATABAR_EXP =     35,  /**< GS1 DataBar Expanded. @since 0.11 */
-+    ZBAR_CODABAR     =     38,  /**< Codabar. @since 0.11 */
-     ZBAR_CODE39      =     39,  /**< Code 39. @since 0.4 */
-     ZBAR_PDF417      =     57,  /**< PDF417. @since 0.6 */
-     ZBAR_QRCODE      =     64,  /**< QR Code. @since 0.10 */
-+    ZBAR_CODE93      =     93,  /**< Code 93. @since 0.11 */
-     ZBAR_CODE128     =    128,  /**< Code 128 */
--    ZBAR_SYMBOL      = 0x00ff,  /**< mask for base symbol type */
--    ZBAR_ADDON2      = 0x0200,  /**< 2-digit add-on flag */
--    ZBAR_ADDON5      = 0x0500,  /**< 5-digit add-on flag */
--    ZBAR_ADDON       = 0x0700,  /**< add-on flag mask */
-+
-+    /** mask for base symbol type.
-+     * @deprecated in 0.11, remove this from existing code
-+     */
-+    ZBAR_SYMBOL      = 0x00ff,
-+    /** 2-digit add-on flag.
-+     * @deprecated in 0.11, a ::ZBAR_EAN2 component is used for
-+     * 2-digit GS1 add-ons
-+     */
-+    ZBAR_ADDON2      = 0x0200,
-+    /** 5-digit add-on flag.
-+     * @deprecated in 0.11, a ::ZBAR_EAN5 component is used for
-+     * 5-digit GS1 add-ons
-+     */
-+    ZBAR_ADDON5      = 0x0500,
-+    /** add-on flag mask.
-+     * @deprecated in 0.11, GS1 add-ons are represented using composite
-+     * symbols of type ::ZBAR_COMPOSITE; add-on components use ::ZBAR_EAN2
-+     * or ::ZBAR_EAN5
-+     */
-+    ZBAR_ADDON       = 0x0700,
- } zbar_symbol_type_t;
- 
-+/** decoded symbol coarse orientation.
-+ * @since 0.11
-+ */
-+typedef enum zbar_orientation_e {
-+    ZBAR_ORIENT_UNKNOWN = -1,   /**< unable to determine orientation */
-+    ZBAR_ORIENT_UP,             /**< upright, read left to right */
-+    ZBAR_ORIENT_RIGHT,          /**< sideways, read top to bottom */
-+    ZBAR_ORIENT_DOWN,           /**< upside-down, read right to left */
-+    ZBAR_ORIENT_LEFT,           /**< sideways, read bottom to top */
-+} zbar_orientation_t;
-+
- /** error codes. */
- typedef enum zbar_error_e {
-     ZBAR_OK = 0,                /**< no error */
-@@ -133,12 +168,33 @@
-     ZBAR_CFG_MIN_LEN = 0x20,    /**< minimum data length for valid decode */
-     ZBAR_CFG_MAX_LEN,           /**< maximum data length for valid decode */
- 
-+    ZBAR_CFG_UNCERTAINTY = 0x40,/**< required video consistency frames */
-+
-     ZBAR_CFG_POSITION = 0x80,   /**< enable scanner to collect position data */
- 
-     ZBAR_CFG_X_DENSITY = 0x100, /**< image scanner vertical scan density */
-     ZBAR_CFG_Y_DENSITY,         /**< image scanner horizontal scan density */
- } zbar_config_t;
- 
-+/** decoder symbology modifier flags.
-+ * @since 0.11
-+ */
-+typedef enum zbar_modifier_e {
-+    /** barcode tagged as GS1 (EAN.UCC) reserved
-+     * (eg, FNC1 before first data character).
-+     * data may be parsed as a sequence of GS1 AIs
-+     */
-+    ZBAR_MOD_GS1 = 0,
-+
-+    /** barcode tagged as AIM reserved
-+     * (eg, FNC1 after first character or digit pair)
-+     */
-+    ZBAR_MOD_AIM,
-+
-+    /** number of modifiers */
-+    ZBAR_MOD_NUM,
-+} zbar_modifier_t;
-+
- /** retrieve runtime library version information.
-  * @param major set to the running major version (unless NULL)
-  * @param minor set to the running minor version (unless NULL)
-@@ -168,9 +224,32 @@
-  * @param sym symbol type encoding
-  * @returns static string name for any addon, or the empty string
-  * if no addons were decoded
-+ * @deprecated in 0.11
-  */
- extern const char *zbar_get_addon_name(zbar_symbol_type_t sym);
- 
-+/** retrieve string name for configuration setting.
-+ * @param config setting to name
-+ * @returns static string name for config,
-+ * or the empty string if value is not a known config
-+ */
-+extern const char *zbar_get_config_name(zbar_config_t config);
-+
-+/** retrieve string name for modifier.
-+ * @param modifier flag to name
-+ * @returns static string name for modifier,
-+ * or the empty string if the value is not a known flag
-+ */
-+extern const char *zbar_get_modifier_name(zbar_modifier_t modifier);
-+
-+/** retrieve string name for orientation.
-+ * @param orientation orientation encoding
-+ * @returns the static string name for the specified orientation,
-+ * or "UNKNOWN" if the orientation is not recognized
-+ * @since 0.11
-+ */
-+extern const char *zbar_get_orientation_name(zbar_orientation_t orientation);
-+
- /** parse a configuration string of the form "[symbology.]config[=value]".
-  * the config must match one of the recognized names.
-  * the symbology, if present, must match one of the recognized names.
-@@ -184,6 +263,30 @@
-                              zbar_config_t *config,
-                              int *value);
- 
-+/** consistently compute fourcc values across architectures
-+ * (adapted from v4l2 specification)
-+ * @since 0.11
-+ */
-+#define zbar_fourcc(a, b, c, d)                 \
-+        ((unsigned long)(a) |                   \
-+         ((unsigned long)(b) << 8) |            \
-+         ((unsigned long)(c) << 16) |           \
-+         ((unsigned long)(d) << 24))
-+
-+/** parse a fourcc string into its encoded integer value.
-+ * @since 0.11
-+ */
-+static inline unsigned long zbar_fourcc_parse (const char *format)
-+{
-+    unsigned long fourcc = 0;
-+    if(format) {
-+        int i;
-+        for(i = 0; i < 4 && format[i]; i++)
-+            fourcc |= ((unsigned long)format[i]) << (i * 8);
-+    }
-+    return(fourcc);
-+}
-+
- /** @internal type unsafe error API (don't use) */
- extern int _zbar_error_spew(const void *object,
-                             int verbosity);
-@@ -229,6 +332,20 @@
-  */
- extern zbar_symbol_type_t zbar_symbol_get_type(const zbar_symbol_t *symbol);
- 
-+/** retrieve symbology boolean config settings.
-+ * @returns a bitmask indicating which configs were set for the detected
-+ * symbology during decoding.
-+ * @since 0.11
-+ */
-+extern unsigned int zbar_symbol_get_configs(const zbar_symbol_t *symbol);
-+
-+/** retrieve symbology modifier flag settings.
-+ * @returns a bitmask indicating which characteristics were detected
-+ * during decoding.
-+ * @since 0.11
-+ */
-+extern unsigned int zbar_symbol_get_modifiers(const zbar_symbol_t *symbol);
-+
- /** retrieve data decoded from symbol.
-  * @returns the data string
-  */
-@@ -284,6 +401,14 @@
- extern int zbar_symbol_get_loc_y(const zbar_symbol_t *symbol,
-                                  unsigned index);
- 
-+/** retrieve general orientation of decoded symbol.
-+ * @returns a coarse, axis-aligned indication of symbol orientation or
-+ * ::ZBAR_ORIENT_UNKNOWN if unknown
-+ * @since 0.11
-+ */
-+extern zbar_orientation_t
-+zbar_symbol_get_orientation(const zbar_symbol_t *symbol);
-+
- /** iterate the set to which this symbol belongs (there can be only one).
-  * @returns the next symbol in the set, or
-  * @returns NULL when no more results are available
-@@ -357,6 +482,14 @@
- extern const zbar_symbol_t*
- zbar_symbol_set_first_symbol(const zbar_symbol_set_t *symbols);
- 
-+/** raw result iterator.
-+ * @returns the first decoded symbol result in a set, *before* filtering
-+ * @returns NULL if the set is empty
-+ * @since 0.11
-+ */
-+extern const zbar_symbol_t*
-+zbar_symbol_set_first_unfiltered(const zbar_symbol_set_t *symbols);
-+
- /*@}*/
- 
- /*------------------------------------------------------------*/
-@@ -456,6 +589,25 @@
-  */
- extern unsigned zbar_image_get_height(const zbar_image_t *image);
- 
-+/** retrieve both dimensions of the image.
-+ * fills in the width and height in samples
-+ */
-+extern void zbar_image_get_size(const zbar_image_t *image,
-+                                unsigned *width,
-+                                unsigned *height);
-+
-+/** retrieve the crop rectangle.
-+ * fills in the image coordinates of the upper left corner and size
-+ * of an axis-aligned rectangular area of the image that will be scanned.
-+ * defaults to the full image
-+ * @since 0.11
-+ */
-+extern void zbar_image_get_crop(const zbar_image_t *image,
-+                                unsigned *x,
-+                                unsigned *y,
-+                                unsigned *width,
-+                                unsigned *height);
-+
- /** return the image sample data.  the returned data buffer is only
-  * valid until zbar_image_destroy() is called
-  */
-@@ -505,12 +657,24 @@
-                                     unsigned sequence_num);
- 
- /** specify the pixel size of the image.
-+ * @note this also resets the crop rectangle to the full image
-+ * (0, 0, width, height)
-  * @note this does not affect the data!
-  */
- extern void zbar_image_set_size(zbar_image_t *image,
-                                 unsigned width,
-                                 unsigned height);
- 
-+/** specify a rectangular region of the image to scan.
-+ * the rectangle will be clipped to the image boundaries.
-+ * defaults to the full image specified by zbar_image_set_size()
-+ */
-+extern void zbar_image_set_crop(zbar_image_t *image,
-+                                unsigned x,
-+                                unsigned y,
-+                                unsigned width,
-+                                unsigned height);
-+
- /** specify image sample data.  when image data is no longer needed by
-  * the library the specific data cleanup handler will be called
-  * (unless NULL)
-@@ -1148,6 +1312,14 @@
-            zbar_decoder_set_config(decoder, sym, cfg, val));
- }
- 
-+/** retrieve symbology boolean config settings.
-+ * @returns a bitmask indicating which configs are currently set for the
-+ * specified symbology.
-+ * @since 0.11
-+ */
-+extern unsigned int zbar_decoder_get_configs(const zbar_decoder_t *decoder,
-+                                             zbar_symbol_type_t symbology);
-+
- /** clear all decoder state.
-  * any partial symbols are flushed
-  */
-@@ -1195,6 +1367,20 @@
- extern zbar_symbol_type_t
- zbar_decoder_get_type(const zbar_decoder_t *decoder);
- 
-+/** retrieve modifier flags for the last decoded symbol.
-+ * @returns a bitmask indicating which characteristics were detected
-+ * during decoding.
-+ * @since 0.11
-+ */
-+extern unsigned int zbar_decoder_get_modifiers(const zbar_decoder_t *decoder);
-+
-+/** retrieve last decode direction.
-+ * @returns 1 for forward and -1 for reverse
-+ * @returns 0 if the decode direction is unknown or does not apply
-+ * @since 0.11
-+ */
-+extern int zbar_decoder_get_direction(const zbar_decoder_t *decoder);
-+
- /** setup data handler callback.
-  * the registered function will be called by the decoder
-  * just before zbar_decode_width() returns a non-zero value.
-diff -r 563557a923d0 include/zbar/Decoder.h
---- a/include/zbar/Decoder.h	Tue Oct 27 11:25:59 2009 -0400
-+++ b/include/zbar/Decoder.h	Fri Feb 22 08:54:29 2013 -0300
-@@ -1,5 +1,5 @@
- //------------------------------------------------------------------------
--//  Copyright 2007-2009 (c) Jeff Brown <spadix at users.sourceforge.net>
-+//  Copyright 2007-2010 (c) Jeff Brown <spadix at users.sourceforge.net>
- //
- //  This file is part of the ZBar Bar Code Reader.
- //
-@@ -115,6 +115,7 @@
- 
-     /// retrieve string name for last decode addon.
-     /// see zbar_get_addon_name()
-+    /// @deprecated in 0.11
-     const char *get_addon_name () const
-     {
-         return(zbar_get_addon_name(zbar_decoder_get_type(_decoder)));
-@@ -149,6 +150,14 @@
-         return(zbar_decoder_get_data_length(_decoder));
-     }
- 
-+    /// retrieve last decode direction.
-+    /// see zbar_decoder_get_direction()
-+    /// @since 0.11
-+    int get_direction() const
-+    {
-+        return(zbar_decoder_get_direction(_decoder));
-+    }
-+
-     /// setup callback to handle result data.
-     void set_handler (Handler &handler)
-     {
-diff -r 563557a923d0 include/zbar/Image.h
---- a/include/zbar/Image.h	Tue Oct 27 11:25:59 2009 -0400
-+++ b/include/zbar/Image.h	Fri Feb 22 08:54:29 2013 -0300
-@@ -1,5 +1,5 @@
- //------------------------------------------------------------------------
--//  Copyright 2007-2009 (c) Jeff Brown <spadix at users.sourceforge.net>
-+//  Copyright 2007-2010 (c) Jeff Brown <spadix at users.sourceforge.net>
- //
- //  This file is part of the ZBar Bar Code Reader.
- //
-@@ -67,7 +67,12 @@
-         {
-             if(userdata) {
-                 Image *image = (Image*)zbar_image_get_userdata(zimg);
--                ((Handler*)userdata)->image_callback(*image);
-+                if(image)
-+                    ((Handler*)userdata)->image_callback(*image);
-+                else {
-+                    Image tmp(zimg, 1);
-+                    ((Handler*)userdata)->image_callback(tmp);
-+                }
-             }
-         }
-     };
-@@ -110,6 +115,8 @@
- 
-     ~Image ()
-     {
-+        if(zbar_image_get_userdata(_img) == this)
-+            zbar_image_set_userdata(_img, NULL);
-         zbar_image_ref(_img, -1);
-     }
- 
-@@ -143,12 +150,7 @@
-     /// see zbar_image_set_format()
-     void set_format (const std::string& format)
-     {
--        if(format.length() != 4)
--            throw FormatError();
--        unsigned long fourcc = ((format[0] & 0xff) |
--                                ((format[1] & 0xff) << 8) |
--                                ((format[2] & 0xff) << 16) |
--                                ((format[3] & 0xff) << 24));
-+        unsigned long fourcc = zbar_fourcc_parse(format.c_str());
-         zbar_image_set_format(_img, fourcc);
-     }
- 
-@@ -183,6 +185,15 @@
-         return(zbar_image_get_height(_img));
-     }
- 
-+    /// retrieve both dimensions of the image.
-+    /// see zbar_image_get_size()
-+    /// @since 0.11
-+    void get_size (unsigned &width,
-+                   unsigned &height) const
-+    {
-+        zbar_image_get_size(_img, &width, &height);
-+    }
-+
-     /// specify the pixel size of the image.
-     /// see zbar_image_set_size()
-     void set_size (unsigned width,
-@@ -191,6 +202,26 @@
-         zbar_image_set_size(_img, width, height);
-     }
- 
-+    /// retrieve the scan crop rectangle.
-+    /// see zbar_image_get_crop()
-+    void get_crop (unsigned &x,
-+                   unsigned &y,
-+                   unsigned &width,
-+                   unsigned &height) const
-+    {
-+        zbar_image_get_crop(_img, &x, &y, &width, &height);
-+    }
-+
-+    /// set the scan crop rectangle.
-+    /// see zbar_image_set_crop()
-+    void set_crop (unsigned x,
-+                   unsigned y,
-+                   unsigned width,
-+                   unsigned height)
-+    {
-+        zbar_image_set_crop(_img, x, y, width, height);
-+    }
-+
-     /// return the image sample data.
-     /// see zbar_image_get_data()
-     const void *get_data () const
-@@ -224,6 +255,15 @@
-         throw FormatError();
-     }
- 
-+    /// image format conversion.
-+    /// see zbar_image_convert()
-+    /// @since 0.11
-+    Image convert (std::string format) const
-+    {
-+        unsigned long fourcc = zbar_fourcc_parse(format.c_str());
-+        return(convert(fourcc));
-+    }
-+
-     /// image format conversion with crop/pad.
-     /// see zbar_image_convert_resize()
-     /// @since 0.4
-@@ -278,7 +318,6 @@
-     {
-         // by default nothing is cleaned
-         assert(img);
--        assert(zbar_image_get_userdata(img));
-     }
- 
- private:
-diff -r 563557a923d0 include/zbar/Processor.h
---- a/include/zbar/Processor.h	Tue Oct 27 11:25:59 2009 -0400
-+++ b/include/zbar/Processor.h	Fri Feb 22 08:54:29 2013 -0300
-@@ -1,5 +1,5 @@
- //------------------------------------------------------------------------
--//  Copyright 2007-2009 (c) Jeff Brown <spadix at users.sourceforge.net>
-+//  Copyright 2007-2010 (c) Jeff Brown <spadix at users.sourceforge.net>
- //
- //  This file is part of the ZBar Bar Code Reader.
- //
-@@ -183,8 +183,8 @@
-     void force_format (std::string& input_format,
-                        std::string& output_format)
-     {
--        unsigned long ifourcc = *(unsigned long*)input_format.c_str();
--        unsigned long ofourcc = *(unsigned long*)output_format.c_str();
-+        unsigned long ifourcc = zbar_fourcc_parse(input_format.c_str());
-+        unsigned long ofourcc = zbar_fourcc_parse(output_format.c_str());
-         if(zbar_processor_force_format(_processor, ifourcc, ofourcc))
-             throw_exception(_processor);
-     }
-diff -r 563557a923d0 include/zbar/QZBarImage.h
---- a/include/zbar/QZBarImage.h	Tue Oct 27 11:25:59 2009 -0400
-+++ b/include/zbar/QZBarImage.h	Fri Feb 22 08:54:29 2013 -0300
-@@ -1,5 +1,5 @@
- //------------------------------------------------------------------------
--//  Copyright 2008-2009 (c) Jeff Brown <spadix at users.sourceforge.net>
-+//  Copyright 2008-2010 (c) Jeff Brown <spadix at users.sourceforge.net>
- //
- //  This file is part of the ZBar Bar Code Reader.
- //
-@@ -53,7 +53,7 @@
-         unsigned width = bpl / 4;
-         unsigned height = qimg.height();
-         set_size(width, height);
--        set_format('B' | ('G' << 8) | ('R' << 16) | ('4' << 24));
-+        set_format(zbar_fourcc('B','G','R','4'));
-         unsigned long datalen = qimg.numBytes();
-         set_data(qimg.bits(), datalen);
- 
-diff -r 563557a923d0 include/zbar/Symbol.h
---- a/include/zbar/Symbol.h	Tue Oct 27 11:25:59 2009 -0400
-+++ b/include/zbar/Symbol.h	Fri Feb 22 08:54:29 2013 -0300
-@@ -1,5 +1,5 @@
- //------------------------------------------------------------------------
--//  Copyright 2007-2009 (c) Jeff Brown <spadix at users.sourceforge.net>
-+//  Copyright 2007-2010 (c) Jeff Brown <spadix at users.sourceforge.net>
- //
- //  This file is part of the ZBar Bar Code Reader.
- //
-@@ -64,6 +64,21 @@
-         ref(-1);
-     }
- 
-+    /// assignment.
-+    SymbolSet& operator= (const SymbolSet& syms)
-+    {
-+        syms.ref();
-+        ref(-1);
-+        _syms = syms._syms;
-+        return(*this);
-+    }
-+
-+    /// truth testing.
-+    bool operator! () const
-+    {
-+        return(!_syms || !get_size());
-+    }
-+
-     /// manipulate reference count.
-     void ref (int delta = 1) const
-     {
-@@ -77,7 +92,7 @@
-         return(_syms);
-     }
- 
--    int get_size ()
-+    int get_size () const
-     {
-         return((_syms) ? zbar_symbol_set_get_size(_syms) : 0);
-     }
-@@ -112,9 +127,16 @@
- 
-         /// copy constructor.
-         Point (const Point& pt)
-+            : x(pt.x),
-+              y(pt.y)
-+        { }
-+
-+        /// assignment.
-+        Point& operator= (const Point& pt)
-         {
-             x = pt.x;
-             y = pt.y;
-+            return(*this);
-         }
-     };
- 
-@@ -129,31 +151,52 @@
-             : _sym(sym),
-               _index(index)
-         {
--            sym->ref(1);
-+            if(sym)
-+                sym->ref(1);
-             if(!sym ||
-                (unsigned)_index >= zbar_symbol_get_loc_size(*_sym))
-                 _index = -1;
-         }
- 
--        /// constructor.
-+        /// copy constructor.
-         PointIterator (const PointIterator& iter)
-             : _sym(iter._sym),
-               _index(iter._index)
-         {
--            _sym->ref();
-+            if(_sym)
-+                _sym->ref();
-         }
- 
-         /// destructor.
-         ~PointIterator ()
-         {
--            _sym->ref(-1);
-+            if(_sym)
-+                _sym->ref(-1);
-+        }
-+
-+        /// assignment.
-+        PointIterator& operator= (const PointIterator& iter)
-+        {
-+            if(iter._sym)
-+                iter._sym->ref();
-+            if(_sym)
-+                _sym->ref(-1);
-+            _sym = iter._sym;
-+            _index = iter._index;
-+            return(*this);
-+        }
-+
-+        /// truth testing.
-+        bool operator! () const
-+        {
-+            return(!_sym || _index < 0);
-         }
- 
-         /// advance iterator to next Point.
-         PointIterator& operator++ ()
-         {
-             unsigned int i = ++_index;
--            if(i >= zbar_symbol_get_loc_size(*_sym))
-+            if(!_sym || i >= zbar_symbol_get_loc_size(*_sym))
-                 _index = -1;
-             return(*this);
-         }
-@@ -161,7 +204,9 @@
-         /// retrieve currently referenced Point.
-         const Point operator* () const
-         {
--            assert(_index >= 0);
-+            assert(!!*this);
-+            if(!*this)
-+                return(Point());
-             return(Point(zbar_symbol_get_loc_x(*_sym, _index),
-                          zbar_symbol_get_loc_y(*_sym, _index)));
-         }
-@@ -213,6 +258,32 @@
-         ref(-1);
-     }
- 
-+    /// assignment.
-+    Symbol& operator= (const Symbol& sym)
-+    {
-+        sym.ref(1);
-+        ref(-1);
-+        _sym = sym._sym;
-+        _type = sym._type;
-+        _data = sym._data;
-+        return(*this);
-+    }
-+
-+    Symbol& operator= (const zbar_symbol_t *sym)
-+    {
-+        if(sym)
-+            zbar_symbol_ref(sym, 1);
-+        ref(-1);
-+        init(sym);
-+        return(*this);
-+    }
-+
-+    /// truth testing.
-+    bool operator! () const
-+    {
-+        return(!_sym);
-+    }
-+
-     void ref (int delta = 1) const
-     {
-         if(_sym)
-@@ -250,6 +321,7 @@
-     }
- 
-     /// retrieve the string name for any addon.
-+    /// @deprecated in 0.11
-     const std::string get_addon_name () const
-     {
-         return(zbar_get_addon_name(_type));
-@@ -269,12 +341,20 @@
- 
-     /// retrieve inter-frame coherency count.
-     /// see zbar_symbol_get_count()
--    /// @since 1.5
-+    /// @since 0.5
-     int get_count () const
-     {
-         return((_sym) ? zbar_symbol_get_count(_sym) : -1);
-     }
- 
-+    /// retrieve loosely defined relative quality metric.
-+    /// see zbar_symbol_get_quality()
-+    /// @since 0.11
-+    int get_quality () const
-+    {
-+        return((_sym) ? zbar_symbol_get_quality(_sym) : 0);
-+    }
-+
-     SymbolSet get_components () const
-     {
-         return(SymbolSet((_sym) ? zbar_symbol_get_components(_sym) : NULL));
-@@ -311,6 +391,13 @@
-         return((_sym) ? zbar_symbol_get_loc_y(_sym, index) : -1);
-     }
- 
-+    /// see zbar_symbol_get_orientation().
-+    /// @since 0.11
-+    int get_orientation () const
-+    {
-+        return(zbar_symbol_get_orientation(_sym));
-+    }
-+
-     /// see zbar_symbol_xml().
-     const std::string xml () const
-     {
-@@ -320,9 +407,6 @@
-     }
- 
- protected:
--
--    friend class SymbolIterator;
--
-     /// (re)initialize Symbol from C symbol object.
-     void init (const zbar_symbol_t *sym = NULL)
-     {
-@@ -361,7 +445,7 @@
-     {
-         const zbar_symbol_set_t *zsyms = _syms;
-         if(zsyms)
--            _sym.init(zbar_symbol_set_first_symbol(zsyms));
-+            _sym = zbar_symbol_set_first_symbol(zsyms);
-     }
- 
-     /// copy constructor.
-@@ -370,25 +454,33 @@
-     {
-         const zbar_symbol_set_t *zsyms = _syms;
-         if(zsyms)
--            _sym.init(zbar_symbol_set_first_symbol(zsyms));
-+            _sym = zbar_symbol_set_first_symbol(zsyms);
-     }
- 
-     ~SymbolIterator ()
-     {
--        _sym.init();
-+    }
-+
-+    /// assignment.
-+    SymbolIterator& operator= (const SymbolIterator& iter)
-+    {
-+        _syms = iter._syms;
-+        _sym = iter._sym;
-+        return(*this);
-+    }
-+
-+    bool operator! () const
-+    {
-+        return(!_syms || !_sym);
-     }
- 
-     /// advance iterator to next Symbol.
-     SymbolIterator& operator++ ()
-     {
--        const zbar_symbol_t *zsym = _sym;
--        if(zsym)
--            _sym.init(zbar_symbol_next(zsym));
--        else {
--            const zbar_symbol_set_t *zsyms = _syms;
--            if(zsyms)
--                _sym.init(zbar_symbol_set_first_symbol(zsyms));
--        }
-+        if(!!_sym)
-+            _sym = zbar_symbol_next(_sym);
-+        else if(!!_syms)
-+            _sym = zbar_symbol_set_first_symbol(_syms);
-         return(*this);
-     }
- 
-@@ -440,9 +532,7 @@
- static inline std::ostream& operator<< (std::ostream& out,
-                                         const Symbol& sym)
- {
--    out << sym.get_type_name()
--        << sym.get_addon_name()
--        << ":" << sym.get_data();
-+    out << sym.get_type_name() << ":" << sym.get_data();
-     return(out);
- }
- 
-diff -r 563557a923d0 include/zbar/Video.h
---- a/include/zbar/Video.h	Tue Oct 27 11:25:59 2009 -0400
-+++ b/include/zbar/Video.h	Fri Feb 22 08:54:29 2013 -0300
-@@ -1,5 +1,5 @@
- //------------------------------------------------------------------------
--//  Copyright 2007-2009 (c) Jeff Brown <spadix at users.sourceforge.net>
-+//  Copyright 2007-2010 (c) Jeff Brown <spadix at users.sourceforge.net>
- //
- //  This file is part of the ZBar Bar Code Reader.
- //
-@@ -92,7 +92,7 @@
-     /// see zbar_video_init()
-     void init (std::string& format)
-     {
--        unsigned int fourcc = *(unsigned int*)format.c_str();
-+        unsigned int fourcc = zbar_fourcc_parse(format.c_str());
-         if(zbar_video_init(_video, fourcc))
-             throw_exception(_video);
-     }
-diff -r 563557a923d0 include/zbar/zbargtk.h
---- a/include/zbar/zbargtk.h	Tue Oct 27 11:25:59 2009 -0400
-+++ b/include/zbar/zbargtk.h	Fri Feb 22 08:54:29 2013 -0300
-@@ -136,7 +136,7 @@
- 
- GType zbar_gtk_get_type(void) G_GNUC_CONST;
- 
--/** 
-+/**
-  * zbar_gtk_new:
-  * create a new barcode reader widget instance.
-  * initially has no associated video device or image.
-@@ -189,7 +189,17 @@
-  */
- gboolean zbar_gtk_get_video_opened(ZBarGtk *zbar);
- 
--/** 
-+/** set video camera resolution.
-+ * @width: width in pixels
-+ * @height: height in pixels
-+ *
-+ * @note this call must be made before video is initialized
-+ */
-+void zbar_gtk_request_video_size(ZBarGtk *zbar,
-+                                 int width,
-+                                 int height);
-+
-+/**
-  * utility function to populate a zbar_image_t from a GdkPixbuf.
-  * @image: the zbar library image destination to populate
-  * @pixbuf: the GdkPixbuf source
-diff -r 563557a923d0 iphone/ChangeLog
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/iphone/ChangeLog	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,138 @@
-+version 1.3.1:
-+  * fix examples
-+    - fix EmbedReader initial iPad orientation
-+    - fix TabReader shouldn't show controls
-+  * add retry workaround when device lock fails
-+    - add iPhone 5 launch image to examples
-+    - doc updates
-+  * Lion and Xcode updates
-+    - fix new warnings/errors
-+    - find missing buddy
-+    - fix SDK bg image: force resoution to 72dpi
-+  * Fix EmbedReader example rotation interaction
-+
-+version 1.2.2:
-+  * reduce controller present and dismiss latency
-+    - add simple shutter to mask video start
-+
-+version 1.2.1:
-+  * fix overlay resizing bug
-+
-+version 1.2:
-+  * release updates
-+
-+version 1.1.3:
-+  * fix UITabViewController rotation interaction
-+
-+version 1.1.2:
-+  * add maxZoom for increasing zoom range
-+    - workaround camera preview initial location/size bug
-+  * add emulation for UI videoQuality to adjust camera resolution
-+  * fix several simulator-related bugs
-+    - fix device property missing from simulated ZBarReaderView
-+    - fix AVCaptureDevice referenced from ZBarReaderViewController
-+    - fix simulated camera gesture multiple recognition
-+
-+version 1.1.1:
-+  * fix ReaderSample project path to ZBarSDK
-+  * README document new examples
-+    - make ReaderSample scheme public
-+  * documentation updates
-+  * add emulation for UI camera device and flash mode properties
-+  * workaround orientation bugs in parent controllers
-+    - enable orientation and iPad support for all examples
-+  * add orientation detection fall back
-+  * fix captureReader not exposed to simulator
-+  * fix camera preview stale rotation corner
-+    - fix ZBarReaderViewController toolbar layout accomodation
-+    - switch pre-release samples to use debug library
-+  * update docs to note possible link order dependency
-+  * add missing references to new samples
-+  * add IB support to ZBarReaderViewController
-+    - add tabbed reader sample
-+  * add embedded reader sample
-+    - factor out camera simulation logic
-+  * fix readertest max quality result filtering
-+    - thanks to John Boydon for finding this!
-+  * improve support for resizing, rotating and embedding the reader
-+  * add readertest fixed zoom stops
-+  * add manual frame capture
-+    - readertest save as PNG
-+  * enhance readertest to support default/demo pre-config and distribution
-+  * updates for Xcode 4
-+  * expose tracking box color
-+
-+version 1.1:
-+  * fix doc typo (bug #3139087)
-+    - add modifier bit docs
-+
-+version 1.0.1:
-+  * hotfix broken ZBarHelpController back button
-+  * release updates
-+    - update docs
-+  * fix support for GS1 AIs
-+  * fix simulated camera image orientation/scaling
-+  * cleanup and expose ZBarHelpController
-+  * expose enable for reader capture processing
-+  * workaround iOS 4.2 hang
-+    - update to use latest SDK
-+  * add support for Code 93 symbology
-+
-+version 1.0:
-+  * update to SDK 4.1, clean out LLVM warnings
-+  * fix camera simulation gesture
-+
-+version 0.1.2:
-+  * fix missing header dependency
-+  * doc enhancements
-+  * force controls to front when showsZBarControls is enabled
-+  * fix initial zoom crop (performance bug)
-+  * workaround iPhone quartz access past image data
-+
-+version 0.1.1:
-+  * migrate to binary iPhone SDK distribution (NB backward incompatibilities!)
-+    - restructure headers
-+
-+version 0.1:
-+  * workaround for iPhone simulator builds
-+    - refactor ZBarReaderView for capture/simulator specific implementations
-+    - fix tracking calculations
-+    - fix captured video frame color conversion
-+  * fix for poor iPhone 4 performance
-+  * enable torch for iPhone 4
-+  * fix iPhone circular ref bug
-+  * add iPhone cache flush, change new libs to weak refs
-+  * fix iPhone async ref bug
-+  * enhance iPhone readertest w/more options
-+  * add iPhone zoom support, integrate with crop
-+  * add iPhone OS 4.0 video capture support
-+    - replacement view controller for new camera reader
-+    - separate view for use without controller
-+    - separate capture delegate for use standalone
-+    - add continuous autofocus
-+  * cleanup and expose iphone help display API
-+  * fixes to new iphone help display
-+  * migrate iphone help display to integrated web page (NB resource updates!)
-+    - allows easier customization
-+    - local links open directly, external links confirm and jump out to Safari
-+    - JavaScript hook for help context customization
-+    - also enhanced default help (note this changes the required resources)
-+    - fix to disable scanning during help overlay
-+    - thanks to iafanasyev and others for detailed suggestions
-+  * fix iphone custom overlay response (bug #2959617)
-+    - thanks to an anonymous user for the patch!
-+  * iphone widget performance tuning enhancements
-+    - fix crop calculation bug in ZBarImage
-+    - add properties to control pre-scan image cropping and scaling
-+    - add property for scanner cache control
-+    - enable some scanner density control (FIXME should be property)
-+    - fix ifdef for quality control (FIXME should be property)
-+    - add "sequence" mode test (not actually so useful)
-+  * realtime scanning for iphone widget
-+    - uses UIGetScreenImage() (NB private)
-+    - ZBarImage from CGImage (instead of UIImage)
-+    - add crop to scaling step
-+    - expose symbol set unfiltered results
-+  * iphone widget back compat updates, add basic test app
-+  * add Obj-C wrapper
-+  * first pass working iPhone "widget"
-diff -r 563557a923d0 iphone/README
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/iphone/README	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,66 @@
-+ZBar iOS SDK
-+============
-+
-+ZBar Bar Code Reader is an open source software suite for reading bar
-+codes from various sources, such as video streams, image files and raw
-+intensity sensors. It supports EAN-13/UPC-A, UPC-E, EAN-8, DataBar,
-+Code 128, Code 93, Code 39, Codabar, Interleaved 2 of 5 and QR Code.
-+These are the Objective C wrappers and integrated widget for developing
-+with the library on the iOS platform.
-+
-+Check the ZBar project home page for the latest release, forums, etc.
-+
-+* http://zbar.sourceforge.net/iphone
-+
-+Installation
-+------------
-+
-+If you are migrating from a pre-SDK source version of the library,
-+first make sure you remove all of the old references to zbar.xcodeproj
-+and libzbar.a and revert any related build settings.
-+
-+To add the SDK to an Xcode project:
-+
-+   1. Drag ZBarSDK into your Xcode project.
-+   3. Add these system frameworks to your project:
-+      * AVFoundation.framework (weak)
-+      * CoreMedia.framework (weak)
-+      * CoreVideo.framework (weak)
-+      * QuartzCore.framework
-+      * libiconv.dylib
-+
-+Documentation
-+-------------
-+
-+See Documentation.html for complete SDK documentation.
-+
-+Examples
-+--------
-+
-+You should be able to open and build the examples directly from the
-+disk image (ignore warnings about the read-only volume).  If you have
-+problems with this, please copy the examples to your local drive
-+instead and build from there.
-+
-+A tutorial that walks through installing and using the SDK is
-+available in the documentation.  The SDK disk image also contains the
-+resulting Xcode project at Examples/ReaderSample.
-+
-+Examples/readertest demonstrates most of the configuration options
-+available for the reader.
-+
-+Examples/TabReader shows how you can use Interface Builder to add the
-+reader as a tab in a UITabBarController.
-+
-+Examples/EmbedReader shows how a ZBarReaderView may be embedded
-+directly in the application view hierarchy.
-+
-+Copyright and License
-+---------------------
-+
-+Licensed under the GNU Lesser General Public License, version 2.1.
-+http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
-+
-+Copyright 2008-2011 � Jeff Brown <spadix at users.sourceforge.net> et al
-+
-+See the included files COPYING and LICENSE for details
-diff -r 563557a923d0 iphone/ZBarCVImage.h
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/iphone/ZBarCVImage.h	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,43 @@
-+//------------------------------------------------------------------------
-+//  Copyright 2010 (c) Jeff Brown <spadix at users.sourceforge.net>
-+//
-+//  This file is part of the ZBar Bar Code Reader.
-+//
-+//  The ZBar Bar Code Reader is free software; you can redistribute it
-+//  and/or modify it under the terms of the GNU Lesser Public License as
-+//  published by the Free Software Foundation; either version 2.1 of
-+//  the License, or (at your option) any later version.
-+//
-+//  The ZBar Bar Code Reader is distributed in the hope that it will be
-+//  useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-+//  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+//  GNU Lesser Public License for more details.
-+//
-+//  You should have received a copy of the GNU Lesser Public License
-+//  along with the ZBar Bar Code Reader; if not, write to the Free
-+//  Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-+//  Boston, MA  02110-1301  USA
-+//
-+//  http://sourceforge.net/projects/zbar
-+//------------------------------------------------------------------------
-+
-+#import <ZBarSDK/ZBarImage.h>
-+#import <CoreVideo/CoreVideo.h>
-+
-+// ZBarImage referring to a CVPixelBuffer.  used internally to handle
-+// asynchronous conversion to UIImage
-+
-+ at interface ZBarCVImage
-+    : ZBarImage
-+{
-+    CVPixelBufferRef pixelBuffer;
-+    void *rgbBuffer;
-+    NSInvocationOperation *conversion;
-+}
-+
-+- (void) waitUntilConverted;
-+
-+ at property (nonatomic) CVPixelBufferRef pixelBuffer;
-+ at property (nonatomic, readonly) void *rgbBuffer;
-+
-+ at end
-diff -r 563557a923d0 iphone/ZBarCVImage.m
---- /dev/null	Thu Jan 01 00:00:00 1970 +0000
-+++ b/iphone/ZBarCVImage.m	Fri Feb 22 08:54:29 2013 -0300
-@@ -0,0 +1,195 @@
-+//------------------------------------------------------------------------
-+//  Copyright 2010 (c) Jeff Brown <spadix at users.sourceforge.net>
-+//
-+//  This file is part of the ZBar Bar Code Reader.
-+//
-+//  The ZBar Bar Code Reader is free software; you can redistribute it
-+//  and/or modify it under the terms of the GNU Lesser Public License as
-+//  published by the Free Software Foundation; either version 2.1 of
-+//  the License, or (at your option) any later version.
-+//
-+//  The ZBar Bar Code Reader is distributed in the hope that it will be
-+//  useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-+//  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+//  GNU Lesser Public License for more details.
-+//
-+//  You should have received a copy of the GNU Lesser Public License
-+//  along with the ZBar Bar Code Reader; if not, write to the Free
-+//  Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-+//  Boston, MA  02110-1301  USA
-+//
-+//  http://sourceforge.net/projects/zbar
-+//------------------------------------------------------------------------
-+
-+#import "ZBarCVImage.h"
-+#define MODULE ZBarCVImage
-+#import "debug.h"
-+
-+static NSOperationQueue *conversionQueue;
-+
-+static const void*
-+asyncProvider_getBytePointer (void *info)
-+{
-+    // block until data is available
-+    ZBarCVImage *image = info;
-+    assert(image);
-+    [image waitUntilConverted];
-+    void *buf = image.rgbBuffer;
-+    assert(buf);
-+    return(buf);
-+}
-+
-+static const CGDataProviderDirectCallbacks asyncProvider = {
-+    .version = 0,
-+    .getBytePointer = asyncProvider_getBytePointer,
-+    .releaseBytePointer = NULL,
-+    .getBytesAtPosition = NULL,
-+    .releaseInfo = (void*)CFRelease,
-+};
-+
-+ at implementation ZBarCVImage
-+
-+ at synthesize pixelBuffer, rgbBuffer;
-+
-+- (void) dealloc
-+{
-+    self.pixelBuffer = NULL;
-+    if(rgbBuffer) {
-+        free(rgbBuffer);
-+        rgbBuffer = NULL;
-+    }
-+    [conversion release];
-+    conversion = nil;
-+    [super dealloc];
-+}
-+
-+- (void) setPixelBuffer: (CVPixelBufferRef) newbuf
-+{
-+    CVPixelBufferRef oldbuf = pixelBuffer;
-+    if(newbuf)
-+        CVPixelBufferRetain(newbuf);
-+    pixelBuffer = newbuf;
-+    if(oldbuf)
-+        CVPixelBufferRelease(oldbuf);
-+}
-+
-+- (void) waitUntilConverted
-+{
-+    // operation will at least have been queued already
-+    NSOperation *op = [conversion retain];
-+    if(!op)
-+        return;
<Skipped 31962 lines>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/zbar.git/commitdiff/781118792c4f651f45a9b4ddba7eb0c59ce2956d




More information about the pld-cvs-commit mailing list