Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

How to build a dynamic DLL of ijg80b?

vanselm
Beginner
343 Views
Hello,
I have downloaded the evaluation version of IPP 7.1 samples and now I'm trying to build a Windows DLL of the Jpeg core library ijg80b.
First of all, I followed the installation instruction here. I have executed the following build command:
perl build.pl --cmake=image-codecs,ia32,vc2010,d,mt,release --build
The build process was successfully completed and the ijg_timing.exe was generated, for example. However, the core library ijg80b.lib ist still a static library. I tried to adapt the project settings of the ijg80b project, but as soon as I set the IJG_DLLdefine within the jmorecfg.h file, I get a link error telling me that the ijg80b.lib file cannot be opened.
Could you please help me to generate the DLL of ijg80b project?
We plan to buy the IPP 7.1 license. Will we then get the prebuild ijg80b.dll, too? Thanks.
Best regards,
Vitali
0 Kudos
5 Replies
vanselm
Beginner
343 Views
Hello,
I have managed to build a DLL out of the ijg80b project, finally.
I have done a performance comparison between the basic ijg library (version 8d), the IPP adapted ijg80b and the libjpeg-turbo (version 1.1.1). I did this comparison with a 800x600 px RGB24 images coming from the webcam and be directly encoded and decoded on the fly. "jpeg_set_defaults()" is called and then only the quality of 75% is set. The underlying system is Win 7 64 bit, Intel Core 2 Duo 3 GHz, 2 GB RAM.
Here are the results in milliseconds:
| Compression time | Decompression time |
---------------------------------------------------------------------
Basic IJG | 16 ms | 8 |
---------------------------------------------------------------------
IPP based | 9 | 6 |
---------------------------------------------------------------------
turbo | 4 | 3 |
---------------------------------------------------------------------
Actually, I thought that the performance between IPP based and turbo library would not differ that much. May be, I have to do more on my project settings to accelerate the IPP based library a little bit more. I use the "ippj.lib" as inlcude library only. Furthermore, I have generated the image-codecs sample for 32 bit system "ia32". I will try the 64 bit version and see, whether it will increase the performance.
If you have some advices concerning how to get the IPP based ijg80b version faster, then let me please know about it. Thanks.
Best regards,
Vitali
0 Kudos
Chuck_De_Sylva
Beginner
343 Views
Would it be possible for you to supply the workload? Or more details on how you called the .dlls?

Thanks,
Chuck
0 Kudos
vanselm
Beginner
343 Views
Hello Chuck,
1) My test application links to the .lib file of the basic IJG library and imports the "jpeglib.h" header file of the basic library. I use the standard function calls for compression and decompression as: "jpeg_mem_dest()", "jpeg_set_defaults()", "jpeg_start_compress()", "jpeg_write_scanlines()" and so on.
2) As I have already explained, I have downloaded the IPP 7.1 Samples in order to compile the ijg80b as a DLL. Therefore, I have made some project settings of ijg80b project. It links the "ippj.lib" only.
3) Before executing my test application, I place the DLLs one after the other into the same directory, where my .exe file is. For the ijg80b DLL I place the following IPP DLLs additionally:
ippcore-7.0.dll
ippj-7.0.dll
ippjp8-7.0.dll
These IPP DLLs come from the IPP 7.0.7 ia32 evaluation installation.
Best regards,
Vitali
0 Kudos
Chuck_De_Sylva
Beginner
343 Views
Vitali,

How do you initialize IPP? Do you call ippInit() or a specific version of ippInitCpu()?

- Chuck
0 Kudos
vanselm
Beginner
343 Views
Hello Chuck,
I do not initialize the IPP at all. I substitute the DLL of the basic JPEG library by the IPP adapted version. Since they both have the same interface, it works well. I have debuged into such calls as "jpeg_write_scanlines()" and have seen that the IPP macros/defines work and thus the IPP specific functions are called. The lightly better performance indicates that the IPP is involved, too.
Where should I initialize the IPP? Once, within the constructor of my application? Thanks.
Best regards,
Vitali
0 Kudos
Reply