Many years ago I worked on a project for the University that I received my Masters degree from called “VisualODF” (my fancy-pants name for it, anyway – this wasn’t related to my actual thesis). It is a bunch of classes that demonstrate the following:
- How to open video files (avi, mpeg, etc) and grab screen shots in a QT class, the “frameServer”
- How to interface the frameServer with an image processing algorithm
- How to interface the image processing algorithm with a TCAS-II type display, as well as other custom display widgets
- How to use signals and slots in QT4
- How to create custom widgets in QT4
- How to create custom widget plugins for QT Designer
- How to convert data in a SDL_Overlay from YUV colorspace to RGB colorspace
- How to display a SDL window inside a QT window
The purpose of these classes was to put together a skeleton that other students could use to actually implement an algorithm that detects obstacles in the context of camera mounted on a UAV. Then the obstacle information should be displayed in a way that the UAV controller can easily understand (custom display widgets). The TCAS-II type widget that I made depends on knowledge of the position of the obstacles relative to the aircraft for display, and a second widget (“pieDisplay”) only relies on knowledge of the relative angle of the obstacle with the aircraft and the vector of its heading.
I think that the most useful things from this project (that other people might be interested in) are:
- The TCAS-II widget
- The QT class (based on ffplay and the ffmpeg libraries) that opens and plays videos
- The YUV to RGB conversion
- The code that shows how and where to do screen grabs of the playing video
The TCAS-II widget looks like this:

It displays threats according to the TCAS-II specs (as far as the coloring, arrows, etc) and has a really simple interface. You can add an unlimited number of threats to the widget and easily delete them (they are kept in a std::list and each has its own unique key). It does not, however, know anything about latitude/longitude or the like : it only uses x,y coordinates at the moment. So it could, of course, use some improvement.
The documentation for the VisualODF classes are located here: html version or pdf version [note: the PDF has outdated email addresses]. The classes and code themselves can be downloaded here : VisualODF Project