1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The copyright in this software is being made available under the 2-clauses 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * BSD License, included below. This software may be subject to other third 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * party and contributor rights, including patent rights, and no such rights 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * are granted under this license. 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2005, Herve Drolon, FreeImage Team 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2012, CS Systemes d'Information, France 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * All rights reserved. 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Redistribution and use in source and binary forms, with or without 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * modification, are permitted provided that the following conditions 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * are met: 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 1. Redistributions of source code must retain the above copyright 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * notice, this list of conditions and the following disclaimer. 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 2. Redistributions in binary form must reproduce the above copyright 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * notice, this list of conditions and the following disclaimer in the 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * documentation and/or other materials provided with the distribution. 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * POSSIBILITY OF SUCH DAMAGE. 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef _WIN32 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <windows.h> 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* _WIN32 */ 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "opj_includes.h" 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------- */ 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Functions to set the message handlers */ 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_set_info_handler( opj_codec_t * p_codec, 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_msg_callback p_callback, 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void * p_user_data) 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(! l_codec){ 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_event_mgr.info_handler = p_callback; 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_event_mgr.m_info_data = p_user_data; 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_set_warning_handler( opj_codec_t * p_codec, 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_msg_callback p_callback, 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void * p_user_data) 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec) { 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_event_mgr.warning_handler = p_callback; 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_event_mgr.m_warning_data = p_user_data; 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_set_error_handler(opj_codec_t * p_codec, 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_msg_callback p_callback, 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void * p_user_data) 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec) { 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_event_mgr.error_handler = p_callback; 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_event_mgr.m_error_data = p_user_data; 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------- */ 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic OPJ_SIZE_T opj_read_from_file (void * p_buffer, OPJ_SIZE_T p_nb_bytes, FILE * p_file) 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_SIZE_T l_nb_read = fread(p_buffer,1,p_nb_bytes,p_file); 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_nb_read ? l_nb_read : (OPJ_SIZE_T)-1; 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic OPJ_UINT64 opj_get_data_length_from_file (FILE * p_file) 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_OFF_T file_length = 0; 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_FSEEK(p_file, 0, SEEK_END); 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov file_length = (OPJ_OFF_T)OPJ_FTELL(p_file); 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_FSEEK(p_file, 0, SEEK_SET); 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (OPJ_UINT64)file_length; 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic OPJ_SIZE_T opj_write_from_file (void * p_buffer, OPJ_SIZE_T p_nb_bytes, FILE * p_file) 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return fwrite(p_buffer,1,p_nb_bytes,p_file); 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic OPJ_OFF_T opj_skip_from_file (OPJ_OFF_T p_nb_bytes, FILE * p_user_data) 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (OPJ_FSEEK(p_user_data,p_nb_bytes,SEEK_CUR)) { 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return -1; 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return p_nb_bytes; 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic OPJ_BOOL opj_seek_from_file (OPJ_OFF_T p_nb_bytes, FILE * p_user_data) 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (OPJ_FSEEK(p_user_data,p_nb_bytes,SEEK_SET)) { 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------- */ 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef _WIN32 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef OPJ_STATIC 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovBOOL APIENTRY 135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovDllMain(HINSTANCE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_ARG_NOT_USED(lpReserved); 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_ARG_NOT_USED(hModule); 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (ul_reason_for_call) { 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case DLL_PROCESS_ATTACH : 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case DLL_PROCESS_DETACH : 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case DLL_THREAD_ATTACH : 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case DLL_THREAD_DETACH : 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* OPJ_STATIC */ 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* _WIN32 */ 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------- */ 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovconst char* OPJ_CALLCONV opj_version(void) { 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_PACKAGE_VERSION; 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------- */ 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* DECOMPRESSION FUNCTIONS*/ 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_codec_t* OPJ_CALLCONV opj_create_decompress(OPJ_CODEC_FORMAT p_format) 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t *l_codec = 00; 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec = (opj_codec_private_t*) opj_calloc(1, sizeof(opj_codec_private_t)); 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!l_codec){ 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->is_decompressor = 1; 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (p_format) { 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_J2K: 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_dump_codec = (void (*) (void*, OPJ_INT32, FILE*)) j2k_dump; 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_get_codec_info = (opj_codestream_info_v2_t* (*) (void*) ) j2k_get_cstr_info; 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_get_codec_index = (opj_codestream_index_t* (*) (void*) ) j2k_get_cstr_index; 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_decode = 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t*, struct opj_event_mgr * )) opj_j2k_decode; 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_end_decompress = 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_j2k_end_decompress; 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_read_header = 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( struct opj_stream_private *, 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void *, 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t **, 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_j2k_read_header; 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_destroy = 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (void (*) (void *))opj_j2k_destroy; 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_setup_decoder = 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (void (*) (void * , opj_dparameters_t * )) opj_j2k_setup_decoder; 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_read_tile_header = 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32*, 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32*, 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32*, OPJ_INT32*, 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32*, OPJ_INT32*, 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32*, 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BOOL*, 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_j2k_read_tile_header; 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_decode_tile_data = 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BYTE*, 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_j2k_decode_tile; 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_set_decode_area = 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t*, 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32, OPJ_INT32, OPJ_INT32, OPJ_INT32, 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_j2k_set_decode_area; 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_get_decoded_tile = 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *p_codec, 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t *p_cio, 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t *p_image, 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * p_manager, 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 tile_index)) opj_j2k_get_tile; 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor = 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void * p_codec, 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 res_factor, 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * p_manager)) opj_j2k_set_decoded_resolution_factor; 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec = opj_j2k_create_decompress(); 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->m_codec) { 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_JP2: 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* get a JP2 decoder handle */ 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_dump_codec = (void (*) (void*, OPJ_INT32, FILE*)) jp2_dump; 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_get_codec_info = (opj_codestream_info_v2_t* (*) (void*) ) jp2_get_cstr_info; 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_get_codec_index = (opj_codestream_index_t* (*) (void*) ) jp2_get_cstr_index; 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_decode = 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t*, 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_decode; 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_end_decompress = 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_jp2_end_decompress; 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_read_header = 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( struct opj_stream_private *, 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void *, 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t **, 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_read_header; 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_read_tile_header = 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32*, 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32*, 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32*, 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32*, 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * , 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * , 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * , 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BOOL *, 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_read_tile_header; 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_decode_tile_data = 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32,OPJ_BYTE*,OPJ_UINT32, 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_decode_tile; 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_destroy = (void (*) (void *))opj_jp2_destroy; 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_setup_decoder = 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (void (*) (void * ,opj_dparameters_t * )) opj_jp2_setup_decoder; 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_set_decode_area = 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t*, 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32,OPJ_INT32,OPJ_INT32,OPJ_INT32, 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_set_decode_area; 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_get_decoded_tile = 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *p_codec, 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t *p_cio, 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t *p_image, 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * p_manager, 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 tile_index)) opj_jp2_get_tile; 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor = 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void * p_codec, 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 res_factor, 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_event_mgr_t * p_manager)) opj_jp2_set_decoded_resolution_factor; 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec = opj_jp2_create(OPJ_TRUE); 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->m_codec) { 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_UNKNOWN: 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_JPT: 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_set_default_event_handler(&(l_codec->m_event_mgr)); 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (opj_codec_t*) l_codec; 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters) { 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(parameters) { 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memset(parameters, 0, sizeof(opj_dparameters_t)); 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* default decoding parameters */ 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_layer = 0; 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_reduce = 0; 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->decod_format = -1; 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cod_format = -1; 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->flags = 0; 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* UniPG>> */ 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef USE_JPWL 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_correct = OPJ_FALSE; 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS; 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES; 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* USE_JPWL */ 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* <<UniPG */ 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec, 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_dparameters_t *parameters 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && parameters) { 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_event_msg(&(l_codec->m_event_mgr), EVT_ERROR, 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov "Codec provided to the opj_setup_decoder function is not a decompressor handler.\n"); 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_setup_decoder(l_codec->m_codec, 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters); 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_read_header ( opj_stream_t *p_stream, 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_t *p_codec, 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t **p_image ) 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec; 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream; 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(! l_codec->is_decompressor) { 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_event_msg(&(l_codec->m_event_mgr), EVT_ERROR, 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov "Codec provided to the opj_read_header function is not a decompressor handler.\n"); 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_read_header( l_stream, 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec, 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_decode( opj_codec_t *p_codec, 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream, 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t* p_image) 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_decode(l_codec->m_codec, 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_set_decode_area( opj_codec_t *p_codec, 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t* p_image, 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 p_start_x, OPJ_INT32 p_start_y, 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 p_end_x, OPJ_INT32 p_end_y 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec) { 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_set_decode_area( l_codec->m_codec, 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_start_x, p_start_y, 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_end_x, p_end_y, 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_read_tile_header( opj_codec_t *p_codec, 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t * p_stream, 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_tile_index, 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_data_size, 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * p_tile_x0, OPJ_INT32 * p_tile_y0, 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * p_tile_x1, OPJ_INT32 * p_tile_y1, 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_nb_comps, 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BOOL * p_should_go_on) 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream && p_data_size && p_tile_index) { 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_read_tile_header( l_codec->m_codec, 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_tile_index, 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_data_size, 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_tile_x0, p_tile_y0, 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_tile_x1, p_tile_y1, 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_nb_comps, 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_should_go_on, 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr)); 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_decode_tile_data( opj_codec_t *p_codec, 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 p_tile_index, 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BYTE * p_data, 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 p_data_size, 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_data && p_stream) { 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_decode_tile_data( l_codec->m_codec, 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_tile_index, 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_data, 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_data_size, 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_get_decoded_tile( opj_codec_t *p_codec, 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream, 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t *p_image, 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 tile_index) 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_get_decoded_tile( l_codec->m_codec, 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr), 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov tile_index); 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_set_decoded_resolution_factor(opj_codec_t *p_codec, 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 res_factor ) 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( !l_codec ){ 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fprintf(stderr, "[ERROR] Input parameters of the setup_decoder function are incorrect.\n"); 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor(l_codec->m_codec, 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov res_factor, 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------- */ 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* COMPRESSION FUNCTIONS*/ 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_codec_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT p_format) 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t *l_codec = 00; 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec = (opj_codec_private_t*)opj_calloc(1, sizeof(opj_codec_private_t)); 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!l_codec) { 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->is_decompressor = 0; 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch(p_format) { 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_J2K: 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_encode = (OPJ_BOOL (*) (void *, 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_j2k_encode; 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_end_compress = (OPJ_BOOL (*) ( void *, 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_j2k_end_compress; 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_start_compress = (OPJ_BOOL (*) (void *, 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_image * , 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_j2k_start_compress; 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_write_tile = (OPJ_BOOL (*) (void *, 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BYTE*, 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *) ) opj_j2k_write_tile; 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_destroy = (void (*) (void *)) opj_j2k_destroy; 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov l_codec->m_codec_data.m_compression.opj_setup_encoder = (OPJ_BOOL (*) ( void *, 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_cparameters_t *, 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_image *, 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_j2k_setup_encoder; 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec = opj_j2k_create_compress(); 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->m_codec) { 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_JP2: 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* get a JP2 decoder handle */ 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_encode = (OPJ_BOOL (*) (void *, 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_encode; 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_end_compress = (OPJ_BOOL (*) ( void *, 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_jp2_end_compress; 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_start_compress = (OPJ_BOOL (*) (void *, 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_image * , 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_jp2_start_compress; 602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_write_tile = (OPJ_BOOL (*) (void *, 604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BYTE*, 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_jp2_write_tile; 609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_destroy = (void (*) (void *)) opj_jp2_destroy; 611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 612e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov l_codec->m_codec_data.m_compression.opj_setup_encoder = (OPJ_BOOL (*) ( void *, 613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_cparameters_t *, 614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_image *, 615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_setup_encoder; 616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec = opj_jp2_create(OPJ_FALSE); 618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->m_codec) { 619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_UNKNOWN: 626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_JPT: 627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_set_default_event_handler(&(l_codec->m_event_mgr)); 633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (opj_codec_t*) l_codec; 634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters) { 637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(parameters) { 638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memset(parameters, 0, sizeof(opj_cparameters_t)); 639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* default coding parameters */ 640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov parameters->cp_cinema = OPJ_OFF; /* DEPRECATED */ 641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov parameters->rsiz = OPJ_PROFILE_NONE; 642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->max_comp_size = 0; 643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->numresolution = 6; 644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov parameters->cp_rsiz = OPJ_STD_RSIZ; /* DEPRECATED */ 645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cblockw_init = 64; 646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cblockh_init = 64; 647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->prog_order = OPJ_LRCP; 648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->roi_compno = -1; /* no ROI */ 649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->subsampling_dx = 1; 650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->subsampling_dy = 1; 651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->tp_on = 0; 652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->decod_format = -1; 653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cod_format = -1; 654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->tcp_rates[0] = 0; 655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->tcp_numlayers = 0; 656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_disto_alloc = 0; 657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_fixed_alloc = 0; 658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_fixed_quality = 0; 659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpip_on = OPJ_FALSE; 660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* UniPG>> */ 661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef USE_JPWL 662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_epc_on = OPJ_FALSE; 663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_hprot_MH = -1; /* -1 means unassigned */ 664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int i; 666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { 667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_hprot_TPH_tileno[i] = -1; /* unassigned */ 668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_hprot_TPH[i] = 0; /* absent */ 669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int i; 673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) { 674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_pprot_tileno[i] = -1; /* unassigned */ 675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_pprot_packno[i] = -1; /* unassigned */ 676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_pprot[i] = 0; /* absent */ 677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_size = 0; /* 0 means no ESD */ 680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_addr = 0; /* 0 means auto */ 681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_range = 0; /* 0 means packet */ 682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_MH = -1; /* -1 means unassigned */ 683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int i; 685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { 686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_TPH_tileno[i] = -1; /* unassigned */ 687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_TPH[i] = -1; /* absent */ 688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* USE_JPWL */ 691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* <<UniPG */ 692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 695ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_setup_encoder(opj_codec_t *p_codec, 696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_cparameters_t *parameters, 697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t *p_image) 698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && parameters && p_image) { 700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_setup_encoder( l_codec->m_codec, 704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters, 705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 714ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_start_compress ( opj_codec_t *p_codec, 715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t * p_image, 716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream) 717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_compression.opj_start_compress( l_codec->m_codec, 724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr)); 727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 733ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_encode(opj_codec_t *p_info, opj_stream_t *p_stream) 734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_info && p_stream) { 736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_info; 737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_compression.opj_encode( l_codec->m_codec, 741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr)); 743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 750ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_end_compress (opj_codec_t *p_codec, 751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream) 752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_compression.opj_end_compress(l_codec->m_codec, 759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr)); 761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 767ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_end_decompress ( opj_codec_t *p_codec, 768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream) 769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_end_decompress(l_codec->m_codec, 779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 786ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_set_MCT(opj_cparameters_t *parameters, 787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_FLOAT32 * pEncodingMatrix, 788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * p_dc_shift,OPJ_UINT32 pNbComp) 789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 l_matrix_size = pNbComp * pNbComp * (OPJ_UINT32)sizeof(OPJ_FLOAT32); 791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 l_dc_shift_size = pNbComp * (OPJ_UINT32)sizeof(OPJ_INT32); 792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 l_mct_total_size = l_matrix_size + l_dc_shift_size; 793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* add MCT capability */ 795e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (OPJ_IS_PART2(parameters->rsiz)) { 796e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov parameters->rsiz |= OPJ_EXTENSION_MCT; 797e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } else { 798e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov parameters->rsiz = ((OPJ_PROFILE_PART2) | (OPJ_EXTENSION_MCT)); 799e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->irreversible = 1; 801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* use array based MCT */ 803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->tcp_mct = 2; 804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->mct_data = opj_malloc(l_mct_total_size); 805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! parameters->mct_data) { 806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memcpy(parameters->mct_data,pEncodingMatrix,l_matrix_size); 810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memcpy(((OPJ_BYTE *) parameters->mct_data) + l_matrix_size,p_dc_shift,l_dc_shift_size); 811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 815ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_write_tile ( opj_codec_t *p_codec, 816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 p_tile_index, 817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BYTE * p_data, 818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 p_data_size, 819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream ) 820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream && p_data) { 822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (l_codec->is_decompressor) { 826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_compression.opj_write_tile( l_codec->m_codec, 830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_tile_index, 831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_data, 832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_data_size, 833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------- */ 841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_destroy_codec(opj_codec_t *p_codec) 843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec) { 845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (l_codec->is_decompressor) { 848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_destroy(l_codec->m_codec); 849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else { 851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_destroy(l_codec->m_codec); 852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec = 00; 855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------- */ 860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_dump_codec( opj_codec_t *p_codec, 862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 info_flag, 863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FILE* output_stream) 864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec) { 866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec; 867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_dump_codec(l_codec->m_codec, info_flag, output_stream); 869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fprintf(stderr, "[ERROR] Input parameter of the dump_codec function are incorrect.\n"); 873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_codestream_info_v2_t* OPJ_CALLCONV opj_get_cstr_info(opj_codec_t *p_codec) 877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec) { 879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec; 880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->opj_get_codec_info(l_codec->m_codec); 882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_v2_t **cstr_info) { 888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (cstr_info) { 889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ((*cstr_info)->m_default_tile_info.tccp_info){ 891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free((*cstr_info)->m_default_tile_info.tccp_info); 892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ((*cstr_info)->tile_info){ 895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FIXME not used for the moment*/ 896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free((*cstr_info)); 899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*cstr_info) = NULL; 900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_codestream_index_t * OPJ_CALLCONV opj_get_cstr_index(opj_codec_t *p_codec) 904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec) { 906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec; 907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->opj_get_codec_index(l_codec->m_codec); 909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_destroy_cstr_index(opj_codestream_index_t **p_cstr_index) 915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (*p_cstr_index){ 917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov j2k_destroy_cstr_index(*p_cstr_index); 918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*p_cstr_index) = NULL; 919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 922e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovopj_stream_t* OPJ_CALLCONV opj_stream_create_default_file_stream (const char *fname, OPJ_BOOL p_is_read_stream) 923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 924e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return opj_stream_create_file_stream(fname, OPJ_J2K_STREAM_CHUNK_SIZE, p_is_read_stream); 925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 927e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovopj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream ( 928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char *fname, 929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_SIZE_T p_size, 930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BOOL p_is_read_stream) 931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t* l_stream = 00; 933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FILE *p_file; 934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char *mode; 935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! fname) { 937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(p_is_read_stream) mode = "rb"; else mode = "wb"; 941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_file = fopen(fname, mode); 943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! p_file) { 945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream = opj_stream_create(p_size,p_is_read_stream); 949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_stream) { 950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fclose(p_file); 951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 954e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov opj_stream_set_user_data(l_stream, p_file, (opj_stream_free_user_data_fn) fclose); 955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_set_user_data_length(l_stream, opj_get_data_length_from_file(p_file)); 956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_set_read_function(l_stream, (opj_stream_read_fn) opj_read_from_file); 957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_set_write_function(l_stream, (opj_stream_write_fn) opj_write_from_file); 958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_set_skip_function(l_stream, (opj_stream_skip_fn) opj_skip_from_file); 959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_set_seek_function(l_stream, (opj_stream_seek_fn) opj_seek_from_file); 960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_stream; 962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 963