Spenser Gilliland

A blog of interesting technical advances.

June 23, 2013

Accelerated Video Decoding on the RPi using gst-omx and Buildroot

As a Google Summer of Code student, I have been working to add ARM multimedia features to Buildroot.  This week, I mainlined some of that work including patches, which add gst-omx for accelerated video decoding on the RPi.

Below is a video of this work in action.  In the video, you can see the RPi, decoding the Blender foundations Big Buck Bunny in 720p resolution and outputting through HDMI to a monitor.

To recreate the video, use this rpi_demo_defconfig then run the following on the RPi.  The rpi_demo_defconfig enables buildroot to build gst-omx. 

# wget http://blender-mirror.kino3d.org/peach/bigbuckbunny_movies/big_buck_bunny_720p_h264.mov
# gst-launch-1.0 filesrc location=/path/to/video ! qtdemux ! h264parse ! omxh264dec ! eglglessink

October 19, 2012

Using Vagrant to Test Puppet Modules

Using Vagrant to Test Puppet Modules

Vagrant is a pretty neat tool which allows a developer to easily destroy and create virtual machines in an automated fashion.  The puppet provision works great in a standalone fashion but most puppet developers use modules.  This post goes over a quick way to test your modules which may help improve your module development.

Clone the module you would like and make sure its named the same as the module name.

git clone <url of module> <module name>

Create a new file at <module name>/Vagrantfile and add the following content.

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant::Config.run do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"
  config.vm.host_name = "test"

  config.vm.provision :puppet do |puppet|
    puppet.module_path = ".."
    puppet.manifests_path = "tests"
    puppet.manifest_file  = "init.pp"

Finally, enter the module name directory and run vagrant up.

This example uses the test/init.pp as the manifest to run and gets modules from the local directory.  (if any other modules are available then they can be used in the test as well.)

Hope this small example helps out thoose in the early stages of learning puppet and Vagrant.

March 5, 2012

Saned Network Scanner

I like to keep my scanner in the office and be able to scan from my laptop. For that I use the net backend of sane. I had always enabled the net backend by setting the ip address of my saned server like below:

in /etc/sane.d/net.conf where is the ip address of the saned server:

However, I found out that saned supports avahi mdns. After a bit of experimentation, the following appears to enable the avahi backend.

local_only = 0

I am using this to scan from now on.

May 8, 2011

bridge on top of vlan on top of bond.

This is how you define a bridge on top of a vlan on top of a bond in debian

auto bond0
iface bond0 inet manual
bond_slaves eth1 eth2
bond_mode 802.3ad
bond_miimon 100

auto br-vlan4
iface br-vlan4 inet static
vlan-raw-device bond0
bridge_ports vlan4
bridge_maxwait 0
bridge_fd 0
bridge_stp off
metric 101

This is very useful in setting up a group of VM servers as each of the VM servers will have the same interface names. (ie: br-vlan4 is the same on all servers)

May 3, 2011

IT at School

Looks like I'm the IT guy at my school. I will be maintaining the labs server and setting up a version control and project management solution. Additionally, I'm looking into building my first cluster with a bunch of desktops that just reached end of life.

I've been looking into a couple projects that I want to integrate.

Kerberos/LDAP for AA.
Modules for Environment.
Redmine/Git for PM/SCM.
SGE or Torque for Batch Scheduler.
OpenAFS for Data Access.
GlusterFS for PFS.

Hmm its gonna be a long summer.

September 15, 2010

Ideas Ideas

I've been fumbling through some ideas today. This is a quick jote of what I am looking at.

Finish setting up dev server and setup automated infrastructure using puppet
Setup backups for local and remote.
Setup a server at my parents house for remote backup. Tell dad about current disk on sale at Tiger.

Setup a project to show of possible designs for clusters including the plug server idea.
Setup a project site to show of possible real time switch design.
Setup a project site to show off internal infrastructure design puppet, etc.
Setup a project to show the cost of running an ISP within an apartment complex.
Setup a project to show the cost of developing an ISP based data backup system. (no transit costs makes this very attractive to already established ISPs despite saturating the network.)

April 23, 2010

Nearing the End of Senior Design

I'm nearing the end of my senior year (graduation May 14th) and I have been working hard to get my groups senior design project up and running. We made a couple of good decisions and a couple of bad decisions. I failed to recognize some situations and I forced certain other situations. Number one bad decision was the work load I took on. I ended up working 232 hrs in total and over 70 hours in the last week. My biggest flaw was not trying to teach my group what I did and have them work on my parts as well. The most glaring example of this is the PCB and schematics we created. I use gEDA to do all of my electrical design. While gEDA is not the simplest program to use, I took on the posistion because I had the most experience doing schematic capture and layout. This task should have been handed off because what is more important is the Linux based datalogging system. I wrote the datalogger in a total of 12 hrs, it is the most awful, ugly and offensive program I have ever written, however this program has the most potential to be globally useful and a program which others could use to avoid the problems we faced. I wish I was able to hand of the schematic capture and layout to other in order to allow me the opportunity to work on the datalogging program. Who knows maybe I will get a chance to rewrite it but until then I hope to never be associated with that program.

Project Website