USB3Vision – Looking for devices

As you may have understood from my previous blog post, I’m currently trying to add USB3Vision support in Aravis.

It’s an interesting challenge, as, like for GigEVision, I don’t use the USB2Vision standard documents, and this time I’m also discovering the USB protocol.

So far, what is in master provides a good support for the only camera I have, a Basler acA1920-25um. Performance is quite good, better than with GigEVision (65kB packets help), and it will be even better when I will have removed a useless memory copy operation. I also have to improve the handling of camera deconnections.

That being said, the fact I only have one device at hand means the testing coverage is pretty poor, compared to GigEVision where I have 10 cameras from 4 different manufacturers.

So, if you want to help the aravis project in gaining a good Usb3Vision support, I will gladly accept hardware donations. Preferably from a country member of the European union, in order to avoid custom related troubles. Just send me a private message if you are interested (emmanuel at gnome org).

And of course, I still also welcome GigEVision device donations, especially those with exotic features…

New cameras

I have received two new cameras for aravis development.

The first one came from The Imaging Source, thanks to Arne Caspari. It’s a DMK23G618 monochrome camera. As a bonus, I have also received a couple of patches from Edgar Thier, allowing to correctly set the acquisition frame rate on this kind of device.


The second camera is a Blackfly BFLY-PGE-14S2C-CS colour camera, which comes from PointGrey, thanks to Damian Nesbitt. This camera is interresting as it requires the support for PENDING ACK packets, a feature not yet implemented in aravis.


Thanks a lot.

SVG Filters

I’ve finally found the motivation to begin the implementation of SVG filters in lasem. It’s still pretty rough, there’s a lot of bugs to fix and things to finish, but when I’ve tried to render icons from gnome-icon-theme, a very large subset of this theme renders fine. Here’s an example:

For now, feGaussianBlur, feOffset, feBlend, feMerge, feMergeNode, feComposite and feFlood are supported. Support the remaining filter primitive should appear soon. Fortunately, I’m able to use Caleb Moore’s librsvg code (same license) for the filter algorithms, even if I try to use cairo API when possible.

I’ve done some work on markers, fixing overflow and automatic marker orientation:

I’ve also lately worked on the robustness of lasem, by importing in the test suite a lot of the attached files in librsvg bug reports, thanks to Olav Vitters who gave me the method for an automatic extraction of attached files in bugzilla. I’ve first downloaded the result of a bugzilla query as xml, then wrote a small script which finds attachement url and retrieves them.

Here’s the script (be careful if you use it, as bugzilla will ban you if you download a large amount of data):

# coding=utf-8

import urllib2
import xml.dom
import time
import os
import sys
import codecs
import subprocess
import locale
from xml.dom.minidom import parseString

def getText (element, tag):
        nodelist = element.getElementsByTagName (tag)[0].childNodes
        rc = []
        for node in nodelist:
                if node.nodeType == node.TEXT_NODE:
        return ''.join(rc)

count = 0

file = open('librsvg.xml')
data =

dom = parseString(data)

bugs = dom.getElementsByTagName('bug')
for bug in bugs:
        bug_id = getText (bug, 'bug_id')
        attachments = bug.getElementsByTagName('attachment')
        for attachment in attachments:
                if attachment.getAttribute('ispatch') != "1":
                        attachment_id = getText (attachment, 'attachid')
                        type = getText (attachment, 'type')
                        if type == 'image/svg+xml' or type == 'image/png':
                                filename = getText (attachment, 'filename')

                                url = "" % attachment_id
                                output_filename = "librsvg/librsvg-bug%s-%s" % (bug_id, filename)
                                input_file = urllib2.urlopen( url)
                                data = ()
                                input_file.close ()

                                output_file = open(output_filename, 'w')
                                output_file.write (data)
                                output_file.close ()

                                time.sleep (5)
                                count = count + 1

print count

Release of Aravis 0.1.8

So, what’s new since the last blog entry on an Aravis release ?

Mostly bug fixes, but also some new features. The video stream code has been vastly improved and should be more robust now, with a better packet resend mechanism. I’m still not completely happy about this part, as when using my Ace camera on a low quality network (i.e. wifi), after some time aravis lost the connection to the camera.

I’v renamed arv-show-devices to arv-tool, and then added the capability to read/write and list the device features. It’s really helpful for testing Aravis.

The color support is also improved, and now the gstreamer plugin supports caps filtering, which makes it more consistent with the behaviour of other gstreamer plugins.

Finally, the library is parallel installable, which means I should release a stable version of aravis soon.

Kind donation of a color camera

Bert Douglas, from TPLogic has donated a Basler acA1300-30gc color camera, equipped with a very nice Theia MY125M lens.

This donation already helped me to fix a number of obvious issues related to the new pixel formats this camera supports. And it is very convenient to have this device at home for aravis development.

Thanks a lot.

Aravis 0.1.2 released, now with a place for the bug reports

I’ve released aravis 0.1.2 last week. Since 0.1.0, I’ve added a basic ethernet camera simulator, fixed a bunch of bugs in the gvcp protocol code and in the genicam one. As I’ve changed of laptop, and migrated to a 64 bit linux distribution, support of 64 bit platform has also greatly improved…

And now, Aravis has a bugzilla, hosted on the gnome infrastructure. It’s here:

Aravis 0.1.0 released

I’ve just released the first unstable version of Aravis.

In this release, you’ll find:

  • Support for gigabit ethernet cameras, with packet resend
  • Support for a large subset of the Genicam interface
  • A simple API for easy camera control
  • A work-in-progress documentation
  • A simple gstreamer source element
  • Gobject-introspection support

As Aravis don’t have a bug report facility yet, please report any bug to me using this address: emmanuel at gnome org.

Moi je ne m'en fais pas