Native Player

In CatDV 11 we introduced the new native helper player, written entirely in C++. This was a major architectural change. The native helper directly uses native QuickTime APIs rather than going via QTJava, and also uses FFmpeg for decoding movies to display them. Over time we also added RED, AVFoundation (Mac), Windows Media Foundation (PC), and JPG, DPX and EXR image sequence decoding. These are all different “NH players” within the native helper process.

Because we could now compile and run CatDV without QTJava, and because all the 32-bit native code is in a separate helper process, we now started building CatDV as a 64-bit Java process. At the same time the old “remote” or “protected” player was removed as it’s no longer required, since the new native player also runs in a separate process and so provides the same protection against QuickTime crashes:

On the Java side we added a JavaFX player (as a fallback to play MP4 files if the native helper is unavailable for any reason), and also a JavaImage player (using Java’s built in support plus the open source TwelveMonkeys library) to display PSD, TIFF, PICT and other still image formats.

To control which of the many available players is selected for any particular file type we added player configuration rules such as:

jpg png gif cr2 psd tif bmp nef raw = JIMG r3d = RED, NONE

mts m2t ts mpeg mpg wmv = FFMPEG mxf = QT, FFMPEG, NONE

exr = IMSEQ_FF

exr dpx dng = IMSEQ type:imseq = QT, IMSEQ type:still = QT, IMSEQ_FF

* = QT, FFMPEG, AVF, FFCMD

avi wmv wma asf = WMF mp4 = JFX

type:still = JIMG