xref: /aosp_15_r20/external/pdfium/third_party/libopenjpeg/cio.h (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 #ifndef OPJ_CIO_H
41*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_CIO_H
42*3ac0a46fSAndroid Build Coastguard Worker /**
43*3ac0a46fSAndroid Build Coastguard Worker @file cio.h
44*3ac0a46fSAndroid Build Coastguard Worker @brief Implementation of a byte input-output process (CIO)
45*3ac0a46fSAndroid Build Coastguard Worker 
46*3ac0a46fSAndroid Build Coastguard Worker The functions in CIO.C have for goal to realize a byte input / output process.
47*3ac0a46fSAndroid Build Coastguard Worker */
48*3ac0a46fSAndroid Build Coastguard Worker 
49*3ac0a46fSAndroid Build Coastguard Worker /** @defgroup CIO CIO - byte input-output stream */
50*3ac0a46fSAndroid Build Coastguard Worker /*@{*/
51*3ac0a46fSAndroid Build Coastguard Worker 
52*3ac0a46fSAndroid Build Coastguard Worker #include "opj_config_private.h"
53*3ac0a46fSAndroid Build Coastguard Worker 
54*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */
55*3ac0a46fSAndroid Build Coastguard Worker 
56*3ac0a46fSAndroid Build Coastguard Worker #if defined(OPJ_BIG_ENDIAN)
57*3ac0a46fSAndroid Build Coastguard Worker #define opj_write_bytes     opj_write_bytes_BE
58*3ac0a46fSAndroid Build Coastguard Worker #define opj_read_bytes      opj_read_bytes_BE
59*3ac0a46fSAndroid Build Coastguard Worker #define opj_write_double    opj_write_double_BE
60*3ac0a46fSAndroid Build Coastguard Worker #define opj_read_double     opj_read_double_BE
61*3ac0a46fSAndroid Build Coastguard Worker #define opj_write_float     opj_write_float_BE
62*3ac0a46fSAndroid Build Coastguard Worker #define opj_read_float      opj_read_float_BE
63*3ac0a46fSAndroid Build Coastguard Worker #else
64*3ac0a46fSAndroid Build Coastguard Worker #define opj_write_bytes     opj_write_bytes_LE
65*3ac0a46fSAndroid Build Coastguard Worker #define opj_read_bytes      opj_read_bytes_LE
66*3ac0a46fSAndroid Build Coastguard Worker #define opj_write_double    opj_write_double_LE
67*3ac0a46fSAndroid Build Coastguard Worker #define opj_read_double     opj_read_double_LE
68*3ac0a46fSAndroid Build Coastguard Worker #define opj_write_float     opj_write_float_LE
69*3ac0a46fSAndroid Build Coastguard Worker #define opj_read_float      opj_read_float_LE
70*3ac0a46fSAndroid Build Coastguard Worker #endif
71*3ac0a46fSAndroid Build Coastguard Worker 
72*3ac0a46fSAndroid Build Coastguard Worker 
73*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_STREAM_STATUS_OUTPUT  0x1U
74*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_STREAM_STATUS_INPUT   0x2U
75*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_STREAM_STATUS_END     0x4U
76*3ac0a46fSAndroid Build Coastguard Worker #define OPJ_STREAM_STATUS_ERROR   0x8U
77*3ac0a46fSAndroid Build Coastguard Worker 
78*3ac0a46fSAndroid Build Coastguard Worker /**
79*3ac0a46fSAndroid Build Coastguard Worker Byte input-output stream.
80*3ac0a46fSAndroid Build Coastguard Worker */
81*3ac0a46fSAndroid Build Coastguard Worker typedef struct opj_stream_private {
82*3ac0a46fSAndroid Build Coastguard Worker     /**
83*3ac0a46fSAndroid Build Coastguard Worker      * User data, be it files, ... The actual data depends on the type of the stream.
84*3ac0a46fSAndroid Build Coastguard Worker      */
85*3ac0a46fSAndroid Build Coastguard Worker     void *                  m_user_data;
86*3ac0a46fSAndroid Build Coastguard Worker 
87*3ac0a46fSAndroid Build Coastguard Worker     /**
88*3ac0a46fSAndroid Build Coastguard Worker      * Pointer to function to free m_user_data (NULL at initialization)
89*3ac0a46fSAndroid Build Coastguard Worker      * when destroying the stream. If pointer is NULL the function is not
90*3ac0a46fSAndroid Build Coastguard Worker      * called and the m_user_data is not freed (even if non-NULL).
91*3ac0a46fSAndroid Build Coastguard Worker      */
92*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_free_user_data_fn        m_free_user_data_fn;
93*3ac0a46fSAndroid Build Coastguard Worker 
94*3ac0a46fSAndroid Build Coastguard Worker     /**
95*3ac0a46fSAndroid Build Coastguard Worker      * User data length
96*3ac0a46fSAndroid Build Coastguard Worker      */
97*3ac0a46fSAndroid Build Coastguard Worker     OPJ_UINT64              m_user_data_length;
98*3ac0a46fSAndroid Build Coastguard Worker 
99*3ac0a46fSAndroid Build Coastguard Worker     /**
100*3ac0a46fSAndroid Build Coastguard Worker      * Pointer to actual read function (NULL at the initialization of the cio.
101*3ac0a46fSAndroid Build Coastguard Worker      */
102*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_read_fn      m_read_fn;
103*3ac0a46fSAndroid Build Coastguard Worker 
104*3ac0a46fSAndroid Build Coastguard Worker     /**
105*3ac0a46fSAndroid Build Coastguard Worker      * Pointer to actual write function (NULL at the initialization of the cio.
106*3ac0a46fSAndroid Build Coastguard Worker      */
107*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_write_fn     m_write_fn;
108*3ac0a46fSAndroid Build Coastguard Worker 
109*3ac0a46fSAndroid Build Coastguard Worker     /**
110*3ac0a46fSAndroid Build Coastguard Worker      * Pointer to actual skip function (NULL at the initialization of the cio.
111*3ac0a46fSAndroid Build Coastguard Worker      * There is no seek function to prevent from back and forth slow procedures.
112*3ac0a46fSAndroid Build Coastguard Worker      */
113*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_skip_fn      m_skip_fn;
114*3ac0a46fSAndroid Build Coastguard Worker 
115*3ac0a46fSAndroid Build Coastguard Worker     /**
116*3ac0a46fSAndroid Build Coastguard Worker      * Pointer to actual seek function (if available).
117*3ac0a46fSAndroid Build Coastguard Worker      */
118*3ac0a46fSAndroid Build Coastguard Worker     opj_stream_seek_fn      m_seek_fn;
119*3ac0a46fSAndroid Build Coastguard Worker 
120*3ac0a46fSAndroid Build Coastguard Worker     /**
121*3ac0a46fSAndroid Build Coastguard Worker      * Actual data stored into the stream if read from. Data is read by chunk of fixed size.
122*3ac0a46fSAndroid Build Coastguard Worker      * you should never access this data directly.
123*3ac0a46fSAndroid Build Coastguard Worker      */
124*3ac0a46fSAndroid Build Coastguard Worker     OPJ_BYTE *                  m_stored_data;
125*3ac0a46fSAndroid Build Coastguard Worker 
126*3ac0a46fSAndroid Build Coastguard Worker     /**
127*3ac0a46fSAndroid Build Coastguard Worker      * Pointer to the current read data.
128*3ac0a46fSAndroid Build Coastguard Worker      */
129*3ac0a46fSAndroid Build Coastguard Worker     OPJ_BYTE *                  m_current_data;
130*3ac0a46fSAndroid Build Coastguard Worker 
131*3ac0a46fSAndroid Build Coastguard Worker     /**
132*3ac0a46fSAndroid Build Coastguard Worker     * FIXME DOC.
133*3ac0a46fSAndroid Build Coastguard Worker     */
134*3ac0a46fSAndroid Build Coastguard Worker     OPJ_OFF_T(* m_opj_skip)(struct opj_stream_private *, OPJ_OFF_T,
135*3ac0a46fSAndroid Build Coastguard Worker                             struct opj_event_mgr *);
136*3ac0a46fSAndroid Build Coastguard Worker 
137*3ac0a46fSAndroid Build Coastguard Worker     /**
138*3ac0a46fSAndroid Build Coastguard Worker     * FIXME DOC.
139*3ac0a46fSAndroid Build Coastguard Worker     */
140*3ac0a46fSAndroid Build Coastguard Worker     OPJ_BOOL(* m_opj_seek)(struct opj_stream_private *, OPJ_OFF_T,
141*3ac0a46fSAndroid Build Coastguard Worker                            struct opj_event_mgr *);
142*3ac0a46fSAndroid Build Coastguard Worker 
143*3ac0a46fSAndroid Build Coastguard Worker     /**
144*3ac0a46fSAndroid Build Coastguard Worker      * number of bytes containing in the buffer.
145*3ac0a46fSAndroid Build Coastguard Worker      */
146*3ac0a46fSAndroid Build Coastguard Worker     OPJ_SIZE_T          m_bytes_in_buffer;
147*3ac0a46fSAndroid Build Coastguard Worker 
148*3ac0a46fSAndroid Build Coastguard Worker     /**
149*3ac0a46fSAndroid Build Coastguard Worker      * The number of bytes read/written from the beginning of the stream
150*3ac0a46fSAndroid Build Coastguard Worker      */
151*3ac0a46fSAndroid Build Coastguard Worker     OPJ_OFF_T           m_byte_offset;
152*3ac0a46fSAndroid Build Coastguard Worker 
153*3ac0a46fSAndroid Build Coastguard Worker     /**
154*3ac0a46fSAndroid Build Coastguard Worker      * The size of the buffer.
155*3ac0a46fSAndroid Build Coastguard Worker      */
156*3ac0a46fSAndroid Build Coastguard Worker     OPJ_SIZE_T          m_buffer_size;
157*3ac0a46fSAndroid Build Coastguard Worker 
158*3ac0a46fSAndroid Build Coastguard Worker     /**
159*3ac0a46fSAndroid Build Coastguard Worker      * Flags to tell the status of the stream.
160*3ac0a46fSAndroid Build Coastguard Worker      * Used with OPJ_STREAM_STATUS_* defines.
161*3ac0a46fSAndroid Build Coastguard Worker      */
162*3ac0a46fSAndroid Build Coastguard Worker     OPJ_UINT32 m_status;
163*3ac0a46fSAndroid Build Coastguard Worker 
164*3ac0a46fSAndroid Build Coastguard Worker }
165*3ac0a46fSAndroid Build Coastguard Worker opj_stream_private_t;
166*3ac0a46fSAndroid Build Coastguard Worker 
167*3ac0a46fSAndroid Build Coastguard Worker /** @name Exported functions (see also openjpeg.h) */
168*3ac0a46fSAndroid Build Coastguard Worker /*@{*/
169*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */
170*3ac0a46fSAndroid Build Coastguard Worker /**
171*3ac0a46fSAndroid Build Coastguard Worker  * Write some bytes to the given data buffer, this function is used in Big Endian cpus.
172*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to write data to.
173*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       the value to write
174*3ac0a46fSAndroid Build Coastguard Worker  * @param p_nb_bytes    the number of bytes to write
175*3ac0a46fSAndroid Build Coastguard Worker */
176*3ac0a46fSAndroid Build Coastguard Worker void opj_write_bytes_BE(OPJ_BYTE * p_buffer, OPJ_UINT32 p_value,
177*3ac0a46fSAndroid Build Coastguard Worker                         OPJ_UINT32 p_nb_bytes);
178*3ac0a46fSAndroid Build Coastguard Worker 
179*3ac0a46fSAndroid Build Coastguard Worker /**
180*3ac0a46fSAndroid Build Coastguard Worker  * Reads some bytes from the given data buffer, this function is used in Big Endian cpus.
181*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to read data from.
182*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       pointer to the value that will store the data.
183*3ac0a46fSAndroid Build Coastguard Worker  * @param p_nb_bytes    the nb bytes to read.
184*3ac0a46fSAndroid Build Coastguard Worker  * @return              the number of bytes read or -1 if an error occurred.
185*3ac0a46fSAndroid Build Coastguard Worker  */
186*3ac0a46fSAndroid Build Coastguard Worker void opj_read_bytes_BE(const OPJ_BYTE * p_buffer, OPJ_UINT32 * p_value,
187*3ac0a46fSAndroid Build Coastguard Worker                        OPJ_UINT32 p_nb_bytes);
188*3ac0a46fSAndroid Build Coastguard Worker 
189*3ac0a46fSAndroid Build Coastguard Worker /**
190*3ac0a46fSAndroid Build Coastguard Worker  * Write some bytes to the given data buffer, this function is used in Little Endian cpus.
191*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to write data to.
192*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       the value to write
193*3ac0a46fSAndroid Build Coastguard Worker  * @param p_nb_bytes    the number of bytes to write
194*3ac0a46fSAndroid Build Coastguard Worker  * @return              the number of bytes written or -1 if an error occurred
195*3ac0a46fSAndroid Build Coastguard Worker */
196*3ac0a46fSAndroid Build Coastguard Worker void opj_write_bytes_LE(OPJ_BYTE * p_buffer, OPJ_UINT32 p_value,
197*3ac0a46fSAndroid Build Coastguard Worker                         OPJ_UINT32 p_nb_bytes);
198*3ac0a46fSAndroid Build Coastguard Worker 
199*3ac0a46fSAndroid Build Coastguard Worker /**
200*3ac0a46fSAndroid Build Coastguard Worker  * Reads some bytes from the given data buffer, this function is used in Little Endian cpus.
201*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to read data from.
202*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       pointer to the value that will store the data.
203*3ac0a46fSAndroid Build Coastguard Worker  * @param p_nb_bytes    the nb bytes to read.
204*3ac0a46fSAndroid Build Coastguard Worker  * @return              the number of bytes read or -1 if an error occurred.
205*3ac0a46fSAndroid Build Coastguard Worker  */
206*3ac0a46fSAndroid Build Coastguard Worker void opj_read_bytes_LE(const OPJ_BYTE * p_buffer, OPJ_UINT32 * p_value,
207*3ac0a46fSAndroid Build Coastguard Worker                        OPJ_UINT32 p_nb_bytes);
208*3ac0a46fSAndroid Build Coastguard Worker 
209*3ac0a46fSAndroid Build Coastguard Worker 
210*3ac0a46fSAndroid Build Coastguard Worker /**
211*3ac0a46fSAndroid Build Coastguard Worker  * Write some bytes to the given data buffer, this function is used in Little Endian cpus.
212*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to write data to.
213*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       the value to write
214*3ac0a46fSAndroid Build Coastguard Worker  */
215*3ac0a46fSAndroid Build Coastguard Worker void opj_write_double_LE(OPJ_BYTE * p_buffer, OPJ_FLOAT64 p_value);
216*3ac0a46fSAndroid Build Coastguard Worker 
217*3ac0a46fSAndroid Build Coastguard Worker /***
218*3ac0a46fSAndroid Build Coastguard Worker  * Write some bytes to the given data buffer, this function is used in Big Endian cpus.
219*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to write data to.
220*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       the value to write
221*3ac0a46fSAndroid Build Coastguard Worker  */
222*3ac0a46fSAndroid Build Coastguard Worker void opj_write_double_BE(OPJ_BYTE * p_buffer, OPJ_FLOAT64 p_value);
223*3ac0a46fSAndroid Build Coastguard Worker 
224*3ac0a46fSAndroid Build Coastguard Worker /**
225*3ac0a46fSAndroid Build Coastguard Worker  * Reads some bytes from the given data buffer, this function is used in Little Endian cpus.
226*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to read data from.
227*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       pointer to the value that will store the data.
228*3ac0a46fSAndroid Build Coastguard Worker  */
229*3ac0a46fSAndroid Build Coastguard Worker void opj_read_double_LE(const OPJ_BYTE * p_buffer, OPJ_FLOAT64 * p_value);
230*3ac0a46fSAndroid Build Coastguard Worker 
231*3ac0a46fSAndroid Build Coastguard Worker /**
232*3ac0a46fSAndroid Build Coastguard Worker  * Reads some bytes from the given data buffer, this function is used in Big Endian cpus.
233*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to read data from.
234*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       pointer to the value that will store the data.
235*3ac0a46fSAndroid Build Coastguard Worker  */
236*3ac0a46fSAndroid Build Coastguard Worker void opj_read_double_BE(const OPJ_BYTE * p_buffer, OPJ_FLOAT64 * p_value);
237*3ac0a46fSAndroid Build Coastguard Worker 
238*3ac0a46fSAndroid Build Coastguard Worker /**
239*3ac0a46fSAndroid Build Coastguard Worker  * Reads some bytes from the given data buffer, this function is used in Little Endian cpus.
240*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to read data from.
241*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       pointer to the value that will store the data.
242*3ac0a46fSAndroid Build Coastguard Worker  */
243*3ac0a46fSAndroid Build Coastguard Worker void opj_read_float_LE(const OPJ_BYTE * p_buffer, OPJ_FLOAT32 * p_value);
244*3ac0a46fSAndroid Build Coastguard Worker 
245*3ac0a46fSAndroid Build Coastguard Worker /**
246*3ac0a46fSAndroid Build Coastguard Worker  * Reads some bytes from the given data buffer, this function is used in Big Endian cpus.
247*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to read data from.
248*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       pointer to the value that will store the data.
249*3ac0a46fSAndroid Build Coastguard Worker  */
250*3ac0a46fSAndroid Build Coastguard Worker void opj_read_float_BE(const OPJ_BYTE * p_buffer, OPJ_FLOAT32 * p_value);
251*3ac0a46fSAndroid Build Coastguard Worker 
252*3ac0a46fSAndroid Build Coastguard Worker /**
253*3ac0a46fSAndroid Build Coastguard Worker  * Write some bytes to the given data buffer, this function is used in Little Endian cpus.
254*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to write data to.
255*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       the value to write
256*3ac0a46fSAndroid Build Coastguard Worker  */
257*3ac0a46fSAndroid Build Coastguard Worker void opj_write_float_LE(OPJ_BYTE * p_buffer, OPJ_FLOAT32 p_value);
258*3ac0a46fSAndroid Build Coastguard Worker 
259*3ac0a46fSAndroid Build Coastguard Worker /***
260*3ac0a46fSAndroid Build Coastguard Worker  * Write some bytes to the given data buffer, this function is used in Big Endian cpus.
261*3ac0a46fSAndroid Build Coastguard Worker  * @param p_buffer      pointer the data buffer to write data to.
262*3ac0a46fSAndroid Build Coastguard Worker  * @param p_value       the value to write
263*3ac0a46fSAndroid Build Coastguard Worker  */
264*3ac0a46fSAndroid Build Coastguard Worker void opj_write_float_BE(OPJ_BYTE * p_buffer, OPJ_FLOAT32 p_value);
265*3ac0a46fSAndroid Build Coastguard Worker 
266*3ac0a46fSAndroid Build Coastguard Worker /**
267*3ac0a46fSAndroid Build Coastguard Worker  * Reads some bytes from the stream.
268*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_stream    the stream to read data from.
269*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_buffer    pointer to the data buffer that will receive the data.
270*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_size      number of bytes to read.
271*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_event_mgr the user event manager to be notified of special events.
272*3ac0a46fSAndroid Build Coastguard Worker  * @return      the number of bytes read, or -1 if an error occurred or if the stream is at the end.
273*3ac0a46fSAndroid Build Coastguard Worker  */
274*3ac0a46fSAndroid Build Coastguard Worker OPJ_SIZE_T opj_stream_read_data(opj_stream_private_t * p_stream,
275*3ac0a46fSAndroid Build Coastguard Worker                                 OPJ_BYTE * p_buffer, OPJ_SIZE_T p_size, struct opj_event_mgr * p_event_mgr);
276*3ac0a46fSAndroid Build Coastguard Worker 
277*3ac0a46fSAndroid Build Coastguard Worker /**
278*3ac0a46fSAndroid Build Coastguard Worker  * Writes some bytes to the stream.
279*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_stream    the stream to write data to.
280*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_buffer    pointer to the data buffer holds the data to be writtent.
281*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_size      number of bytes to write.
282*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_event_mgr the user event manager to be notified of special events.
283*3ac0a46fSAndroid Build Coastguard Worker  * @return      the number of bytes writtent, or -1 if an error occurred.
284*3ac0a46fSAndroid Build Coastguard Worker  */
285*3ac0a46fSAndroid Build Coastguard Worker OPJ_SIZE_T opj_stream_write_data(opj_stream_private_t * p_stream,
286*3ac0a46fSAndroid Build Coastguard Worker                                  const OPJ_BYTE * p_buffer, OPJ_SIZE_T p_size,
287*3ac0a46fSAndroid Build Coastguard Worker                                  struct opj_event_mgr * p_event_mgr);
288*3ac0a46fSAndroid Build Coastguard Worker 
289*3ac0a46fSAndroid Build Coastguard Worker /**
290*3ac0a46fSAndroid Build Coastguard Worker  * Writes the content of the stream buffer to the stream.
291*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_stream    the stream to write data to.
292*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_event_mgr the user event manager to be notified of special events.
293*3ac0a46fSAndroid Build Coastguard Worker  * @return      true if the data could be flushed, false else.
294*3ac0a46fSAndroid Build Coastguard Worker  */
295*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_flush(opj_stream_private_t * p_stream,
296*3ac0a46fSAndroid Build Coastguard Worker                           struct opj_event_mgr * p_event_mgr);
297*3ac0a46fSAndroid Build Coastguard Worker 
298*3ac0a46fSAndroid Build Coastguard Worker /**
299*3ac0a46fSAndroid Build Coastguard Worker  * Skips a number of bytes from the stream.
300*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_stream    the stream to skip data from.
301*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_size      the number of bytes to skip.
302*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_event_mgr the user event manager to be notified of special events.
303*3ac0a46fSAndroid Build Coastguard Worker  * @return      the number of bytes skipped, or -1 if an error occurred.
304*3ac0a46fSAndroid Build Coastguard Worker  */
305*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_skip(opj_stream_private_t * p_stream, OPJ_OFF_T p_size,
306*3ac0a46fSAndroid Build Coastguard Worker                           struct opj_event_mgr * p_event_mgr);
307*3ac0a46fSAndroid Build Coastguard Worker 
308*3ac0a46fSAndroid Build Coastguard Worker /**
309*3ac0a46fSAndroid Build Coastguard Worker  * Tells the byte offset on the stream (similar to ftell).
310*3ac0a46fSAndroid Build Coastguard Worker  *
311*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_stream    the stream to get the information from.
312*3ac0a46fSAndroid Build Coastguard Worker  *
313*3ac0a46fSAndroid Build Coastguard Worker  * @return      the current position o fthe stream.
314*3ac0a46fSAndroid Build Coastguard Worker  */
315*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_tell(const opj_stream_private_t * p_stream);
316*3ac0a46fSAndroid Build Coastguard Worker 
317*3ac0a46fSAndroid Build Coastguard Worker 
318*3ac0a46fSAndroid Build Coastguard Worker /**
319*3ac0a46fSAndroid Build Coastguard Worker  * Get the number of bytes left before the end of the stream (similar to cio_numbytesleft).
320*3ac0a46fSAndroid Build Coastguard Worker  *
321*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_stream    the stream to get the information from.
322*3ac0a46fSAndroid Build Coastguard Worker  *
323*3ac0a46fSAndroid Build Coastguard Worker  * @return      Number of bytes left before the end of the stream.
324*3ac0a46fSAndroid Build Coastguard Worker  */
325*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_get_number_byte_left(const opj_stream_private_t *
326*3ac0a46fSAndroid Build Coastguard Worker         p_stream);
327*3ac0a46fSAndroid Build Coastguard Worker 
328*3ac0a46fSAndroid Build Coastguard Worker /**
329*3ac0a46fSAndroid Build Coastguard Worker  * Skips a number of bytes from the stream.
330*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_stream    the stream to skip data from.
331*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_size      the number of bytes to skip.
332*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_event_mgr the user event manager to be notified of special events.
333*3ac0a46fSAndroid Build Coastguard Worker  * @return      the number of bytes skipped, or -1 if an error occurred.
334*3ac0a46fSAndroid Build Coastguard Worker  */
335*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_write_skip(opj_stream_private_t * p_stream,
336*3ac0a46fSAndroid Build Coastguard Worker                                 OPJ_OFF_T p_size, struct opj_event_mgr * p_event_mgr);
337*3ac0a46fSAndroid Build Coastguard Worker 
338*3ac0a46fSAndroid Build Coastguard Worker /**
339*3ac0a46fSAndroid Build Coastguard Worker  * Skips a number of bytes from the stream.
340*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_stream    the stream to skip data from.
341*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_size      the number of bytes to skip.
342*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_event_mgr the user event manager to be notified of special events.
343*3ac0a46fSAndroid Build Coastguard Worker  * @return      the number of bytes skipped, or -1 if an error occurred.
344*3ac0a46fSAndroid Build Coastguard Worker  */
345*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_read_skip(opj_stream_private_t * p_stream,
346*3ac0a46fSAndroid Build Coastguard Worker                                OPJ_OFF_T p_size, struct opj_event_mgr * p_event_mgr);
347*3ac0a46fSAndroid Build Coastguard Worker 
348*3ac0a46fSAndroid Build Coastguard Worker /**
349*3ac0a46fSAndroid Build Coastguard Worker  * Skips a number of bytes from the stream.
350*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_stream    the stream to skip data from.
351*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_size      the number of bytes to skip.
352*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_event_mgr the user event manager to be notified of special events.
353*3ac0a46fSAndroid Build Coastguard Worker  * @return      OPJ_TRUE if success, or OPJ_FALSE if an error occurred.
354*3ac0a46fSAndroid Build Coastguard Worker  */
355*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_read_seek(opj_stream_private_t * p_stream, OPJ_OFF_T p_size,
356*3ac0a46fSAndroid Build Coastguard Worker                               struct opj_event_mgr * p_event_mgr);
357*3ac0a46fSAndroid Build Coastguard Worker 
358*3ac0a46fSAndroid Build Coastguard Worker /**
359*3ac0a46fSAndroid Build Coastguard Worker  * Skips a number of bytes from the stream.
360*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_stream    the stream to skip data from.
361*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_size      the number of bytes to skip.
362*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_event_mgr the user event manager to be notified of special events.
363*3ac0a46fSAndroid Build Coastguard Worker  * @return      the number of bytes skipped, or -1 if an error occurred.
364*3ac0a46fSAndroid Build Coastguard Worker  */
365*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_write_seek(opj_stream_private_t * p_stream,
366*3ac0a46fSAndroid Build Coastguard Worker                                OPJ_OFF_T p_size, struct opj_event_mgr * p_event_mgr);
367*3ac0a46fSAndroid Build Coastguard Worker 
368*3ac0a46fSAndroid Build Coastguard Worker /**
369*3ac0a46fSAndroid Build Coastguard Worker  * Seeks a number of bytes from the stream.
370*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_stream    the stream to skip data from.
371*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_size      the number of bytes to skip.
372*3ac0a46fSAndroid Build Coastguard Worker  * @param       p_event_mgr the user event manager to be notified of special events.
373*3ac0a46fSAndroid Build Coastguard Worker  * @return      true if the stream is seekable.
374*3ac0a46fSAndroid Build Coastguard Worker  */
375*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_seek(opj_stream_private_t * p_stream, OPJ_OFF_T p_size,
376*3ac0a46fSAndroid Build Coastguard Worker                          struct opj_event_mgr * p_event_mgr);
377*3ac0a46fSAndroid Build Coastguard Worker 
378*3ac0a46fSAndroid Build Coastguard Worker /**
379*3ac0a46fSAndroid Build Coastguard Worker  * Tells if the given stream is seekable.
380*3ac0a46fSAndroid Build Coastguard Worker  */
381*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_has_seek(const opj_stream_private_t * p_stream);
382*3ac0a46fSAndroid Build Coastguard Worker 
383*3ac0a46fSAndroid Build Coastguard Worker /**
384*3ac0a46fSAndroid Build Coastguard Worker  * FIXME DOC.
385*3ac0a46fSAndroid Build Coastguard Worker  */
386*3ac0a46fSAndroid Build Coastguard Worker OPJ_SIZE_T opj_stream_default_read(void * p_buffer, OPJ_SIZE_T p_nb_bytes,
387*3ac0a46fSAndroid Build Coastguard Worker                                    void * p_user_data);
388*3ac0a46fSAndroid Build Coastguard Worker 
389*3ac0a46fSAndroid Build Coastguard Worker /**
390*3ac0a46fSAndroid Build Coastguard Worker  * FIXME DOC.
391*3ac0a46fSAndroid Build Coastguard Worker  */
392*3ac0a46fSAndroid Build Coastguard Worker OPJ_SIZE_T opj_stream_default_write(void * p_buffer, OPJ_SIZE_T p_nb_bytes,
393*3ac0a46fSAndroid Build Coastguard Worker                                     void * p_user_data);
394*3ac0a46fSAndroid Build Coastguard Worker 
395*3ac0a46fSAndroid Build Coastguard Worker /**
396*3ac0a46fSAndroid Build Coastguard Worker  * FIXME DOC.
397*3ac0a46fSAndroid Build Coastguard Worker  */
398*3ac0a46fSAndroid Build Coastguard Worker OPJ_OFF_T opj_stream_default_skip(OPJ_OFF_T p_nb_bytes, void * p_user_data);
399*3ac0a46fSAndroid Build Coastguard Worker 
400*3ac0a46fSAndroid Build Coastguard Worker /**
401*3ac0a46fSAndroid Build Coastguard Worker  * FIXME DOC.
402*3ac0a46fSAndroid Build Coastguard Worker  */
403*3ac0a46fSAndroid Build Coastguard Worker OPJ_BOOL opj_stream_default_seek(OPJ_OFF_T p_nb_bytes, void * p_user_data);
404*3ac0a46fSAndroid Build Coastguard Worker 
405*3ac0a46fSAndroid Build Coastguard Worker /* ----------------------------------------------------------------------- */
406*3ac0a46fSAndroid Build Coastguard Worker /*@}*/
407*3ac0a46fSAndroid Build Coastguard Worker 
408*3ac0a46fSAndroid Build Coastguard Worker /*@}*/
409*3ac0a46fSAndroid Build Coastguard Worker 
410*3ac0a46fSAndroid Build Coastguard Worker 
411*3ac0a46fSAndroid Build Coastguard Worker #endif /* OPJ_CIO_H */
412*3ac0a46fSAndroid Build Coastguard Worker 
413