Kevin Colgan
Kevin Colgan

Reputation: 199

Can a high-performance jpeglib-turbo implmentation decompress/compress in <100ms?

I'm currently implementing a jpeg resizer in C++ using the jpeglib-turbo library.

I've been given the target of 100 milli-seconds for JPEG decompression and recompression using the library. The best I can come up with using the recommended optimisation settings (documented in jpeglib-turbo usage.txt) is around 320ms, so I'm wondering is 100ms even possible/realistic? This would be to decompress/recompress an image of 3000x4000 px from around 6Mb in size to 130Kb.

The code that I'm using for fast decompression is:

    dinfo.dct_method = JDCT_IFAST;
    dinfo.do_fancy_upsampling = FALSE;
    dinfo.two_pass_quantize = FALSE;
    dinfo.dither_mode = JDITHER_ORDERED;
    dinfo.scale_num = 1/8;

Upvotes: 3

Views: 4652

Answers (1)

Kevin Colgan
Kevin Colgan

Reputation: 199

Thanks for the answers.

It is actually possible to decompress and re-compress in around 100ms. After contacting the writer of libjpeg-turbo he told me that the dinfo.scale_num property I was using was wrong. This property is the scale numerator - I also needed to set the scale_denom (denominator) property.

So the good code would be:

 dinfo.dct_method = JDCT_IFAST;
 dinfo.do_fancy_upsampling = FALSE;
 dinfo.two_pass_quantize = FALSE;
 dinfo.dither_mode = JDITHER_ORDERED;
 dinfo.scale_num = 1;
 dinfo.scale_denom = 8;

I want the code to be so fast as the image scaling should be imperceptible for the user as it's in a client application where speed/user-experience is the most important thing.

Upvotes: 4

Related Questions