Hello Jesse,
Sorry for the late reply, let me try to answer your questions.
I simulated your design with my own simulated images that have the resolution of 4096x3072 after debayering, so the following numbers will differ on your side depending on the used input image.
If you take a look at the SimProbes JpegGrayR, JpegGrayG and JpegGrayB you will notice that they will have a size for example of 1186120 - and this times three (for each channel) is: 3 558 360
If you now take a look at the probe "JpegColor" you will notice the size of 1 269 096 - which means that you will have a much higher
compression using the JPEG color encoder.
Simply put, the algorithm inside the Jpeg color encoder differs vastly from the implementation of using a splitcomponent and three different JPEG_Encoder operators. Thus, resulting in different results.
The jpeg encoder works in blocks, bot the Color encoder and the grayscale encoder, however the Color encoder works with the YCbCr format and some internal downscaling. If you need more information on this please let me know and I will ask the appropiate engineers at Basler.
Also, your results may differ with images that have more color information, you could try to create a chessboard with different color patterns.
Lastly, the color jpeg encoder is better optimized for ressources, if you use three jpeg encoders you will need roughly
LUT: 25.759
FFs: 27.396
BRAM: 135
Embedded ALU: 141
RAMLUT: 3075
But the JPEG color encoder only uses:
LUT: 13220
FFS: 19681
BRAM: 93
Embedded ALU: 55
RAMLUT: 1630
To summarize it: Both implementations have a very different approach on encoding the color information and are therefore hard to compare.
Best Regards
Kevin