[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