An Open Source driver for USB pico projectors

This is a follow-up to the previous story about am7xxx devices.

The 0.1.2 stable release of libam7xxx is out, and some binary Debian packages are available as well. Check out also the am7xxx page on Ohloh.

The devices supported in this release are:

This release comes with a display daemon based on libav, it is called am7xxx-play and you can use it to:

  • display your X desktop:
    am7xxx-play -f x11grab -i :0.0
  • display the content of a single X window with a script like this one:
    set -e
    X=$(echo "$WIN_INFO" | sed -n -e "/^[[:space:]]*Absolute upper-left X:[[:space:]]*/s///p")
    Y=$(echo "$WIN_INFO" | sed -n -e "/^[[:space:]]*Absolute upper-left Y:[[:space:]]*/s///p")
    WIDTH=$(echo "$WIN_INFO" |  sed -n -e "/^[[:space:]]*Width:[[:space:]]*/s///p")
    HEIGHT=$(echo "$WIN_INFO" |  sed -n -e "/^[[:space:]]*Height:[[:space:]]*/s///p")
    set -x
    am7xxx-play -f x11grab -i ":0+${X},${Y}" -o video_size="${WIDTH}x${HEIGHT}"
  • display the output of a framebuffer device:
    am7xxx-play -f fbdev -i /dev/fb0
  • display the output of a v4l2 device:
    am7xxx-play -f video4linux2 -i /dev/video0 -o video_size=640x480,frame_rate=30
  • display any files supported by libav (but note that the framerate is not accurate in this case and audio is not decoded at all):
    am7xxx-play -i

Keep in mind that am7xxx-play is just a prototype, I think it is not worth adding audio decoding and audio/video synchronization to it.

It is interesting to note that the freedom to send images of arbitrary resolutions to the projectors exposed some bugs in the devices firmware. So if you get garbage output try replugging the device and changing the dimensions of the image you are sending for display.

Where to go from here?

In the long run I think that we could write a libav output format, or —maybe better— a GStreamer video sink based on libam7xxx.

GStreamer looks interesting to me, and maybe keystoning can be implemented as an element of a GStreamer pipeline too. I'll ask GStreamer devs about that.

On linux systems, writing a kernel driver is also a possibility, the first easy choice would be writing it as a v4l2 output device accepting JPEG images or raw NV12 frames, this way v4l2sink from GStreamer could be used immediately.

I don't know if the framebuffer way is viable, since we would have to do JPEG encoding in userspace anyways; I'll ask linux-media for advice.

But if we want portability (GStreamer runs on Windows too, doesn't it?) the linux kernel driver becomes low priority.

There is also the issue of having some display-extension-mode, right now am7xxx-play is enough if you are only interested in a clone of the current screen, but what if we want another screen displayed by the projector? I read the Xvfb might go away in future Xorg versions and that we should use xf86-video-dummy, but I've just learned about it, I have to see how to use it, if it supports RANDR and stuff like that.

Call for help

If any Debian Developer is willing to sponsor the libam7xxx package for upload to the Debian archive, let us know, I'll try asking on debian-mentors as well. The packaging bits are in the libam7xxx debian branch.

If you are interested in sponsoring a port to Android/Linux, get in touch, we could use some (even old) Android device with USB Host support and maybe some other projectors to test multi-device operation of libam7xxx.

If you'd like to have an Open Projectors project where you can find Open Source software to use with video projectors, speak up! I'd like to hear some opinions before I start putting time on that. The L.A.S.E.R. Tag Linux port is an example of the kind of software I am talking about.

We are in the #am7xxx channel on the freenode IRC network.

Side Note: the development of am7xxx-play brought also a little fix for libavdevice.

CommentsSyndicate content

Caro Antonio, it worked out!

Paolo's picture

Caro Antonio,
it worked out! I set the resolution of my netbook (Asus EEE 1015PED, Xubuntu 13.10) to 800x600 and it worked like a charm. If I run am7xxx-play as a simple user, it works at first, but crashes after some minutes:
mandrake@goldrake:~$ am7xxx-play -f x11grab -i :0.0
scan_devices: am7xxx device found, index: 0, name: Philips/Sagemcom PicoPix 2055
[x11grab @ 0x86d26a0] device: :0.0 -> display: :0.0 x: 0 y: 0 width: 800 height: 600
[x11grab @ 0x86d26a0] shared memory extension found
[x11grab @ 0x86d26a0] Estimating duration from bitrate, this may be inaccurate
Input #0, x11grab, from ':0.0':
Duration: N/A, start: 1391502870.300348, bitrate: 921600 kb/s
Stream #0.0: Video: rawvideo, bgra, 800x600, 921600 kb/s, 60 tbr, 1000k tbn, 60 tbc
Errore di segmentazione (core dump creato)

However, if I run it as root:
sudo am7xxx-play -f x11grab -i :0.0
it works perfectly (no "Errore di segmentazione"/"Segmentation fault"). It doesn't matter however: I'll runt it with sudo and stay happy.
Thank you so much: this will change my everyday teaching routine. From now on I'll project stuff during every single lesson of mine!

Hi, I have an AOC E2251FWU

Philip's picture

Hi, I have an AOC E2251FWU USB monitor (i.e. power and video through single USB connected cable to external monitor, just like it does with a USB connected projector). The suggested driver for this monitor is DisplayLink, however when duplicating my laptop screen on the monitor the image displayed is only slightly larger than the laptop screen size with a thick black border, i.e. the laptop screen image doesn't fill the monitor screen. I'm therefore Googling to find other drivers that I can install that will magnify the laptop screen to fill the AOC 22" monitor screen. Sorry far my Googling has been unsuccessful until I landed on your page about drivers for USB projectors. This got me wondering that maybe a USB projector driver will work for my AOC monitor. Or if not whether someone could modify a USB projector to work with the AOC monitor? I'm reasonably technical but not a developer... the limit of my capability in this would probably be to be able to download a driver installer on my laptop and install it. Details of my laptop if needed are: 64 bit Windows 7 Lenovo X240 11" Intel i5 4300U processor, 4GB RAM.
It would be great if someone could help me out.

Hi Philip, if it's a

ao2's picture

Hi Philip, if it's a DisplayLink device it needs a DisplayLink driver. It's a matter of the communication protocol used over USB rather than the display technology (LCD panel or projector lamp). FYI, the projectors I deal with do not use the DisplayLink protocol.

About you problem, it sounds like a resolution problem.

I read that the the optimal resolution for your USB monitor is 1920x1080, but your laptop resolution is 1366x768. So I guess the monitor (or the driver) is not upscaling the image. And maybe it is not able to do that at all.

BTW I don't have any Displaylink device and I don't use Windows at all so I am afraid I won't be able to give any further advice.

Ciao, Antonio

Hi Antonio... thanks for

Philip's picture

Hi Antonio... thanks for getting back to me... from the Googling I've done I believe the driver isn't upscaling the image. I'm hopeful it might be possible to find an alternative driver to use that does upscale instead of using the standard DisplayLink one. Hopefully others might be able to help.

Hallo, please advise me if

Anto's picture


please advise me if you found any solution for the Acer C120 picopix. I just bought it but I cannot use wit mint. I am quite new with linux and I don't know How to compile and/or install.

Antonio, if you are still planning to develop the driver for the Acer c120 please inform me

Best and thousand thanks


Hi, the Acer C120 is not an

ao2's picture

Hi, the Acer C120 is not an am7xxx device, libam7xxx won't work with it.

There is another driver for the C120 here:

I am not the author so I can't provide help about it.

Ciao, Antonio

Absolutely Stunning guys, the

DarkSavant's picture

Absolutely Stunning guys, the whole internet has no Driver whatsover for my little Philips Pico 1020
and this, this just works OUT of the BOX, I LOVE IT.

I couldnt get the X11 to work but Video Streaming worked like a clock, and webcam /dev/video streaming Also worked.

Now the next thing i would like to do is set up some kind of Pipe to a virtual DEV, so i can CAST videos to it,
this must be possbile somehow right ? care to help

thanx again for building this ..

Ah, glad that libam7xxx was

ao2's picture

Ah, glad that libam7xxx was useful to you.

As you may have understood am7xxx-play is more or less a test program, for a more general mechanism to use the projectors a GStreamer sink can be used, see gst-am7xxxsink, this way you can display on the projector anything that you can get out of GStreamer.

Ciao, Antonio

Post new comment

The content of this field is kept private and will not be shown publicly. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

More information about formatting options

This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Enter the code without spaces.