mBarcode is an application which allows the user to scan barcodes using the device camera and then use the data they contain. mBarcode has a history list which remembers the last 10 scanned barcodes (images and data). mBarcode's barcode payload (i.e. the data encoded in the barcode) handling is implemented through a system of plugins, which you can add to.


[edit] Barcode Types

mBarcode uses ZBar and libdmtx to perform the barcode decoding.

[edit] Currently handled barcode types

[edit] 1D

  • EAN-13/UPC-A (ZBar)
  • UPC-E (ZBar)
  • EAN-8 (ZBar)
  • Code 128 (ZBar)
  • Code 39 (ZBar)
  • Interleaved 2 of 5 (ZBar)

[edit] 2D

  • Data matrix (libdmtx)
  • QR Code (ZBar)

[edit] Other barcode types wishlist

Please add other barcode types below and we will fill in the status/likelihood of them being added.

[edit] 1D

[edit] 2D

[edit] Currently handled barcode payloads

  • Weblookup for all payloads (this should handle EAN/UPC until someone writes a specific plugin to present data about them)
  • isbn lookups
  • vCards
  • iCal (will be handled as soon as we have Qt Mobility 1.1.x available - code is in SVN, but waiting for functions from Qtm 1.1.x)
  • Email payloads
  • geo://
  • tel://
  • install files - this is currently disabled as the install files generated huge barcodes, but certainly we could re-implement this if wanted (a la Android), or simply encode a URL to the location.

If there are any other things you'd like to see, please file an enhancement request and/or catch me on IRC to discuss.

[edit] Plugins

list of plugins here...

[edit] Post PR1.3 issues

Some users have reported problems loading plugins after upgrading their N900 device to PR1.3. A reinstall of the mbarcode package and the plugin packages (just reinstall mbarcode-plugins-all to fetch all default ones) has been reported to fix this issue.

With PR1.3 and the newest packages, mbarcode should work fine.

[edit] Developers

[edit] Plugins

The mBarcode plugin API allows users to write plugins in Qt/C++ or Qt/Python. When a barcode is decoded, the type of barcode and data are passed to the plugins so that they can begin processing if they are interested. The user is then presented with a dialog showing the names of the plugins that are interested, and can select which one to open by clicking on the list.

At this point the plugin in question is informed that it has been selected and is free to open a window or do other processing to handle the barcode payload.

If you would like to get started on developing plugins for mBarcode, please check out our tutorial.

[edit] ToDo/Stuff for volunteers

Check the bugtracker enhancement and bug requests of course

Catch me on irc (lardman) if you want to chat about any of these or the following topics.

Other items:

  • Plugin API modification - currently each plugin implements an isReady() method which is called to see whether the plugin is ready to be displayed in the ResultsWindow. This means that we continue to poll plugins to see if they are "ready" when they might in fact not be interested in the barcode payload at all. We should change this to something along the lines of an isInterested() method and an isReady() method for those that are "interested". Talking to Dragly it might be worth implementing this using signals and slots.
  • Support more barcode types - this is mainly down to ZBar (though if you find a good decoder for an unsupported barcode type I'm quite happy to look at adding it in in addition to the current ones). Currently in the works is PDF417 and it would also be good to have things like Aztec. Please head over to the ZBar site to grab their code and do some hacking if you think you can help with this or any other barcodes.
  • Speed up Data Matrix decoding - work is underway in the libdmtx project to re-write the code and make it run faster. I imagine that as with other open source projects, offers of help would be gratefully received.
  • Modify code so that more than one barcode can be returned and processes sequentially if visible in an image - both backends support this afaiu, but we currently just grab the first decoded barcode, even though more may be available.
  • Improve 1D decoding in low contrast conditions (down to ZBar)
  • Improve performance of decoding from file - currently Data Matrix barcodes can't be scanned this way
  • Allow arbitrarily sized barcodes to be scanned from file - currently they are limited to 800x480, but we should alter the decoder backend to allow changes to the maximum frame buffer size.
  • Improve appearance of the plugin settings window
  • Create an icon for the "decode from file" button (bottom right button on the main screen.
  • Return location of detected barcode from backends (possible at least with libdmtx) so we can highlight it in the live view (to look pretty, no other purpose!) :)
  • More to be added as I think of them! :)