xref: /aosp_15_r20/external/pdfium/third_party/libopenjpeg/cio.c (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker /*
2*3ac0a46fSAndroid Build Coastguard Worker  * The copyright in this software is being made available under the 2-clauses
3*3ac0a46fSAndroid Build Coastguard Worker  * BSD License, included below. This software may be subject to other third
4*3ac0a46fSAndroid Build Coastguard Worker  * party and contributor rights, including patent rights, and no such rights
5*3ac0a46fSAndroid Build Coastguard Worker  * are granted under this license.
6*3ac0a46fSAndroid Build Coastguard Worker  *
7*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
8*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2002-2014, Professor Benoit Macq
9*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2001-2003, David Janssens
10*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2002-2003, Yannick Verschueren
11*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2003-2007, Francois-Olivier Devaux
12*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2003-2014, Antonin Descampe
13*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2005, Herve Drolon, FreeImage Team
14*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
15*3ac0a46fSAndroid Build Coastguard Worker  * Copyright (c) 2012, CS Systemes d'Information, France
16*3ac0a46fSAndroid Build Coastguard Worker  * All rights reserved.
17*3ac0a46fSAndroid Build Coastguard Worker  *
18*3ac0a46fSAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
19*3ac0a46fSAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
20*3ac0a46fSAndroid Build Coastguard Worker  * are met:
21*3ac0a46fSAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright
22*3ac0a46fSAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
23*3ac0a46fSAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright
24*3ac0a46fSAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in the
25*3ac0a46fSAndroid Build Coastguard Worker  *    documentation and/or other materials provided with the distribution.
26*3ac0a46fSAndroid Build Coastguard Worker  *
27*3ac0a46fSAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
28*3ac0a46fSAndroid Build Coastguard Worker  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29*3ac0a46fSAndroid Build Coastguard Worker  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30*3ac0a46fSAndroid Build Coastguard Worker  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
31*3ac0a46fSAndroid Build Coastguard Worker  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32*3ac0a46fSAndroid Build Coastguard Worker  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33*3ac0a46fSAndroid Build Coastguard Worker  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34*3ac0a46fSAndroid Build Coastguard Worker  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35*3ac0a46fSAndroid Build Coastguard Worker  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36*3ac0a46fSAndroid Build Coastguard Worker  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37*3ac0a46fSAndroid Build Coastguard Worker  * POSSIBILITY OF SUCH DAMAGE.
38*3ac0a46fSAndroid Build Coastguard Worker  */
39*3ac0a46fSAndroid Build Coastguard Worker 
40*3ac0a46fSAndroid Build Coastguard Worker #include "opj_includes.h"
41*3ac0a46fSAndroid Build Coastguard Worker 
42*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */
43*3ac0a46fSAndroid Build Coastguard Worker 
44*3ac0a46fSAndroid Build Coastguard Worker 
45*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */
46*3ac0a46fSAndroid Build Coastguard Worker 
opj_write_bytes_BE(OPJ_BYTE * p_buffer,OPJ_UINT32 p_value,OPJ_UINT32 p_nb_bytes)47*3ac0a46fSAndroid Build Coastguard Worker void opj_write_bytes_BE(OPJ_BYTE * p_buffer, OPJ_UINT32 p_value,
48*3ac0a46fSAndroid Build Coastguard Worker                         OPJ_UINT32 p_nb_bytes)
49*3ac0a46fSAndroid Build Coastguard Worker {
50*3ac0a46fSAndroid Build Coastguard Worker     const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value) + sizeof(
51*3ac0a46fSAndroid Build Coastguard Worker                                       OPJ_UINT32) - p_nb_bytes;
52*3ac0a46fSAndroid Build Coastguard Worker 
53*3ac0a46fSAndroid Build Coastguard Worker     assert(p_nb_bytes > 0 && p_nb_bytes <=  sizeof(OPJ_UINT32));
54*3ac0a46fSAndroid Build Coastguard Worker 
55*3ac0a46fSAndroid Build Coastguard Worker     memcpy(p_buffer, l_data_ptr, p_nb_bytes);
56*3ac0a46fSAndroid Build Coastguard Worker }
57*3ac0a46fSAndroid Build Coastguard Worker 
opj_write_bytes_LE(OPJ_BYTE * p_buffer,OPJ_UINT32 p_value,OPJ_UINT32 p_nb_bytes)58*3ac0a46fSAndroid Build Coastguard Worker void opj_write_bytes_LE(OPJ_BYTE * p_buffer, OPJ_UINT32 p_value,
59*3ac0a46fSAndroid Build Coastguard Worker                         OPJ_UINT32 p_nb_bytes)
60*3ac0a46fSAndroid Build Coastguard Worker {
61*3ac0a46fSAndroid Build Coastguard Worker     const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value) + p_nb_bytes - 1;
62*3ac0a46fSAndroid Build Coastguard Worker     OPJ_UINT32 i;
63*3ac0a46fSAndroid Build Coastguard Worker 
64*3ac0a46fSAndroid Build Coastguard Worker     assert(p_nb_bytes > 0 && p_nb_bytes <= sizeof(OPJ_UINT32));
65*3ac0a46fSAndroid Build Coastguard Worker 
66*3ac0a46fSAndroid Build Coastguard Worker     for (i = 0; i < p_nb_bytes; ++i) {
67*3ac0a46fSAndroid Build Coastguard Worker         *(p_buffer++) = *(l_data_ptr--);
68*3ac0a46fSAndroid Build Coastguard Worker     }
69*3ac0a46fSAndroid Build Coastguard Worker }
70*3ac0a46fSAndroid Build Coastguard Worker 
opj_read_bytes_BE(const OPJ_BYTE * p_buffer,OPJ_UINT32 * p_value,OPJ_UINT32 p_nb_bytes)71*3ac0a46fSAndroid Build Coastguard Worker void opj_read_bytes_BE(const OPJ_BYTE * p_buffer, OPJ_UINT32 * p_value,
72*3ac0a46fSAndroid Build Coastguard Worker                        OPJ_UINT32 p_nb_bytes)
73*3ac0a46fSAndroid Build Coastguard Worker {
74*3ac0a46fSAndroid Build Coastguard Worker     OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value);
75*3ac0a46fSAndroid Build Coastguard Worker 
76*3ac0a46fSAndroid Build Coastguard Worker     assert(p_nb_bytes > 0 && p_nb_bytes <= sizeof(OPJ_UINT32));
77*3ac0a46fSAndroid Build Coastguard Worker 
78*3ac0a46fSAndroid Build Coastguard Worker     *p_value = 0;
79*3ac0a46fSAndroid Build Coastguard Worker     memcpy(l_data_ptr + sizeof(OPJ_UINT32) - p_nb_bytes, p_buffer, p_nb_bytes);
80*3ac0a46fSAndroid Build Coastguard Worker }
81*3ac0a46fSAndroid Build Coastguard Worker 
opj_read_bytes_LE(const OPJ_BYTE * p_buffer,OPJ_UINT32 * p_value,OPJ_UINT32 p_nb_bytes)82*3ac0a46fSAndroid Build Coastguard Worker void opj_read_bytes_LE(const OPJ_BYTE * p_buffer, OPJ_UINT32 * p_value,
83*3ac0a46fSAndroid Build Coastguard Worker                        OPJ_UINT32 p_nb_bytes)
84*3ac0a46fSAndroid Build Coastguard Worker {
85*3ac0a46fSAndroid Build Coastguard Worker     OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value) + p_nb_bytes - 1;
86*3ac0a46fSAndroid Build Coastguard Worker     OPJ_UINT32 i;
87*3ac0a46fSAndroid Build Coastguard Worker 
88*3ac0a46fSAndroid Build Coastguard Worker     assert(p_nb_bytes > 0 && p_nb_bytes <= sizeof(OPJ_UINT32));
89*3ac0a46fSAndroid Build Coastguard Worker 
90*3ac0a46fSAndroid Build Coastguard Worker     *p_value = 0;
91*3ac0a46fSAndroid Build Coastguard Worker     for (i = 0; i < p_nb_bytes; ++i) {
92*3ac0a46fSAndroid Build Coastguard Worker         *(l_data_ptr--) = *(p_buffer++);
93*3ac0a46fSAndroid Build Coastguard Worker     }
94*3ac0a46fSAndroid Build Coastguard Worker }
95*3ac0a46fSAndroid Build Coastguard Worker 
opj_write_double_BE(OPJ_BYTE * p_buffer,OPJ_FLOAT64 p_value)96*3ac0a46fSAndroid Build Coastguard Worker void opj_write_double_BE(OPJ_BYTE * p_buffer, OPJ_FLOAT64 p_value)
97*3ac0a46fSAndroid Build Coastguard Worker {
98*3ac0a46fSAndroid Build Coastguard Worker     const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value);
99*3ac0a46fSAndroid Build Coastguard Worker     memcpy(p_buffer, l_data_ptr, sizeof(OPJ_FLOAT64));
100*3ac0a46fSAndroid Build Coastguard Worker }
101*3ac0a46fSAndroid Build Coastguard Worker 
opj_write_double_LE(OPJ_BYTE * p_buffer,OPJ_FLOAT64 p_value)102*3ac0a46fSAndroid Build Coastguard Worker void opj_write_double_LE(OPJ_BYTE * p_buffer, OPJ_FLOAT64 p_value)
103*3ac0a46fSAndroid Build Coastguard Worker {
104*3ac0a46fSAndroid Build Coastguard Worker     const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value) + sizeof(
105*3ac0a46fSAndroid Build Coastguard Worker                                       OPJ_FLOAT64) - 1;
106*3ac0a46fSAndroid Build Coastguard Worker     OPJ_UINT32 i;
107*3ac0a46fSAndroid Build Coastguard Worker     for (i = 0; i < sizeof(OPJ_FLOAT64); ++i) {
108*3ac0a46fSAndroid Build Coastguard Worker         *(p_buffer++) = *(l_data_ptr--);
109*3ac0a46fSAndroid Build Coastguard Worker     }
110*3ac0a46fSAndroid Build Coastguard Worker }
111*3ac0a46fSAndroid Build Coastguard Worker 
opj_read_double_BE(const OPJ_BYTE * p_buffer,OPJ_FLOAT64 * p_value)112*3ac0a46fSAndroid Build Coastguard Worker void opj_read_double_BE(const OPJ_BYTE * p_buffer, OPJ_FLOAT64 * p_value)
113*3ac0a46fSAndroid Build Coastguard Worker {
114*3ac0a46fSAndroid Build Coastguard Worker     OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value);
115*3ac0a46fSAndroid Build Coastguard Worker     memcpy(l_data_ptr, p_buffer, sizeof(OPJ_FLOAT64));
116*3ac0a46fSAndroid Build Coastguard Worker }
117*3ac0a46fSAndroid Build Coastguard Worker 
opj_read_double_LE(const OPJ_BYTE * p_buffer,OPJ_FLOAT64 * p_value)118*3ac0a46fSAndroid Build Coastguard Worker void opj_read_double_LE(const OPJ_BYTE * p_buffer, OPJ_FLOAT64 * p_value)
119*3ac0a46fSAndroid Build Coastguard Worker {
120*3ac0a46fSAndroid Build Coastguard Worker     OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value) + sizeof(OPJ_FLOAT64) - 1;
121*3ac0a46fSAndroid Build Coastguard Worker     OPJ_UINT32 i;
122*3ac0a46fSAndroid Build Coastguard Worker     for (i = 0; i < sizeof(OPJ_FLOAT64); ++i) {
123*3ac0a46fSAndroid Build Coastguard Worker         *(l_data_ptr--) = *(p_buffer++);
124*3ac0a46fSAndroid Build Coastguard Worker     }
125*3ac0a46fSAndroid Build Coastguard Worker }
126*3ac0a46fSAndroid Build Coastguard Worker 
opj_write_float_BE(OPJ_BYTE * p_buffer,OPJ_FLOAT32 p_value)127*3ac0a46fSAndroid Build Coastguard Worker void opj_write_float_BE(OPJ_BYTE * p_buffer, OPJ_FLOAT32 p_value)
128*3ac0a46fSAndroid Build Coastguard Worker {
129*3ac0a46fSAndroid Build Coastguard Worker     const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value);
130*3ac0a46fSAndroid Build Coastguard Worker     memcpy(p_buffer, l_data_ptr, sizeof(OPJ_FLOAT32));
131*3ac0a46fSAndroid Build Coastguard Worker }
132*3ac0a46fSAndroid Build Coastguard Worker 
opj_write_float_LE(OPJ_BYTE * p_buffer,OPJ_FLOAT32 p_value)133*3ac0a46fSAndroid Build Coastguard Worker void opj_write_float_LE(OPJ_BYTE * p_buffer, OPJ_FLOAT32 p_value)
134*3ac0a46fSAndroid Build Coastguard Worker {
135*3ac0a46fSAndroid Build Coastguard Worker     const OPJ_BYTE * l_data_ptr = ((const OPJ_BYTE *) &p_value) + sizeof(
136*3ac0a46fSAndroid Build Coastguard Worker                                       OPJ_FLOAT32) - 1;
137*3ac0a46fSAndroid Build Coastguard Worker     OPJ_UINT32 i;
138*3ac0a46fSAndroid Build Coastguard Worker     for (i = 0; i < sizeof(OPJ_FLOAT32); ++i) {
139*3ac0a46fSAndroid Build Coastguard Worker         *(p_buffer++) = *(l_data_ptr--);
140*3ac0a46fSAndroid Build Coastguard Worker     }
141*3ac0a46fSAndroid Build Coastguard Worker }
142*3ac0a46fSAndroid Build Coastguard Worker 
opj_read_float_BE(const OPJ_BYTE * p_buffer,OPJ_FLOAT32 * p_value)143*3ac0a46fSAndroid Build Coastguard Worker void opj_read_float_BE(const OPJ_BYTE * p_buffer, OPJ_FLOAT32 * p_value)
144*3ac0a46fSAndroid Build Coastguard Worker {
145*3ac0a46fSAndroid Build Coastguard Worker     OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value);
146*3ac0a46fSAndroid Build Coastguard Worker     memcpy(l_data_ptr, p_buffer, sizeof(OPJ_FLOAT32));
147*3ac0a46fSAndroid Build Coastguard Worker }
148*3ac0a46fSAndroid Build Coastguard Worker 
opj_read_float_LE(const OPJ_BYTE * p_buffer,OPJ_FLOAT32 * p_value)149*3ac0a46fSAndroid Build Coastguard Worker void opj_read_float_LE(const OPJ_BYTE * p_buffer, OPJ_FLOAT32 * p_value)
150*3ac0a46fSAndroid Build Coastguard Worker {
151*3ac0a46fSAndroid Build Coastguard Worker     OPJ_BYTE * l_data_ptr = ((OPJ_BYTE *) p_value) + sizeof(OPJ_FLOAT32) - 1;
152*3ac0a46fSAndroid Build Coastguard Worker     OPJ_UINT32 i;
153*3ac0a46fSAndroid Build Coastguard Worker     for (i = 0; i < sizeof(OPJ_FLOAT32); ++i) {
154*3ac0a46fSAndroid Build Coastguard Worker         *(l_data_ptr--) = *(p_buffer++);
155*3ac0a46fSAndroid Build Coastguard Worker     }
156*3ac0a46fSAndroid Build Coastguard Worker }
157*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_create(OPJ_SIZE_T p_buffer_size,OPJ_BOOL l_is_input)158*3ac0a46fSAndroid Build Coastguard Worker opj_stream_t* OPJ_CALLCONV opj_stream_create(OPJ_SIZE_T p_buffer_size,
159*3ac0a46fSAndroid Build Coastguard Worker         OPJ_BOOL l_is_input)
160*3ac0a46fSAndroid Build Coastguard Worker {
161*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_private_t * l_stream = 00;
162*3ac0a46fSAndroid Build Coastguard Worker     l_stream = (opj_stream_private_t*) opj_calloc(1, sizeof(opj_stream_private_t));
163*3ac0a46fSAndroid Build Coastguard Worker     if (! l_stream) {
164*3ac0a46fSAndroid Build Coastguard Worker         return 00;
165*3ac0a46fSAndroid Build Coastguard Worker     }
166*3ac0a46fSAndroid Build Coastguard Worker 
167*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_buffer_size = p_buffer_size;
168*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_stored_data = (OPJ_BYTE *) opj_malloc(p_buffer_size);
169*3ac0a46fSAndroid Build Coastguard Worker     if (! l_stream->m_stored_data) {
170*3ac0a46fSAndroid Build Coastguard Worker         opj_free(l_stream);
171*3ac0a46fSAndroid Build Coastguard Worker         return 00;
172*3ac0a46fSAndroid Build Coastguard Worker     }
173*3ac0a46fSAndroid Build Coastguard Worker 
174*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_current_data = l_stream->m_stored_data;
175*3ac0a46fSAndroid Build Coastguard Worker 
176*3ac0a46fSAndroid Build Coastguard Worker     if (l_is_input) {
177*3ac0a46fSAndroid Build Coastguard Worker         l_stream->m_status |= OPJ_STREAM_STATUS_INPUT;
178*3ac0a46fSAndroid Build Coastguard Worker         l_stream->m_opj_skip = opj_stream_read_skip;
179*3ac0a46fSAndroid Build Coastguard Worker         l_stream->m_opj_seek = opj_stream_read_seek;
180*3ac0a46fSAndroid Build Coastguard Worker     } else {
181*3ac0a46fSAndroid Build Coastguard Worker         l_stream->m_status |= OPJ_STREAM_STATUS_OUTPUT;
182*3ac0a46fSAndroid Build Coastguard Worker         l_stream->m_opj_skip = opj_stream_write_skip;
183*3ac0a46fSAndroid Build Coastguard Worker         l_stream->m_opj_seek = opj_stream_write_seek;
184*3ac0a46fSAndroid Build Coastguard Worker     }
185*3ac0a46fSAndroid Build Coastguard Worker 
186*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_read_fn = opj_stream_default_read;
187*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_write_fn = opj_stream_default_write;
188*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_skip_fn = opj_stream_default_skip;
189*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_seek_fn = opj_stream_default_seek;
190*3ac0a46fSAndroid Build Coastguard Worker 
191*3ac0a46fSAndroid Build Coastguard Worker     return (opj_stream_t *) l_stream;
192*3ac0a46fSAndroid Build Coastguard Worker }
193*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_default_create(OPJ_BOOL l_is_input)194*3ac0a46fSAndroid Build Coastguard Worker opj_stream_t* OPJ_CALLCONV opj_stream_default_create(OPJ_BOOL l_is_input)
195*3ac0a46fSAndroid Build Coastguard Worker {
196*3ac0a46fSAndroid Build Coastguard Worker     return opj_stream_create(OPJ_J2K_STREAM_CHUNK_SIZE, l_is_input);
197*3ac0a46fSAndroid Build Coastguard Worker }
198*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_destroy(opj_stream_t * p_stream)199*3ac0a46fSAndroid Build Coastguard Worker void OPJ_CALLCONV opj_stream_destroy(opj_stream_t* p_stream)
200*3ac0a46fSAndroid Build Coastguard Worker {
201*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
202*3ac0a46fSAndroid Build Coastguard Worker 
203*3ac0a46fSAndroid Build Coastguard Worker     if (l_stream) {
204*3ac0a46fSAndroid Build Coastguard Worker         if (l_stream->m_free_user_data_fn) {
205*3ac0a46fSAndroid Build Coastguard Worker             l_stream->m_free_user_data_fn(l_stream->m_user_data);
206*3ac0a46fSAndroid Build Coastguard Worker         }
207*3ac0a46fSAndroid Build Coastguard Worker         opj_free(l_stream->m_stored_data);
208*3ac0a46fSAndroid Build Coastguard Worker         l_stream->m_stored_data = 00;
209*3ac0a46fSAndroid Build Coastguard Worker         opj_free(l_stream);
210*3ac0a46fSAndroid Build Coastguard Worker     }
211*3ac0a46fSAndroid Build Coastguard Worker }
212*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_set_read_function(opj_stream_t * p_stream,opj_stream_read_fn p_function)213*3ac0a46fSAndroid Build Coastguard Worker void OPJ_CALLCONV opj_stream_set_read_function(opj_stream_t* p_stream,
214*3ac0a46fSAndroid Build Coastguard Worker         opj_stream_read_fn p_function)
215*3ac0a46fSAndroid Build Coastguard Worker {
216*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
217*3ac0a46fSAndroid Build Coastguard Worker 
218*3ac0a46fSAndroid Build Coastguard Worker     if ((!l_stream) || (!(l_stream->m_status & OPJ_STREAM_STATUS_INPUT))) {
219*3ac0a46fSAndroid Build Coastguard Worker         return;
220*3ac0a46fSAndroid Build Coastguard Worker     }
221*3ac0a46fSAndroid Build Coastguard Worker 
222*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_read_fn = p_function;
223*3ac0a46fSAndroid Build Coastguard Worker }
224*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_set_seek_function(opj_stream_t * p_stream,opj_stream_seek_fn p_function)225*3ac0a46fSAndroid Build Coastguard Worker void OPJ_CALLCONV opj_stream_set_seek_function(opj_stream_t* p_stream,
226*3ac0a46fSAndroid Build Coastguard Worker         opj_stream_seek_fn p_function)
227*3ac0a46fSAndroid Build Coastguard Worker {
228*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
229*3ac0a46fSAndroid Build Coastguard Worker 
230*3ac0a46fSAndroid Build Coastguard Worker     if (!l_stream) {
231*3ac0a46fSAndroid Build Coastguard Worker         return;
232*3ac0a46fSAndroid Build Coastguard Worker     }
233*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_seek_fn = p_function;
234*3ac0a46fSAndroid Build Coastguard Worker }
235*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_set_write_function(opj_stream_t * p_stream,opj_stream_write_fn p_function)236*3ac0a46fSAndroid Build Coastguard Worker void OPJ_CALLCONV opj_stream_set_write_function(opj_stream_t* p_stream,
237*3ac0a46fSAndroid Build Coastguard Worker         opj_stream_write_fn p_function)
238*3ac0a46fSAndroid Build Coastguard Worker {
239*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
240*3ac0a46fSAndroid Build Coastguard Worker 
241*3ac0a46fSAndroid Build Coastguard Worker     if ((!l_stream) || (!(l_stream->m_status & OPJ_STREAM_STATUS_OUTPUT))) {
242*3ac0a46fSAndroid Build Coastguard Worker         return;
243*3ac0a46fSAndroid Build Coastguard Worker     }
244*3ac0a46fSAndroid Build Coastguard Worker 
245*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_write_fn = p_function;
246*3ac0a46fSAndroid Build Coastguard Worker }
247*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_set_skip_function(opj_stream_t * p_stream,opj_stream_skip_fn p_function)248*3ac0a46fSAndroid Build Coastguard Worker void OPJ_CALLCONV opj_stream_set_skip_function(opj_stream_t* p_stream,
249*3ac0a46fSAndroid Build Coastguard Worker         opj_stream_skip_fn p_function)
250*3ac0a46fSAndroid Build Coastguard Worker {
251*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
252*3ac0a46fSAndroid Build Coastguard Worker 
253*3ac0a46fSAndroid Build Coastguard Worker     if (! l_stream) {
254*3ac0a46fSAndroid Build Coastguard Worker         return;
255*3ac0a46fSAndroid Build Coastguard Worker     }
256*3ac0a46fSAndroid Build Coastguard Worker 
257*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_skip_fn = p_function;
258*3ac0a46fSAndroid Build Coastguard Worker }
259*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_set_user_data(opj_stream_t * p_stream,void * p_data,opj_stream_free_user_data_fn p_function)260*3ac0a46fSAndroid Build Coastguard Worker void OPJ_CALLCONV opj_stream_set_user_data(opj_stream_t* p_stream,
261*3ac0a46fSAndroid Build Coastguard Worker         void * p_data, opj_stream_free_user_data_fn p_function)
262*3ac0a46fSAndroid Build Coastguard Worker {
263*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
264*3ac0a46fSAndroid Build Coastguard Worker     if (!l_stream) {
265*3ac0a46fSAndroid Build Coastguard Worker         return;
266*3ac0a46fSAndroid Build Coastguard Worker     }
267*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_user_data = p_data;
268*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_free_user_data_fn = p_function;
269*3ac0a46fSAndroid Build Coastguard Worker }
270*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_set_user_data_length(opj_stream_t * p_stream,OPJ_UINT64 data_length)271*3ac0a46fSAndroid Build Coastguard Worker void OPJ_CALLCONV opj_stream_set_user_data_length(opj_stream_t* p_stream,
272*3ac0a46fSAndroid Build Coastguard Worker         OPJ_UINT64 data_length)
273*3ac0a46fSAndroid Build Coastguard Worker {
274*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_private_t* l_stream = (opj_stream_private_t*) p_stream;
275*3ac0a46fSAndroid Build Coastguard Worker     if (!l_stream) {
276*3ac0a46fSAndroid Build Coastguard Worker         return;
277*3ac0a46fSAndroid Build Coastguard Worker     }
278*3ac0a46fSAndroid Build Coastguard Worker     l_stream->m_user_data_length = data_length;
279*3ac0a46fSAndroid Build Coastguard Worker }
280*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_read_data(opj_stream_private_t * p_stream,OPJ_BYTE * p_buffer,OPJ_SIZE_T p_size,opj_event_mgr_t * p_event_mgr)281*3ac0a46fSAndroid Build Coastguard Worker OPJ_SIZE_T opj_stream_read_data(opj_stream_private_t * p_stream,
282*3ac0a46fSAndroid Build Coastguard Worker                                 OPJ_BYTE * p_buffer, OPJ_SIZE_T p_size, opj_event_mgr_t * p_event_mgr)
283*3ac0a46fSAndroid Build Coastguard Worker {
284*3ac0a46fSAndroid Build Coastguard Worker     OPJ_SIZE_T l_read_nb_bytes = 0;
285*3ac0a46fSAndroid Build Coastguard Worker     if (p_stream->m_bytes_in_buffer >= p_size) {
286*3ac0a46fSAndroid Build Coastguard Worker         memcpy(p_buffer, p_stream->m_current_data, p_size);
287*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_current_data += p_size;
288*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_bytes_in_buffer -= p_size;
289*3ac0a46fSAndroid Build Coastguard Worker         l_read_nb_bytes += p_size;
290*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_byte_offset += (OPJ_OFF_T)p_size;
291*3ac0a46fSAndroid Build Coastguard Worker         return l_read_nb_bytes;
292*3ac0a46fSAndroid Build Coastguard Worker     }
293*3ac0a46fSAndroid Build Coastguard Worker 
294*3ac0a46fSAndroid Build Coastguard Worker     /* we are now in the case when the remaining data if not sufficient */
295*3ac0a46fSAndroid Build Coastguard Worker     if (p_stream->m_status & OPJ_STREAM_STATUS_END) {
296*3ac0a46fSAndroid Build Coastguard Worker         l_read_nb_bytes += p_stream->m_bytes_in_buffer;
297*3ac0a46fSAndroid Build Coastguard Worker         memcpy(p_buffer, p_stream->m_current_data, p_stream->m_bytes_in_buffer);
298*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_current_data += p_stream->m_bytes_in_buffer;
299*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
300*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_bytes_in_buffer = 0;
301*3ac0a46fSAndroid Build Coastguard Worker         return l_read_nb_bytes ? l_read_nb_bytes : (OPJ_SIZE_T) - 1;
302*3ac0a46fSAndroid Build Coastguard Worker     }
303*3ac0a46fSAndroid Build Coastguard Worker 
304*3ac0a46fSAndroid Build Coastguard Worker     /* the flag is not set, we copy data and then do an actual read on the stream */
305*3ac0a46fSAndroid Build Coastguard Worker     if (p_stream->m_bytes_in_buffer) {
306*3ac0a46fSAndroid Build Coastguard Worker         l_read_nb_bytes += p_stream->m_bytes_in_buffer;
307*3ac0a46fSAndroid Build Coastguard Worker         memcpy(p_buffer, p_stream->m_current_data, p_stream->m_bytes_in_buffer);
308*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_current_data = p_stream->m_stored_data;
309*3ac0a46fSAndroid Build Coastguard Worker         p_buffer += p_stream->m_bytes_in_buffer;
310*3ac0a46fSAndroid Build Coastguard Worker         p_size -= p_stream->m_bytes_in_buffer;
311*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
312*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_bytes_in_buffer = 0;
313*3ac0a46fSAndroid Build Coastguard Worker     } else {
314*3ac0a46fSAndroid Build Coastguard Worker         /* case where we are already at the end of the buffer
315*3ac0a46fSAndroid Build Coastguard Worker            so reset the m_current_data to point to the start of the
316*3ac0a46fSAndroid Build Coastguard Worker            stored buffer to get ready to read from disk*/
317*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_current_data = p_stream->m_stored_data;
318*3ac0a46fSAndroid Build Coastguard Worker     }
319*3ac0a46fSAndroid Build Coastguard Worker 
320*3ac0a46fSAndroid Build Coastguard Worker     for (;;) {
321*3ac0a46fSAndroid Build Coastguard Worker         /* we should read less than a chunk -> read a chunk */
322*3ac0a46fSAndroid Build Coastguard Worker         if (p_size < p_stream->m_buffer_size) {
323*3ac0a46fSAndroid Build Coastguard Worker             /* we should do an actual read on the media */
324*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_bytes_in_buffer = p_stream->m_read_fn(p_stream->m_stored_data,
325*3ac0a46fSAndroid Build Coastguard Worker                                           p_stream->m_buffer_size, p_stream->m_user_data);
326*3ac0a46fSAndroid Build Coastguard Worker 
327*3ac0a46fSAndroid Build Coastguard Worker             if (p_stream->m_bytes_in_buffer == (OPJ_SIZE_T) - 1) {
328*3ac0a46fSAndroid Build Coastguard Worker                 /* end of stream */
329*3ac0a46fSAndroid Build Coastguard Worker                 opj_event_msg(p_event_mgr, EVT_INFO, "Stream reached its end !\n");
330*3ac0a46fSAndroid Build Coastguard Worker 
331*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_bytes_in_buffer = 0;
332*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_status |= OPJ_STREAM_STATUS_END;
333*3ac0a46fSAndroid Build Coastguard Worker                 /* end of stream */
334*3ac0a46fSAndroid Build Coastguard Worker                 return l_read_nb_bytes ? l_read_nb_bytes : (OPJ_SIZE_T) - 1;
335*3ac0a46fSAndroid Build Coastguard Worker             } else if (p_stream->m_bytes_in_buffer < p_size) {
336*3ac0a46fSAndroid Build Coastguard Worker                 /* not enough data */
337*3ac0a46fSAndroid Build Coastguard Worker                 l_read_nb_bytes += p_stream->m_bytes_in_buffer;
338*3ac0a46fSAndroid Build Coastguard Worker                 memcpy(p_buffer, p_stream->m_current_data, p_stream->m_bytes_in_buffer);
339*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_current_data = p_stream->m_stored_data;
340*3ac0a46fSAndroid Build Coastguard Worker                 p_buffer += p_stream->m_bytes_in_buffer;
341*3ac0a46fSAndroid Build Coastguard Worker                 p_size -= p_stream->m_bytes_in_buffer;
342*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
343*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_bytes_in_buffer = 0;
344*3ac0a46fSAndroid Build Coastguard Worker             } else {
345*3ac0a46fSAndroid Build Coastguard Worker                 l_read_nb_bytes += p_size;
346*3ac0a46fSAndroid Build Coastguard Worker                 memcpy(p_buffer, p_stream->m_current_data, p_size);
347*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_current_data += p_size;
348*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_bytes_in_buffer -= p_size;
349*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_byte_offset += (OPJ_OFF_T)p_size;
350*3ac0a46fSAndroid Build Coastguard Worker                 return l_read_nb_bytes;
351*3ac0a46fSAndroid Build Coastguard Worker             }
352*3ac0a46fSAndroid Build Coastguard Worker         } else {
353*3ac0a46fSAndroid Build Coastguard Worker             /* direct read on the dest buffer */
354*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_bytes_in_buffer = p_stream->m_read_fn(p_buffer, p_size,
355*3ac0a46fSAndroid Build Coastguard Worker                                           p_stream->m_user_data);
356*3ac0a46fSAndroid Build Coastguard Worker 
357*3ac0a46fSAndroid Build Coastguard Worker             if (p_stream->m_bytes_in_buffer == (OPJ_SIZE_T) - 1) {
358*3ac0a46fSAndroid Build Coastguard Worker                 /*  end of stream */
359*3ac0a46fSAndroid Build Coastguard Worker                 opj_event_msg(p_event_mgr, EVT_INFO, "Stream reached its end !\n");
360*3ac0a46fSAndroid Build Coastguard Worker 
361*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_bytes_in_buffer = 0;
362*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_status |= OPJ_STREAM_STATUS_END;
363*3ac0a46fSAndroid Build Coastguard Worker                 /* end of stream */
364*3ac0a46fSAndroid Build Coastguard Worker                 return l_read_nb_bytes ? l_read_nb_bytes : (OPJ_SIZE_T) - 1;
365*3ac0a46fSAndroid Build Coastguard Worker             } else if (p_stream->m_bytes_in_buffer < p_size) {
366*3ac0a46fSAndroid Build Coastguard Worker                 /* not enough data */
367*3ac0a46fSAndroid Build Coastguard Worker                 l_read_nb_bytes += p_stream->m_bytes_in_buffer;
368*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_current_data = p_stream->m_stored_data;
369*3ac0a46fSAndroid Build Coastguard Worker                 p_buffer += p_stream->m_bytes_in_buffer;
370*3ac0a46fSAndroid Build Coastguard Worker                 p_size -= p_stream->m_bytes_in_buffer;
371*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
372*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_bytes_in_buffer = 0;
373*3ac0a46fSAndroid Build Coastguard Worker             } else {
374*3ac0a46fSAndroid Build Coastguard Worker                 /* we have read the exact size */
375*3ac0a46fSAndroid Build Coastguard Worker                 l_read_nb_bytes += p_stream->m_bytes_in_buffer;
376*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_byte_offset += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
377*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_current_data = p_stream->m_stored_data;
378*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_bytes_in_buffer = 0;
379*3ac0a46fSAndroid Build Coastguard Worker                 return l_read_nb_bytes;
380*3ac0a46fSAndroid Build Coastguard Worker             }
381*3ac0a46fSAndroid Build Coastguard Worker         }
382*3ac0a46fSAndroid Build Coastguard Worker     }
383*3ac0a46fSAndroid Build Coastguard Worker }
384*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_write_data(opj_stream_private_t * p_stream,const OPJ_BYTE * p_buffer,OPJ_SIZE_T p_size,opj_event_mgr_t * p_event_mgr)385*3ac0a46fSAndroid Build Coastguard Worker OPJ_SIZE_T opj_stream_write_data(opj_stream_private_t * p_stream,
386*3ac0a46fSAndroid Build Coastguard Worker                                  const OPJ_BYTE * p_buffer,
387*3ac0a46fSAndroid Build Coastguard Worker                                  OPJ_SIZE_T p_size,
388*3ac0a46fSAndroid Build Coastguard Worker                                  opj_event_mgr_t * p_event_mgr)
389*3ac0a46fSAndroid Build Coastguard Worker {
390*3ac0a46fSAndroid Build Coastguard Worker     OPJ_SIZE_T l_remaining_bytes = 0;
391*3ac0a46fSAndroid Build Coastguard Worker     OPJ_SIZE_T l_write_nb_bytes = 0;
392*3ac0a46fSAndroid Build Coastguard Worker 
393*3ac0a46fSAndroid Build Coastguard Worker     if (p_stream->m_status & OPJ_STREAM_STATUS_ERROR) {
394*3ac0a46fSAndroid Build Coastguard Worker         return (OPJ_SIZE_T) - 1;
395*3ac0a46fSAndroid Build Coastguard Worker     }
396*3ac0a46fSAndroid Build Coastguard Worker 
397*3ac0a46fSAndroid Build Coastguard Worker     for (;;) {
398*3ac0a46fSAndroid Build Coastguard Worker         l_remaining_bytes = p_stream->m_buffer_size - p_stream->m_bytes_in_buffer;
399*3ac0a46fSAndroid Build Coastguard Worker 
400*3ac0a46fSAndroid Build Coastguard Worker         /* we have more memory than required */
401*3ac0a46fSAndroid Build Coastguard Worker         if (l_remaining_bytes >= p_size) {
402*3ac0a46fSAndroid Build Coastguard Worker             memcpy(p_stream->m_current_data, p_buffer, p_size);
403*3ac0a46fSAndroid Build Coastguard Worker 
404*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_current_data += p_size;
405*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_bytes_in_buffer += p_size;
406*3ac0a46fSAndroid Build Coastguard Worker             l_write_nb_bytes += p_size;
407*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_byte_offset += (OPJ_OFF_T)p_size;
408*3ac0a46fSAndroid Build Coastguard Worker 
409*3ac0a46fSAndroid Build Coastguard Worker             return l_write_nb_bytes;
410*3ac0a46fSAndroid Build Coastguard Worker         }
411*3ac0a46fSAndroid Build Coastguard Worker 
412*3ac0a46fSAndroid Build Coastguard Worker         /* we copy data and then do an actual read on the stream */
413*3ac0a46fSAndroid Build Coastguard Worker         if (l_remaining_bytes) {
414*3ac0a46fSAndroid Build Coastguard Worker             l_write_nb_bytes += l_remaining_bytes;
415*3ac0a46fSAndroid Build Coastguard Worker 
416*3ac0a46fSAndroid Build Coastguard Worker             memcpy(p_stream->m_current_data, p_buffer, l_remaining_bytes);
417*3ac0a46fSAndroid Build Coastguard Worker 
418*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_current_data = p_stream->m_stored_data;
419*3ac0a46fSAndroid Build Coastguard Worker 
420*3ac0a46fSAndroid Build Coastguard Worker             p_buffer += l_remaining_bytes;
421*3ac0a46fSAndroid Build Coastguard Worker             p_size -= l_remaining_bytes;
422*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_bytes_in_buffer += l_remaining_bytes;
423*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_byte_offset += (OPJ_OFF_T)l_remaining_bytes;
424*3ac0a46fSAndroid Build Coastguard Worker         }
425*3ac0a46fSAndroid Build Coastguard Worker 
426*3ac0a46fSAndroid Build Coastguard Worker         if (! opj_stream_flush(p_stream, p_event_mgr)) {
427*3ac0a46fSAndroid Build Coastguard Worker             return (OPJ_SIZE_T) - 1;
428*3ac0a46fSAndroid Build Coastguard Worker         }
429*3ac0a46fSAndroid Build Coastguard Worker     }
430*3ac0a46fSAndroid Build Coastguard Worker 
431*3ac0a46fSAndroid Build Coastguard Worker }
432*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_flush(opj_stream_private_t * p_stream,opj_event_mgr_t * p_event_mgr)433*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_flush(opj_stream_private_t * p_stream,
434*3ac0a46fSAndroid Build Coastguard Worker                           opj_event_mgr_t * p_event_mgr)
435*3ac0a46fSAndroid Build Coastguard Worker {
436*3ac0a46fSAndroid Build Coastguard Worker     /* the number of bytes written on the media. */
437*3ac0a46fSAndroid Build Coastguard Worker     OPJ_SIZE_T l_current_write_nb_bytes = 0;
438*3ac0a46fSAndroid Build Coastguard Worker 
439*3ac0a46fSAndroid Build Coastguard Worker     p_stream->m_current_data = p_stream->m_stored_data;
440*3ac0a46fSAndroid Build Coastguard Worker 
441*3ac0a46fSAndroid Build Coastguard Worker     while (p_stream->m_bytes_in_buffer) {
442*3ac0a46fSAndroid Build Coastguard Worker         /* we should do an actual write on the media */
443*3ac0a46fSAndroid Build Coastguard Worker         l_current_write_nb_bytes = p_stream->m_write_fn(p_stream->m_current_data,
444*3ac0a46fSAndroid Build Coastguard Worker                                    p_stream->m_bytes_in_buffer,
445*3ac0a46fSAndroid Build Coastguard Worker                                    p_stream->m_user_data);
446*3ac0a46fSAndroid Build Coastguard Worker 
447*3ac0a46fSAndroid Build Coastguard Worker         if (l_current_write_nb_bytes == (OPJ_SIZE_T) - 1) {
448*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
449*3ac0a46fSAndroid Build Coastguard Worker             opj_event_msg(p_event_mgr, EVT_INFO, "Error on writing stream!\n");
450*3ac0a46fSAndroid Build Coastguard Worker 
451*3ac0a46fSAndroid Build Coastguard Worker             return OPJ_FALSE;
452*3ac0a46fSAndroid Build Coastguard Worker         }
453*3ac0a46fSAndroid Build Coastguard Worker 
454*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_current_data += l_current_write_nb_bytes;
455*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_bytes_in_buffer -= l_current_write_nb_bytes;
456*3ac0a46fSAndroid Build Coastguard Worker     }
457*3ac0a46fSAndroid Build Coastguard Worker 
458*3ac0a46fSAndroid Build Coastguard Worker     p_stream->m_current_data = p_stream->m_stored_data;
459*3ac0a46fSAndroid Build Coastguard Worker 
460*3ac0a46fSAndroid Build Coastguard Worker     return OPJ_TRUE;
461*3ac0a46fSAndroid Build Coastguard Worker }
462*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_read_skip(opj_stream_private_t * p_stream,OPJ_OFF_T p_size,opj_event_mgr_t * p_event_mgr)463*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_read_skip(opj_stream_private_t * p_stream,
464*3ac0a46fSAndroid Build Coastguard Worker                                OPJ_OFF_T p_size, opj_event_mgr_t * p_event_mgr)
465*3ac0a46fSAndroid Build Coastguard Worker {
466*3ac0a46fSAndroid Build Coastguard Worker     OPJ_OFF_T l_skip_nb_bytes = 0;
467*3ac0a46fSAndroid Build Coastguard Worker     OPJ_OFF_T l_current_skip_nb_bytes = 0;
468*3ac0a46fSAndroid Build Coastguard Worker 
469*3ac0a46fSAndroid Build Coastguard Worker     assert(p_size >= 0);
470*3ac0a46fSAndroid Build Coastguard Worker 
471*3ac0a46fSAndroid Build Coastguard Worker     if (p_stream->m_bytes_in_buffer >= (OPJ_SIZE_T)p_size) {
472*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_current_data += p_size;
473*3ac0a46fSAndroid Build Coastguard Worker         /* it is safe to cast p_size to OPJ_SIZE_T since it is <= m_bytes_in_buffer
474*3ac0a46fSAndroid Build Coastguard Worker         which is of type OPJ_SIZE_T */
475*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_bytes_in_buffer -= (OPJ_SIZE_T)p_size;
476*3ac0a46fSAndroid Build Coastguard Worker         l_skip_nb_bytes += p_size;
477*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_byte_offset += l_skip_nb_bytes;
478*3ac0a46fSAndroid Build Coastguard Worker         return l_skip_nb_bytes;
479*3ac0a46fSAndroid Build Coastguard Worker     }
480*3ac0a46fSAndroid Build Coastguard Worker 
481*3ac0a46fSAndroid Build Coastguard Worker     /* we are now in the case when the remaining data if not sufficient */
482*3ac0a46fSAndroid Build Coastguard Worker     if (p_stream->m_status & OPJ_STREAM_STATUS_END) {
483*3ac0a46fSAndroid Build Coastguard Worker         l_skip_nb_bytes += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
484*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_current_data += p_stream->m_bytes_in_buffer;
485*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_bytes_in_buffer = 0;
486*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_byte_offset += l_skip_nb_bytes;
487*3ac0a46fSAndroid Build Coastguard Worker         return l_skip_nb_bytes ? l_skip_nb_bytes : (OPJ_OFF_T) - 1;
488*3ac0a46fSAndroid Build Coastguard Worker     }
489*3ac0a46fSAndroid Build Coastguard Worker 
490*3ac0a46fSAndroid Build Coastguard Worker     /* the flag is not set, we copy data and then do an actual skip on the stream */
491*3ac0a46fSAndroid Build Coastguard Worker     if (p_stream->m_bytes_in_buffer) {
492*3ac0a46fSAndroid Build Coastguard Worker         l_skip_nb_bytes += (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
493*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_current_data = p_stream->m_stored_data;
494*3ac0a46fSAndroid Build Coastguard Worker         p_size -= (OPJ_OFF_T)p_stream->m_bytes_in_buffer;
495*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_bytes_in_buffer = 0;
496*3ac0a46fSAndroid Build Coastguard Worker     }
497*3ac0a46fSAndroid Build Coastguard Worker 
498*3ac0a46fSAndroid Build Coastguard Worker     while (p_size > 0) {
499*3ac0a46fSAndroid Build Coastguard Worker         /* Check if we are going beyond the end of file. Most skip_fn do not */
500*3ac0a46fSAndroid Build Coastguard Worker         /* check that, but we must be careful not to advance m_byte_offset */
501*3ac0a46fSAndroid Build Coastguard Worker         /* beyond m_user_data_length, otherwise */
502*3ac0a46fSAndroid Build Coastguard Worker         /* opj_stream_get_number_byte_left() will assert. */
503*3ac0a46fSAndroid Build Coastguard Worker         if ((OPJ_UINT64)(p_stream->m_byte_offset + l_skip_nb_bytes + p_size) >
504*3ac0a46fSAndroid Build Coastguard Worker                 p_stream->m_user_data_length) {
505*3ac0a46fSAndroid Build Coastguard Worker             opj_event_msg(p_event_mgr, EVT_INFO, "Stream reached its end !\n");
506*3ac0a46fSAndroid Build Coastguard Worker 
507*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_byte_offset += l_skip_nb_bytes;
508*3ac0a46fSAndroid Build Coastguard Worker             l_skip_nb_bytes = (OPJ_OFF_T)(p_stream->m_user_data_length -
509*3ac0a46fSAndroid Build Coastguard Worker                                           (OPJ_UINT64)p_stream->m_byte_offset);
510*3ac0a46fSAndroid Build Coastguard Worker 
511*3ac0a46fSAndroid Build Coastguard Worker             opj_stream_read_seek(p_stream, (OPJ_OFF_T)p_stream->m_user_data_length,
512*3ac0a46fSAndroid Build Coastguard Worker                                  p_event_mgr);
513*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_status |= OPJ_STREAM_STATUS_END;
514*3ac0a46fSAndroid Build Coastguard Worker 
515*3ac0a46fSAndroid Build Coastguard Worker             /* end if stream */
516*3ac0a46fSAndroid Build Coastguard Worker             return l_skip_nb_bytes ? l_skip_nb_bytes : (OPJ_OFF_T) - 1;
517*3ac0a46fSAndroid Build Coastguard Worker         }
518*3ac0a46fSAndroid Build Coastguard Worker 
519*3ac0a46fSAndroid Build Coastguard Worker         /* we should do an actual skip on the media */
520*3ac0a46fSAndroid Build Coastguard Worker         l_current_skip_nb_bytes = p_stream->m_skip_fn(p_size, p_stream->m_user_data);
521*3ac0a46fSAndroid Build Coastguard Worker         if (l_current_skip_nb_bytes == (OPJ_OFF_T) - 1) {
522*3ac0a46fSAndroid Build Coastguard Worker             opj_event_msg(p_event_mgr, EVT_INFO, "Stream reached its end !\n");
523*3ac0a46fSAndroid Build Coastguard Worker 
524*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_status |= OPJ_STREAM_STATUS_END;
525*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_byte_offset += l_skip_nb_bytes;
526*3ac0a46fSAndroid Build Coastguard Worker             /* end if stream */
527*3ac0a46fSAndroid Build Coastguard Worker             return l_skip_nb_bytes ? l_skip_nb_bytes : (OPJ_OFF_T) - 1;
528*3ac0a46fSAndroid Build Coastguard Worker         }
529*3ac0a46fSAndroid Build Coastguard Worker         p_size -= l_current_skip_nb_bytes;
530*3ac0a46fSAndroid Build Coastguard Worker         l_skip_nb_bytes += l_current_skip_nb_bytes;
531*3ac0a46fSAndroid Build Coastguard Worker     }
532*3ac0a46fSAndroid Build Coastguard Worker 
533*3ac0a46fSAndroid Build Coastguard Worker     p_stream->m_byte_offset += l_skip_nb_bytes;
534*3ac0a46fSAndroid Build Coastguard Worker 
535*3ac0a46fSAndroid Build Coastguard Worker     return l_skip_nb_bytes;
536*3ac0a46fSAndroid Build Coastguard Worker }
537*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_write_skip(opj_stream_private_t * p_stream,OPJ_OFF_T p_size,opj_event_mgr_t * p_event_mgr)538*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_write_skip(opj_stream_private_t * p_stream,
539*3ac0a46fSAndroid Build Coastguard Worker                                 OPJ_OFF_T p_size, opj_event_mgr_t * p_event_mgr)
540*3ac0a46fSAndroid Build Coastguard Worker {
541*3ac0a46fSAndroid Build Coastguard Worker     OPJ_BOOL l_is_written = 0;
542*3ac0a46fSAndroid Build Coastguard Worker     OPJ_OFF_T l_current_skip_nb_bytes = 0;
543*3ac0a46fSAndroid Build Coastguard Worker     OPJ_OFF_T l_skip_nb_bytes = 0;
544*3ac0a46fSAndroid Build Coastguard Worker 
545*3ac0a46fSAndroid Build Coastguard Worker     if (p_stream->m_status & OPJ_STREAM_STATUS_ERROR) {
546*3ac0a46fSAndroid Build Coastguard Worker         return (OPJ_OFF_T) - 1;
547*3ac0a46fSAndroid Build Coastguard Worker     }
548*3ac0a46fSAndroid Build Coastguard Worker 
549*3ac0a46fSAndroid Build Coastguard Worker     /* we should flush data */
550*3ac0a46fSAndroid Build Coastguard Worker     l_is_written = opj_stream_flush(p_stream, p_event_mgr);
551*3ac0a46fSAndroid Build Coastguard Worker     if (! l_is_written) {
552*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
553*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_bytes_in_buffer = 0;
554*3ac0a46fSAndroid Build Coastguard Worker         return (OPJ_OFF_T) - 1;
555*3ac0a46fSAndroid Build Coastguard Worker     }
556*3ac0a46fSAndroid Build Coastguard Worker     /* then skip */
557*3ac0a46fSAndroid Build Coastguard Worker 
558*3ac0a46fSAndroid Build Coastguard Worker     while (p_size > 0) {
559*3ac0a46fSAndroid Build Coastguard Worker         /* we should do an actual skip on the media */
560*3ac0a46fSAndroid Build Coastguard Worker         l_current_skip_nb_bytes = p_stream->m_skip_fn(p_size, p_stream->m_user_data);
561*3ac0a46fSAndroid Build Coastguard Worker 
562*3ac0a46fSAndroid Build Coastguard Worker         if (l_current_skip_nb_bytes == (OPJ_OFF_T) - 1) {
563*3ac0a46fSAndroid Build Coastguard Worker             opj_event_msg(p_event_mgr, EVT_INFO, "Stream error!\n");
564*3ac0a46fSAndroid Build Coastguard Worker 
565*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
566*3ac0a46fSAndroid Build Coastguard Worker             p_stream->m_byte_offset += l_skip_nb_bytes;
567*3ac0a46fSAndroid Build Coastguard Worker             /* end if stream */
568*3ac0a46fSAndroid Build Coastguard Worker             return l_skip_nb_bytes ? l_skip_nb_bytes : (OPJ_OFF_T) - 1;
569*3ac0a46fSAndroid Build Coastguard Worker         }
570*3ac0a46fSAndroid Build Coastguard Worker         p_size -= l_current_skip_nb_bytes;
571*3ac0a46fSAndroid Build Coastguard Worker         l_skip_nb_bytes += l_current_skip_nb_bytes;
572*3ac0a46fSAndroid Build Coastguard Worker     }
573*3ac0a46fSAndroid Build Coastguard Worker 
574*3ac0a46fSAndroid Build Coastguard Worker     p_stream->m_byte_offset += l_skip_nb_bytes;
575*3ac0a46fSAndroid Build Coastguard Worker 
576*3ac0a46fSAndroid Build Coastguard Worker     return l_skip_nb_bytes;
577*3ac0a46fSAndroid Build Coastguard Worker }
578*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_tell(const opj_stream_private_t * p_stream)579*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_tell(const opj_stream_private_t * p_stream)
580*3ac0a46fSAndroid Build Coastguard Worker {
581*3ac0a46fSAndroid Build Coastguard Worker     return p_stream->m_byte_offset;
582*3ac0a46fSAndroid Build Coastguard Worker }
583*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_get_number_byte_left(const opj_stream_private_t * p_stream)584*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_get_number_byte_left(const opj_stream_private_t * p_stream)
585*3ac0a46fSAndroid Build Coastguard Worker {
586*3ac0a46fSAndroid Build Coastguard Worker     assert(p_stream->m_byte_offset >= 0);
587*3ac0a46fSAndroid Build Coastguard Worker     assert(p_stream->m_user_data_length >= (OPJ_UINT64)p_stream->m_byte_offset);
588*3ac0a46fSAndroid Build Coastguard Worker     return p_stream->m_user_data_length ?
589*3ac0a46fSAndroid Build Coastguard Worker            (OPJ_OFF_T)(p_stream->m_user_data_length) - p_stream->m_byte_offset :
590*3ac0a46fSAndroid Build Coastguard Worker            0;
591*3ac0a46fSAndroid Build Coastguard Worker }
592*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_skip(opj_stream_private_t * p_stream,OPJ_OFF_T p_size,opj_event_mgr_t * p_event_mgr)593*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_skip(opj_stream_private_t * p_stream, OPJ_OFF_T p_size,
594*3ac0a46fSAndroid Build Coastguard Worker                           opj_event_mgr_t * p_event_mgr)
595*3ac0a46fSAndroid Build Coastguard Worker {
596*3ac0a46fSAndroid Build Coastguard Worker     assert(p_size >= 0);
597*3ac0a46fSAndroid Build Coastguard Worker     return p_stream->m_opj_skip(p_stream, p_size, p_event_mgr);
598*3ac0a46fSAndroid Build Coastguard Worker }
599*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_read_seek(opj_stream_private_t * p_stream,OPJ_OFF_T p_size,opj_event_mgr_t * p_event_mgr)600*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_read_seek(opj_stream_private_t * p_stream, OPJ_OFF_T p_size,
601*3ac0a46fSAndroid Build Coastguard Worker                               opj_event_mgr_t * p_event_mgr)
602*3ac0a46fSAndroid Build Coastguard Worker {
603*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(p_event_mgr);
604*3ac0a46fSAndroid Build Coastguard Worker     p_stream->m_current_data = p_stream->m_stored_data;
605*3ac0a46fSAndroid Build Coastguard Worker     p_stream->m_bytes_in_buffer = 0;
606*3ac0a46fSAndroid Build Coastguard Worker 
607*3ac0a46fSAndroid Build Coastguard Worker     if (!(p_stream->m_seek_fn(p_size, p_stream->m_user_data))) {
608*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_status |= OPJ_STREAM_STATUS_END;
609*3ac0a46fSAndroid Build Coastguard Worker         return OPJ_FALSE;
610*3ac0a46fSAndroid Build Coastguard Worker     } else {
611*3ac0a46fSAndroid Build Coastguard Worker         /* reset stream status */
612*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_status &= (~OPJ_STREAM_STATUS_END);
613*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_byte_offset = p_size;
614*3ac0a46fSAndroid Build Coastguard Worker 
615*3ac0a46fSAndroid Build Coastguard Worker     }
616*3ac0a46fSAndroid Build Coastguard Worker 
617*3ac0a46fSAndroid Build Coastguard Worker     return OPJ_TRUE;
618*3ac0a46fSAndroid Build Coastguard Worker }
619*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_write_seek(opj_stream_private_t * p_stream,OPJ_OFF_T p_size,opj_event_mgr_t * p_event_mgr)620*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_write_seek(opj_stream_private_t * p_stream,
621*3ac0a46fSAndroid Build Coastguard Worker                                OPJ_OFF_T p_size, opj_event_mgr_t * p_event_mgr)
622*3ac0a46fSAndroid Build Coastguard Worker {
623*3ac0a46fSAndroid Build Coastguard Worker     if (! opj_stream_flush(p_stream, p_event_mgr)) {
624*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
625*3ac0a46fSAndroid Build Coastguard Worker         return OPJ_FALSE;
626*3ac0a46fSAndroid Build Coastguard Worker     }
627*3ac0a46fSAndroid Build Coastguard Worker 
628*3ac0a46fSAndroid Build Coastguard Worker     p_stream->m_current_data = p_stream->m_stored_data;
629*3ac0a46fSAndroid Build Coastguard Worker     p_stream->m_bytes_in_buffer = 0;
630*3ac0a46fSAndroid Build Coastguard Worker 
631*3ac0a46fSAndroid Build Coastguard Worker     if (! p_stream->m_seek_fn(p_size, p_stream->m_user_data)) {
632*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_status |= OPJ_STREAM_STATUS_ERROR;
633*3ac0a46fSAndroid Build Coastguard Worker         return OPJ_FALSE;
634*3ac0a46fSAndroid Build Coastguard Worker     } else {
635*3ac0a46fSAndroid Build Coastguard Worker         p_stream->m_byte_offset = p_size;
636*3ac0a46fSAndroid Build Coastguard Worker     }
637*3ac0a46fSAndroid Build Coastguard Worker 
638*3ac0a46fSAndroid Build Coastguard Worker     return OPJ_TRUE;
639*3ac0a46fSAndroid Build Coastguard Worker }
640*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_seek(opj_stream_private_t * p_stream,OPJ_OFF_T p_size,struct opj_event_mgr * p_event_mgr)641*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_seek(opj_stream_private_t * p_stream, OPJ_OFF_T p_size,
642*3ac0a46fSAndroid Build Coastguard Worker                          struct opj_event_mgr * p_event_mgr)
643*3ac0a46fSAndroid Build Coastguard Worker {
644*3ac0a46fSAndroid Build Coastguard Worker     assert(p_size >= 0);
645*3ac0a46fSAndroid Build Coastguard Worker     return p_stream->m_opj_seek(p_stream, p_size, p_event_mgr);
646*3ac0a46fSAndroid Build Coastguard Worker }
647*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_has_seek(const opj_stream_private_t * p_stream)648*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_has_seek(const opj_stream_private_t * p_stream)
649*3ac0a46fSAndroid Build Coastguard Worker {
650*3ac0a46fSAndroid Build Coastguard Worker     return p_stream->m_seek_fn != opj_stream_default_seek;
651*3ac0a46fSAndroid Build Coastguard Worker }
652*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_default_read(void * p_buffer,OPJ_SIZE_T p_nb_bytes,void * p_user_data)653*3ac0a46fSAndroid Build Coastguard Worker OPJ_SIZE_T opj_stream_default_read(void * p_buffer, OPJ_SIZE_T p_nb_bytes,
654*3ac0a46fSAndroid Build Coastguard Worker                                    void * p_user_data)
655*3ac0a46fSAndroid Build Coastguard Worker {
656*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(p_buffer);
657*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(p_nb_bytes);
658*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(p_user_data);
659*3ac0a46fSAndroid Build Coastguard Worker     return (OPJ_SIZE_T) - 1;
660*3ac0a46fSAndroid Build Coastguard Worker }
661*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_default_write(void * p_buffer,OPJ_SIZE_T p_nb_bytes,void * p_user_data)662*3ac0a46fSAndroid Build Coastguard Worker OPJ_SIZE_T opj_stream_default_write(void * p_buffer, OPJ_SIZE_T p_nb_bytes,
663*3ac0a46fSAndroid Build Coastguard Worker                                     void * p_user_data)
664*3ac0a46fSAndroid Build Coastguard Worker {
665*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(p_buffer);
666*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(p_nb_bytes);
667*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(p_user_data);
668*3ac0a46fSAndroid Build Coastguard Worker     return (OPJ_SIZE_T) - 1;
669*3ac0a46fSAndroid Build Coastguard Worker }
670*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_default_skip(OPJ_OFF_T p_nb_bytes,void * p_user_data)671*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_default_skip(OPJ_OFF_T p_nb_bytes, void * p_user_data)
672*3ac0a46fSAndroid Build Coastguard Worker {
673*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(p_nb_bytes);
674*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(p_user_data);
675*3ac0a46fSAndroid Build Coastguard Worker     return (OPJ_OFF_T) - 1;
676*3ac0a46fSAndroid Build Coastguard Worker }
677*3ac0a46fSAndroid Build Coastguard Worker 
opj_stream_default_seek(OPJ_OFF_T p_nb_bytes,void * p_user_data)678*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_default_seek(OPJ_OFF_T p_nb_bytes, void * p_user_data)
679*3ac0a46fSAndroid Build Coastguard Worker {
680*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(p_nb_bytes);
681*3ac0a46fSAndroid Build Coastguard Worker     OPJ_ARG_NOT_USED(p_user_data);
682*3ac0a46fSAndroid Build Coastguard Worker     return OPJ_FALSE;
683*3ac0a46fSAndroid Build Coastguard Worker }
684