This portfolio item describes work that I completed while working at my previous employer, Crystal Vision, who has now ceased trading. Although they have ceased trading I am not revealing projects that I worked on for certain unreleased products as I do not know the status of these products (whether or not the IP has been sold onto other companies for completion and release, etc.).
Crystal Vision was a manufacturer of hardware and software products for video and audio manipulation, for the live broadcast industry.
My work largely comprised of working on the company’s flagship media processing system, Marble, and its unreleased hardware upgrade, Marble Version 2, as well as supporting hardware such as the Vision frame system. Marble comprised of a software application running on a proprietary Linux distribution build via the Buildroot system, which ran on a NVIDIA Jetson System on Module (SoM). The SoM was then installed onto a carrier card comprising of signal processing hardware via an FPGA and CPLD, and the product was then installed within a specialised frame (Vision) with a PCIe backplane (that also ran a different proprietary version of Linux also built via the Buildroot system).
I was responsible for the later bring-up work for the Marble V2 product (creating a working Linux build, ensuring correct programming of the FPGA, and optimisation of the build), and some bring-up work involving GPIO SysFs calculation for the announced-but-not-released Marble Desktop (Marble DT) product.
This involved configuration via Make, batch scripting, C++ and C, and patience. The latter was key because just one setting within the Linux kernel configuration could make an SoM unbootable and require recovery via a NVIDIA development board. Additionally kernel configuration options can change other options when toggled and this meant a careful watchful eye was needed to ensure no undesired changes were made.
Changes to the Linux kernel were primarily to assist in making the product as performant as possible, for example ensuring polling rates were increased and that the correct process scheduler was being used.
AMWA NMOS (Network Media Open Specification) is a specification to allow compatible networked media hardware to communicate with one another, for automatic configuration of a broadcast network as well as easy control from a variety of software and hardware for the entire NMOS network. Until my tenure came to an end due to company closure, I was working on support of this protocol for our Marble product. This used C++ and was my first “from scratch” software project at the company.
During the NMOS project I designed and implemented a system that carefully considered the product’s use of media interfaces (both networked and physical) within a structured fashion. This was completed via a highly object-oriented approach via C++11 and although some difficulties were encountered along the way (such as poor documentation and coding practices of the NMOS library that we used), was a mostly-complete implementation.