IP Camera

IP Camera was the main project I involved when I was working at Galaxycore Inc. This project is planned to produce the multimedia SoC for digital video cameras commonly employed for surveillance. we customized the original linux-2.6 kernel to add our own features. The project has been kicked off for one year before I joined the company, and I was on it for one year.

My roles in the project were as below:
• Bringing up modules
• Linux device driver programing
• Unit test and verification for modules

I mainly take the responsibility for the core module - image signal processing (ISP) pipeline consisting of Sensor, ISP and Video Codec. I brought up sub-modules like sensors (OV2710, AR0130), ISP, overlay on streams in the diagnosis code branch (used for bringing up and testing single module), and then ported them to Linux device drivers. I designed the ISP module driver based on the Video for Linux Two (V4L2) framework. In this way, all the sub-modules were abstracted into sub-devices and formed a device graph, so that I could use uniform APIs like IOCTL and other system calls in user space for the whole pipeline. Furthermore, I optimized the memory allocation of project’s finite DRAM, which could adjust dynamically according to the sensor’s resolution and different scenes.

Figure 1. Video Processing Pipeline for IP Camera

I mainly programed under the Linux operating system using C language and arm-none-linux-gnueabi-gcc as the cross-compiler toolchain. In the process, I taught myself Linux device driver and V4L2 API specification, H.264 Codec knowledge etc. This project enhanced my understanding of ARM architecture, cache coherency and kernel memory management.

Written on July 1, 2015