|  | TurboJPEG Java Wrapper | 
|  | ====================== | 
|  |  | 
|  | The TurboJPEG shared library can optionally be built with a Java Native | 
|  | Interface wrapper, which allows the library to be loaded and used directly from | 
|  | Java applications.  The Java front end for this is defined in several classes | 
|  | located under org/libjpegturbo/turbojpeg.  The source code for these Java | 
|  | classes is licensed under a BSD-style license, so the files can be incorporated | 
|  | directly into both open source and proprietary projects without restriction.  A | 
|  | Java archive (JAR) file containing these classes is also shipped with the | 
|  | "official" distribution packages of libjpeg-turbo. | 
|  |  | 
|  | TJExample.java, which should also be located in the same directory as this | 
|  | README file, demonstrates how to use the TurboJPEG Java API to compress and | 
|  | decompress JPEG images in memory. | 
|  |  | 
|  |  | 
|  | Performance Pitfalls | 
|  | -------------------- | 
|  |  | 
|  | The TurboJPEG Java API defines several convenience methods that can allocate | 
|  | image buffers or instantiate classes to hold the result of compress, | 
|  | decompress, or transform operations.  However, if you use these methods, then | 
|  | be mindful of the amount of new data you are creating on the heap.  It may be | 
|  | necessary to manually invoke the garbage collector to prevent heap exhaustion | 
|  | or to prevent performance degradation.  Background garbage collection can kill | 
|  | performance, particularly in a multi-threaded environment (Java pauses all | 
|  | threads when the GC runs.) | 
|  |  | 
|  | The TurboJPEG Java API always gives you the option of pre-allocating your own | 
|  | source and destination buffers, which allows you to re-use those buffers for | 
|  | compressing/decompressing multiple images.  If the image sequence you are | 
|  | compressing or decompressing consists of images of the same size, then | 
|  | pre-allocating the buffers is recommended. | 
|  |  | 
|  |  | 
|  | Installation Directory | 
|  | ---------------------- | 
|  |  | 
|  | The TurboJPEG Java Wrapper will look for the TurboJPEG JNI library | 
|  | (libturbojpeg.so, libturbojpeg.jnilib, or turbojpeg.dll) in the system library | 
|  | paths or in any paths specified in LD_LIBRARY_PATH (Un*x), DYLD_LIBRARY_PATH | 
|  | (Mac), or PATH (Windows.)  Failing this, on Un*x and Mac systems, the wrapper | 
|  | will look for the JNI library under the library directory configured when | 
|  | libjpeg-turbo was built.  If that library directory is | 
|  | /opt/libjpeg-turbo/lib32, then /opt/libjpeg-turbo/lib64 is also searched, and | 
|  | vice versa. | 
|  |  | 
|  | If you installed the JNI library into another directory, then you will need | 
|  | to pass an argument of -Djava.library.path={path_to_JNI_library} to java, or | 
|  | manipulate LD_LIBRARY_PATH, DYLD_LIBRARY_PATH, or PATH to include the directory | 
|  | containing the JNI library. |