/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef LIBJPEG_HOOK_H_ #define LIBJPEG_HOOK_H_ extern "C" { #include "jinclude.h" #include "jpeglib.h" #include "jerror.h" } #include "inputstream_wrapper.h" #include "outputstream_wrapper.h" #include <stdint.h> /** * DestManager holds the libjpeg destination manager struct and * a holder with a java OutputStream. */ typedef struct { struct jpeg_destination_mgr mgr; OutputStreamWrapper *outStream; } DestManager; // Initializes the DestManager struct, sets up the jni refs int32_t MakeDst(j_compress_ptr cinfo, JNIEnv *env, jobject outStream); /** * Updates the jni env pointer. This should be called in the beginning of any * JNI method in jpegstream.cpp before CleanDst or any of the libjpeg functions * that can trigger a call to an OutputStreamWrapper method. */ void UpdateDstEnv(j_compress_ptr cinfo, JNIEnv* env); // Cleans the jni refs. To wipe the compress object call jpeg_destroy_compress void CleanDst(j_compress_ptr cinfo); /** * SourceManager holds the libjpeg source manager struct and a * holder with a java InputStream. */ typedef struct { struct jpeg_source_mgr mgr; boolean start_of_file; InputStreamWrapper *inStream; } SourceManager; // Initializes the SourceManager struct, sets up the jni refs int32_t MakeSrc(j_decompress_ptr cinfo, JNIEnv *env, jobject inStream); /** * Updates the jni env pointer. This should be called in the beginning of any * JNI method in jpegstream.cpp before CleanSrc or any of the libjpeg functions * that can trigger a call to an InputStreamWrapper method. */ void UpdateSrcEnv(j_decompress_ptr cinfo, JNIEnv* env); // Cleans the jni refs. To wipe the decompress object, call jpeg_destroy_decompress void CleanSrc(j_decompress_ptr cinfo); #endif // LIBJPEG_HOOK_H_