Shutter Stream is a software tool that connects a digital camera to a computer and automates the process of capturing and editing images, with a focus on eCommerce photography. Shutter Stream supports a wide range of cameras, imaging tools for efficient image editing and background removal, and external hardware for efficient 360 degrees and still image capturing. In an earlier article, Why Iconasys for In-House Still & 360 Product Photography, we compared our software solution against other third party vendors that integrate hardware and software for eCommerce photography and we highlighted the strengths of our software solution by emphasizing that our solution is based on one source code that is compiled on different operating systems. This article takes a closer look at the high-level software architecture of Shutter Stream.
First, our current version of Shutter Stream is developed using the Qt platform. We chose the Qt platform for the following reasons:
- Qt has a decent user experience with a stable interface, and provides a consistent native look across the three main operating systems we are interested in: Mac, Windows and Linux.
- Out of all the third-party, cross platform user interface (UI) libraries (we have also experimented with wxWidgets and FLTK), Qt seems to be the most complete library, providing support for core functions, networking, cameras, 2D and 3D rendering. It is worth noting here that in our case, we had to develop our own Qt camera plugins to interface into the Qt framework. This has caused some limitations in our hardware interface, which will be discussed later.
- Applications written in Qt tend to be fast, somewhat memory efficient and have a decent performance in 2D rendering.
- Qt has been around for over 25 years and has built a large community of users and developers.
Besides the Qt application framework, we developed our native libraries for image processing and turntable hardware control, and when necessary, we included other 3rd party libraries without adding a Qt wrapper, as shown in Figure 1.
Second, while Qt is a powerful library that allowed our teams to efficiently develop Shutter Stream into a cross platform application, Qt does have its limitations. These limitations are often related to performance, native hardware support and debugging. In particular, a natively developed application can have the following advantages over Qt:
- Native code has direct access to the OS’s system and functionalities, which can enhance performance, especially when dealing with large data, such as images from a camera with large number of pixels. This is particularly important when rendering very large images.
- Building with native code can reduce the risk of crashes and freezes. Cross-platform applications may fail due to inconsistent communication between non-native code and the device’s native components.
- Native code can more easily access hardware specific features that Qt may have not yet fully implemented or has masked due to the desire to be cross-platform. This is particularly true when accessing cameras and especially when accessing multiple cameras simultaneously.
- Cross-platform applications cannot take full advantage of native-only UI features. Only a native application can provide the best user experience for any one particular OS.
From a block diagram point of view, Figure 2 shows a side-by-side comparison of the Qt and native code implementation.
By eliminating the convenience of a cross-platform wrapper, we gain performance.
In conclusion, our Shutter Stream application has been developed using the Qt platform and due to performance issues, our teams are currently implementing a new version that will maximize the use of native code further, to the point where the entire application is written in native code. It is important to highlight that for Linux applications, due to the wide range of Linux flavors, our teams will continue to use Qt.
UPDATE Jan 15, 2021: Our team at Iconasys is currently in developer of a native Shutter Stream application.