Optimization of GStreamer pipeline for a video capturing application
In this project we helped a customer to optimize the performance of a GStreamer application running on a TI OMAP3 processor. The application captures video from a camera, encodes it to H.264 and sends it out on the network. The OMAP3 processor has a camera interface for capturing the video and a DSP for the encoding. TI provides the open-source DMAI library for accessing these from application code, and even GStreamer plugin for easier integration.
For this project, the customer's application required access to the raw video frames coming from the camera and resizing these
before encoding. This broke the assumptions made by the GStreamer plugin and caused it to copy the video frames three times before
it reached the encoder. By modifying the source code of the GStreamer plugin and of the Linux kernel, we managed to reduce this to
zero copies. These modifications were contributed to the gstreamer-ti and video4linux projects and have partly been included in them.
For further details, see our Software Contributions page.
|OS:||Linux (OpenEmbedded - Angstrom)|
|Libraries:||Linux kernel, DMAI, GStreamer|
Implementation of waterflow measuring application
In this project we implemented a waterflow measuring and logging application on a small 32-bit RISC processor. The application had to be feature- compatible with existing products where the code was written in assembly. It ranges from the very low-level sampling of the current flow, up to high- level algorithms for detecting leaks in the pipes.
Since the system has to survive ten years on a single battery, power optimizations were essential. This includes putting the processor on a very slow clock most of the time, and limiting the memory footprint. To make sure the software can be efficiently tested, we also developed a simulation environment that allows to run the application on a PC, without any special hardware.
Because the available memory and processing power is very limited, we chose a tiny open source operating system:
FreeRTOS. It just offers a round-robin priority scheduler
and a single synchronization mechanism, but this was sufficient for the waterflow measuring application.
In this project, we developed GPIO, Audio and Video device drivers for Linux (Debian) for an automotive system.The development was centered on the Intel Poulsbo chipset that completes the Atom CPU platform with functionality targeted both at low-cost multimedia PCs (Intel GMA500 Video, Intel High Definition Audio), and embedded platforms (I2C, LPC, GPIO). We developed a driver for the GPIO functionality of this chipset. Further, we integrated a vendor-supplied driver for the Cirrus Logic CS4207 Audio chipset. For the Video functionality of the Poulsbo platform, a set of Ubuntu Linux packages is freely available, as a mixture of binary-only and open source components. We ported these packages to Debian. Special care had to be taken of the interoperability between binary components and other software.
|Hardware:||Intel Atom Z510, Intel SCH Poulsbo, Cirrus Logic CS4207 audio chipset|
Ethernet Chip Device Driver for RTEMS
In this project, we added a device driver for the CP2200 Ethernet chip to the RTEMS operating system. Because the GPS application for which this project was meant is very time-critical and the CP2200 chip itself has a low performance (data has to be transferred byte per byte, at 4MHz rate), special attention had to be given to the performance of the driver. Also, the customer required changes to DHCP and implementation of power management.
The results of this project were contributed to the RTEMS core development. Also, as a side-effect, we extended one of the RTEMS demo applications. For further details, see our Software Contributions page.
|Hardware:||180MHz ARM, Atmel AT91SAM9261 chip, Silicon Labs CP2200 Ethernet chip|
In this project, aiming at developing an automated Badminton playing robot, we did the integration of various components such as the trajectory estimation and interception algorithms (developed in Embedded MATLAB) and the robot control loop (developed in Simulink). Everything was integrated using the Orocos Real-time Toolkit and Component Library for robot and machine control.
In this project, very special care had to be given to the real-time aspects in order to guarantee an accurate and timely interception of the shuttle.
|OS:||Linux with Xenomai (Debian)|
|Languages:||C++, C, python, scripting|
|Hardware:||64-bit multi-processor x86 server|
Banksys Payment Terminal with External Thermal Printer
In this project, Mind delivered specialized development services to Banksys for the development of the Linux and eCos operating systems in the new Banksys payment terminal.
The terminals run Linux and eCos, open source operating systems for which all source code is freely available. Both operating systems were implemented for the terminals by Mind. Mind also supported Banksys with the software architecture used by the terminals, the tool chain design, and the low-level Linux and eCos drivers for the new peripherals in the terminals.
Video Storage Server for Security Platform
In this project, we developed the software for a server storing the output of hundreds of security cameras on a rack of hard disks. The development of the storage server software was performed by Mind, so the customer could concentrate on the integration into the security management system.
This project includes a video streaming application, which is based on GStreamer. GStreamer had to be extended with more stable HTTP/HTTPS communication and authenticated RTSP communication, which were contributed to the community.
Most of the storage server application software consists of monitoring and management functionality: programming recordings, indexing existing recordings, communicating with other servers, ejecting hard-disks, etc. This requires high-level programming of many concurrent tasks, and was based on the GLib, the GNOME core library, and D-Bus, the freedesktop inter-process communication system. On the other hand, it also requires low-level interaction with SCSI and SES (SCSI Enclosure Services) to manage the hard disk racks.
|Libraries:||GStreamer, GLib, D-Bus, SCSI-Generic, HAL, Apache, OpenSSL|
|Hardware:||64-bit multi-processor x86 server, SAS (Serial Attached SCSI) disk enclosures|
Access Control System
In this project, we ported and enhanced an existing access control system based on DOS with a 32-bit extender, to a Linux based solution. The resulting system consists of several access devices that control doors and read badges, and one or more access control servers that log access data and provide configuration details and software updates to the devices.
Thanks to this open source based solution, a high level of security and flexibility is obtained. For secure transport over standard Ethernet, SSL and SSH encryption and authentication is used for all communication. The flexibility is shown by an improved software update procedure, which allows the server to push updates to all access control devices simultaneously. If an update fails, the device is still bootable thanks to a failsafe image.
The access control devices can be programmed at a high abstraction level in the Lua scripting language, with access to the custom I/O ports of the device. This is primarily intended for home automation purposes. Configuration and monitoring of individual device system parameters can be done through a custom made and easily extendable command line interface, accessible over SSH. The development system, consisting of free tools (gcc, make, git, buildroot, ...), can build the entire system (the x86 Debian image, and three types of access devices both for the ARM and a legacy architecture) with one simple make command.
|Languages:||C, php, Lua, SQL|
|Libraries:||busybox, OpenSSL, uboot, buildroot|
|Hardware:||embedded system (180MHz ARM, 4MB flash, 16MB RAM) ; x86 server (via 1GHz, 1GB flash disk, 512MB RAM)|
VLC media player port to BuildRoot
In this project, we added the VLC media player to Buildroot for one of our customers. VLC media player is a highly portable multimedia player for various audio and video formats (MPEG-1, MPEG-2, MPEG-4, DivX, mp3, ogg, ...) as well as DVDs, VCDs, and various streaming protocols. It can also be used as a server to stream in unicast or multicast in IPv4 or IPv6 on a high-bandwidth network. BuildRoot is a set of Makefiles and patches that makes it easy generate a cross-compilation toolchain and root filesystem for a target Linux system.
One of the main tasks to perform this port, was to find the appropriate configuration options. Many of the paths inside VLC's configure script are absolute and/or hard-coded and thus we had to provide the tool with the correct paths. Of course VLC itself had to be patched. In our version we had to patch the configure script and a few source files to be compatible with used external libraries. Since all configuration options in VLC were required, we had to provide many audio and video libraries as well. Some of these were already in BuildRoot but others were not, thus we had to port these to BuildRoot, too. One of them, ffmpeg, again required patching and creating a complete Makefile to be compatible with BuildRoot. Others were ported without too much effort.
When porting software to BuildRoot, it is advisable to check that the libraries used by the built binaries and/or libraries are not the ones of the host system, since of course they will not be available on the target system. Again, carefully selecting the correct configuration options solves most of these problems.
The project was completed successfully and the changes have been submitted to BuildRoot waiting to be accepted. In conclusion, porting additional software to BuildRoot is possible, given a good understanding of Makefiles, patches and configure, and the result is a streamlined compact system that targets specifically your needs.
|OS:||Linux (BuildRoot 2008-10-20)|
|Languages:||Makefile, bash, C|
|Software ported:||VLC 0.8.6g, ffmpeg 2009-01-07, libdc1394 1.2.2, libmpeg2 0.5.1|
|Hardware:||AMD Geode, 512MB RAM (265MB available for OS+apps)|
Other examples of projects...
- Animations on Video Feeds
- Voice Messaging System for Public Transportation Systems
- Satellite Broadband Access Modem
- Satellite Ground Equipment
- Wifi Communication for an Image Transfer Device
- Wireless Media Player
- Medical Image Acquisition Equipment
- Tyre Inspection Equipment