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 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDllMain(HANDLE 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 memset(l_codec, 0, sizeof(opj_codec_private_t)); 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->is_decompressor = 1; 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (p_format) { 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_J2K: 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_dump_codec = (void (*) (void*, OPJ_INT32, FILE*)) j2k_dump; 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_get_codec_info = (opj_codestream_info_v2_t* (*) (void*) ) j2k_get_cstr_info; 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_get_codec_index = (opj_codestream_index_t* (*) (void*) ) j2k_get_cstr_index; 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_decode = 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t*, struct opj_event_mgr * )) opj_j2k_decode; 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_end_decompress = 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_j2k_end_decompress; 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_read_header = 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( struct opj_stream_private *, 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void *, 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t **, 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_j2k_read_header; 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_destroy = 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (void (*) (void *))opj_j2k_destroy; 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_setup_decoder = 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (void (*) (void * , opj_dparameters_t * )) opj_j2k_setup_decoder; 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_read_tile_header = 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32*, 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32*, 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32*, OPJ_INT32*, 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32*, OPJ_INT32*, 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32*, 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BOOL*, 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_j2k_read_tile_header; 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_decode_tile_data = 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BYTE*, 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_j2k_decode_tile; 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_set_decode_area = 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t*, 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32, OPJ_INT32, OPJ_INT32, OPJ_INT32, 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_j2k_set_decode_area; 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_get_decoded_tile = 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *p_codec, 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t *p_cio, 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t *p_image, 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * p_manager, 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 tile_index)) opj_j2k_get_tile; 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor = 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void * p_codec, 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 res_factor, 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * p_manager)) opj_j2k_set_decoded_resolution_factor; 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec = opj_j2k_create_decompress(); 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->m_codec) { 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_JP2: 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* get a JP2 decoder handle */ 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_dump_codec = (void (*) (void*, OPJ_INT32, FILE*)) jp2_dump; 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_get_codec_info = (opj_codestream_info_v2_t* (*) (void*) ) jp2_get_cstr_info; 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_get_codec_index = (opj_codestream_index_t* (*) (void*) ) jp2_get_cstr_index; 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_decode = 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t*, 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_decode; 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_end_decompress = 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_jp2_end_decompress; 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_read_header = 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( struct opj_stream_private *, 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void *, 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t **, 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_read_header; 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_read_tile_header = 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32*, 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32*, 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32*, 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32*, 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * , 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * , 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * , 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BOOL *, 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_read_tile_header; 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_decode_tile_data = 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32,OPJ_BYTE*,OPJ_UINT32, 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_decode_tile; 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_destroy = (void (*) (void *))opj_jp2_destroy; 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_setup_decoder = 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (void (*) (void * ,opj_dparameters_t * )) opj_jp2_setup_decoder; 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_set_decode_area = 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *, 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t*, 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32,OPJ_INT32,OPJ_INT32,OPJ_INT32, 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_set_decode_area; 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_get_decoded_tile = 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void *p_codec, 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t *p_cio, 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t *p_image, 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * p_manager, 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 tile_index)) opj_jp2_get_tile; 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor = 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (OPJ_BOOL (*) ( void * p_codec, 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 res_factor, 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_event_mgr_t * p_manager)) opj_jp2_set_decoded_resolution_factor; 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec = opj_jp2_create(OPJ_TRUE); 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->m_codec) { 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_UNKNOWN: 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_JPT: 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_set_default_event_handler(&(l_codec->m_event_mgr)); 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (opj_codec_t*) l_codec; 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_set_default_decoder_parameters(opj_dparameters_t *parameters) { 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(parameters) { 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memset(parameters, 0, sizeof(opj_dparameters_t)); 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* default decoding parameters */ 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_layer = 0; 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_reduce = 0; 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->decod_format = -1; 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cod_format = -1; 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->flags = 0; 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* UniPG>> */ 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef USE_JPWL 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_correct = OPJ_FALSE; 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_exp_comps = JPWL_EXPECTED_COMPONENTS; 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_max_tiles = JPWL_MAXIMUM_TILES; 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* USE_JPWL */ 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* <<UniPG */ 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_setup_decoder(opj_codec_t *p_codec, 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_dparameters_t *parameters 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && parameters) { 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_event_msg(&(l_codec->m_event_mgr), EVT_ERROR, 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov "Codec provided to the opj_setup_decoder function is not a decompressor handler.\n"); 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_setup_decoder(l_codec->m_codec, 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters); 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_read_header ( opj_stream_t *p_stream, 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_t *p_codec, 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t **p_image ) 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec; 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream; 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(! l_codec->is_decompressor) { 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_event_msg(&(l_codec->m_event_mgr), EVT_ERROR, 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov "Codec provided to the opj_read_header function is not a decompressor handler.\n"); 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_read_header( l_stream, 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec, 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_decode( opj_codec_t *p_codec, 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream, 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t* p_image) 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_decode(l_codec->m_codec, 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_set_decode_area( opj_codec_t *p_codec, 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t* p_image, 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 p_start_x, OPJ_INT32 p_start_y, 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 p_end_x, OPJ_INT32 p_end_y 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec) { 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_set_decode_area( l_codec->m_codec, 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_start_x, p_start_y, 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_end_x, p_end_y, 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_read_tile_header( opj_codec_t *p_codec, 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t * p_stream, 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_tile_index, 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_data_size, 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * p_tile_x0, OPJ_INT32 * p_tile_y0, 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * p_tile_x1, OPJ_INT32 * p_tile_y1, 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_nb_comps, 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BOOL * p_should_go_on) 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream && p_data_size && p_tile_index) { 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_read_tile_header( l_codec->m_codec, 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_tile_index, 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_data_size, 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_tile_x0, p_tile_y0, 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_tile_x1, p_tile_y1, 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_nb_comps, 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_should_go_on, 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr)); 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_decode_tile_data( opj_codec_t *p_codec, 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 p_tile_index, 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BYTE * p_data, 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 p_data_size, 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ) 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_data && p_stream) { 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_decode_tile_data( l_codec->m_codec, 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_tile_index, 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_data, 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_data_size, 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_get_decoded_tile( opj_codec_t *p_codec, 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream, 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t *p_image, 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 tile_index) 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_get_decoded_tile( l_codec->m_codec, 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr), 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov tile_index); 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_set_decoded_resolution_factor(opj_codec_t *p_codec, 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 res_factor ) 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( !l_codec ){ 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fprintf(stderr, "[ERROR] Input parameters of the setup_decoder function are incorrect.\n"); 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_set_decoded_resolution_factor(l_codec->m_codec, 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov res_factor, 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------- */ 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* COMPRESSION FUNCTIONS*/ 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_codec_t* OPJ_CALLCONV opj_create_compress(OPJ_CODEC_FORMAT p_format) 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t *l_codec = 00; 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec = (opj_codec_private_t*)opj_calloc(1, sizeof(opj_codec_private_t)); 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!l_codec) { 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memset(l_codec, 0, sizeof(opj_codec_private_t)); 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->is_decompressor = 0; 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch(p_format) { 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_J2K: 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_encode = (OPJ_BOOL (*) (void *, 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_j2k_encode; 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_end_compress = (OPJ_BOOL (*) ( void *, 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_j2k_end_compress; 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_start_compress = (OPJ_BOOL (*) (void *, 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_image * , 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_j2k_start_compress; 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_write_tile = (OPJ_BOOL (*) (void *, 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BYTE*, 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *) ) opj_j2k_write_tile; 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_destroy = (void (*) (void *)) opj_j2k_destroy; 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_setup_encoder = (void (*) ( void *, 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_cparameters_t *, 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_image *, 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_j2k_setup_encoder; 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec = opj_j2k_create_compress(); 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->m_codec) { 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_JP2: 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* get a JP2 decoder handle */ 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_encode = (OPJ_BOOL (*) (void *, 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_encode; 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_end_compress = (OPJ_BOOL (*) ( void *, 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_jp2_end_compress; 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_start_compress = (OPJ_BOOL (*) (void *, 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_image * , 603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_jp2_start_compress; 604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_write_tile = (OPJ_BOOL (*) (void *, 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BYTE*, 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32, 609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_stream_private *, 610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr *)) opj_jp2_write_tile; 611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_destroy = (void (*) (void *)) opj_jp2_destroy; 613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_setup_encoder = (void (*) ( void *, 615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_cparameters_t *, 616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_image *, 617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct opj_event_mgr * )) opj_jp2_setup_encoder; 618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec = opj_jp2_create(OPJ_FALSE); 620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->m_codec) { 621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_UNKNOWN: 628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case OPJ_CODEC_JPT: 629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_set_default_event_handler(&(l_codec->m_event_mgr)); 635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (opj_codec_t*) l_codec; 636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_set_default_encoder_parameters(opj_cparameters_t *parameters) { 639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(parameters) { 640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memset(parameters, 0, sizeof(opj_cparameters_t)); 641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* default coding parameters */ 642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_cinema = OPJ_OFF; 643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->max_comp_size = 0; 644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->numresolution = 6; 645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_rsiz = OPJ_STD_RSIZ; 646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cblockw_init = 64; 647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cblockh_init = 64; 648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->prog_order = OPJ_LRCP; 649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->roi_compno = -1; /* no ROI */ 650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->subsampling_dx = 1; 651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->subsampling_dy = 1; 652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->tp_on = 0; 653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->decod_format = -1; 654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cod_format = -1; 655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->tcp_rates[0] = 0; 656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->tcp_numlayers = 0; 657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_disto_alloc = 0; 658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_fixed_alloc = 0; 659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_fixed_quality = 0; 660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpip_on = OPJ_FALSE; 661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* UniPG>> */ 662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef USE_JPWL 663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_epc_on = OPJ_FALSE; 664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_hprot_MH = -1; /* -1 means unassigned */ 665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int i; 667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { 668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_hprot_TPH_tileno[i] = -1; /* unassigned */ 669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_hprot_TPH[i] = 0; /* absent */ 670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int i; 674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (i = 0; i < JPWL_MAX_NO_PACKSPECS; i++) { 675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_pprot_tileno[i] = -1; /* unassigned */ 676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_pprot_packno[i] = -1; /* unassigned */ 677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_pprot[i] = 0; /* absent */ 678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_size = 0; /* 0 means no ESD */ 681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_addr = 0; /* 0 means auto */ 682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_range = 0; /* 0 means packet */ 683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_MH = -1; /* -1 means unassigned */ 684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int i; 686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (i = 0; i < JPWL_MAX_NO_TILESPECS; i++) { 687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_TPH_tileno[i] = -1; /* unassigned */ 688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->jpwl_sens_TPH[i] = -1; /* absent */ 689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* USE_JPWL */ 692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* <<UniPG */ 693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 696ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_setup_encoder(opj_codec_t *p_codec, 697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_cparameters_t *parameters, 698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t *p_image) 699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && parameters && p_image) { 701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_setup_encoder( l_codec->m_codec, 705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters, 706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 715ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_start_compress ( opj_codec_t *p_codec, 716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t * p_image, 717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream) 718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_compression.opj_start_compress( l_codec->m_codec, 725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image, 727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr)); 728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 734ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_encode(opj_codec_t *p_info, opj_stream_t *p_stream) 735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_info && p_stream) { 737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_info; 738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_compression.opj_encode( l_codec->m_codec, 742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr)); 744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 751ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_end_compress (opj_codec_t *p_codec, 752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream) 753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_compression.opj_end_compress(l_codec->m_codec, 760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr)); 762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 768ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_end_decompress ( opj_codec_t *p_codec, 769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream) 770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream) { 772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_codec->is_decompressor) { 776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_decompression.opj_end_decompress(l_codec->m_codec, 780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 787ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_set_MCT(opj_cparameters_t *parameters, 788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_FLOAT32 * pEncodingMatrix, 789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * p_dc_shift,OPJ_UINT32 pNbComp) 790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 l_matrix_size = pNbComp * pNbComp * (OPJ_UINT32)sizeof(OPJ_FLOAT32); 792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 l_dc_shift_size = pNbComp * (OPJ_UINT32)sizeof(OPJ_INT32); 793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 l_mct_total_size = l_matrix_size + l_dc_shift_size; 794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* add MCT capability */ 796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 rsiz = (OPJ_INT32)parameters->cp_rsiz | (OPJ_INT32)OPJ_MCT; 797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->cp_rsiz = (OPJ_RSIZ_CAPABILITIES)rsiz; 798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->irreversible = 1; 799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* use array based MCT */ 801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->tcp_mct = 2; 802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov parameters->mct_data = opj_malloc(l_mct_total_size); 803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! parameters->mct_data) { 804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memcpy(parameters->mct_data,pEncodingMatrix,l_matrix_size); 808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memcpy(((OPJ_BYTE *) parameters->mct_data) + l_matrix_size,p_dc_shift,l_dc_shift_size); 809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_TRUE; 811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 813ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovOPJ_BOOL OPJ_CALLCONV opj_write_tile ( opj_codec_t *p_codec, 814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 p_tile_index, 815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BYTE * p_data, 816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 p_data_size, 817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t *p_stream ) 818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec && p_stream && p_data) { 820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_private_t * l_stream = (opj_stream_private_t *) p_stream; 822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (l_codec->is_decompressor) { 824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->m_codec_data.m_compression.opj_write_tile( l_codec->m_codec, 828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_tile_index, 829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_data, 830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_data_size, 831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream, 832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(l_codec->m_event_mgr) ); 833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return OPJ_FALSE; 836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------- */ 839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_destroy_codec(opj_codec_t *p_codec) 841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec) { 843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t * l_codec = (opj_codec_private_t *) p_codec; 844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (l_codec->is_decompressor) { 846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_decompression.opj_destroy(l_codec->m_codec); 847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else { 849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec_data.m_compression.opj_destroy(l_codec->m_codec); 850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->m_codec = 00; 853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(l_codec); 854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------- */ 858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_dump_codec( opj_codec_t *p_codec, 860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 info_flag, 861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FILE* output_stream) 862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec) { 864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec; 865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_codec->opj_dump_codec(l_codec->m_codec, info_flag, output_stream); 867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fprintf(stderr, "[ERROR] Input parameter of the dump_codec function are incorrect.\n"); 871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_codestream_info_v2_t* OPJ_CALLCONV opj_get_cstr_info(opj_codec_t *p_codec) 875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec) { 877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec; 878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->opj_get_codec_info(l_codec->m_codec); 880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_v2_t **cstr_info) { 886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (cstr_info) { 887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ((*cstr_info)->m_default_tile_info.tccp_info){ 889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free((*cstr_info)->m_default_tile_info.tccp_info); 890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ((*cstr_info)->tile_info){ 893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FIXME not used for the moment*/ 894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free((*cstr_info)); 897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*cstr_info) = NULL; 898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_codestream_index_t * OPJ_CALLCONV opj_get_cstr_index(opj_codec_t *p_codec) 902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_codec) { 904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_codec_private_t* l_codec = (opj_codec_private_t*) p_codec; 905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_codec->opj_get_codec_index(l_codec->m_codec); 907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_destroy_cstr_index(opj_codestream_index_t **p_cstr_index) 913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (*p_cstr_index){ 915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov j2k_destroy_cstr_index(*p_cstr_index); 916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*p_cstr_index) = NULL; 917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_stream_t* OPJ_CALLCONV opj_stream_create_default_file_stream_v3 (const char *fname, OPJ_BOOL p_is_read_stream) 921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return opj_stream_create_file_stream_v3(fname, OPJ_J2K_STREAM_CHUNK_SIZE, p_is_read_stream); 923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_stream_t* OPJ_CALLCONV opj_stream_create_file_stream_v3 ( 926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char *fname, 927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_SIZE_T p_size, 928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_BOOL p_is_read_stream) 929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_t* l_stream = 00; 931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FILE *p_file; 932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char *mode; 933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! fname) { 935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(p_is_read_stream) mode = "rb"; else mode = "wb"; 939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_file = fopen(fname, mode); 941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! p_file) { 943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_stream = opj_stream_create(p_size,p_is_read_stream); 947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (! l_stream) { 948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fclose(p_file); 949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_set_user_data_v3(l_stream, p_file, (opj_stream_free_user_data_fn) fclose); 953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_set_user_data_length(l_stream, opj_get_data_length_from_file(p_file)); 954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_set_read_function(l_stream, (opj_stream_read_fn) opj_read_from_file); 955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_set_write_function(l_stream, (opj_stream_write_fn) opj_write_from_file); 956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_set_skip_function(l_stream, (opj_stream_skip_fn) opj_skip_from_file); 957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_stream_set_seek_function(l_stream, (opj_stream_seek_fn) opj_seek_from_file); 958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return l_stream; 960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 961