This project came about after finding some issues with other encoders available. Freely available GPU-accelerated JPEG encoding libraries such NVIDIA's nvJPEG aren't too performant in comparison with some of the licensed methods available.
This project is primarily a collection of whatever disgusting hacks I'm able to fit in to try and make this as fast an encoder as possible. If I can match FastVideo FastCompression's achievement of 26 monochrome 50MP images per second on my terrible laptop, it will be complete. I'll be making it in several main parts:
- Develop the initial encoder and decoder in C. As long as the encoder can produce a monochrome image interpretable by image-viewing programs, it's fine.
- Implement CUDA / OpenCL integration. As long as it can off-load the DCT to the GPU, this will at least initially be complete.
- Throw in the filthy hacks. This one will take a while. I have a number of papers I've dug up which use some neat tricks, but some of them will need me to read up on unfamiliar maths.
- SIMD/SIMT hell if I can ever be bothered. ala JPEG-turbo. I'm as yet unfamiliar with SIMT instructions, and they may not require as much hand-crafting as SIMD.
If I get to the last step and JPEG is still a relevant standard, I'll be surprised and disappointed.
mkdir build
cd build
cmake ..
cmake --build .