53e0f0db0fc625cf523e902d07e1f6740bbd667b
[openjpeg.git] / src / lib / openjp2 / bio.h
1 /*
2  * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
3  * Copyright (c) 2002-2007, Professor Benoit Macq
4  * Copyright (c) 2001-2003, David Janssens
5  * Copyright (c) 2002-2003, Yannick Verschueren
6  * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
7  * Copyright (c) 2005, Herve Drolon, FreeImage Team
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31
32 #ifndef __BIO_H
33 #define __BIO_H
34
35 #include <stddef.h> /* ptrdiff_t */
36
37 /** 
38 @file bio.h
39 @brief Implementation of an individual bit input-output (BIO)
40
41 The functions in BIO.C have for goal to realize an individual bit input - output.
42 */
43
44 /** @defgroup BIO BIO - Individual bit input-output stream */
45 /*@{*/
46
47 /**
48 Individual bit input-output stream (BIO)
49 */
50 typedef struct opj_bio {
51         /** pointer to the start of the buffer */
52         OPJ_BYTE *start;
53         /** pointer to the end of the buffer */
54         OPJ_BYTE *end;
55         /** pointer to the present position in the buffer */
56         OPJ_BYTE *bp;
57         /** temporary place where each byte is read or written */
58         OPJ_UINT32 buf;
59         /** coder : number of bits free to write. decoder : number of bits read */
60         int ct;
61 } opj_bio_t;
62
63 /** @name Exported functions */
64 /*@{*/
65 /* ----------------------------------------------------------------------- */
66 /**
67 Create a new BIO handle 
68 @return Returns a new BIO handle if successful, returns NULL otherwise
69 */
70 opj_bio_t* opj_bio_create(void);
71 /**
72 Destroy a previously created BIO handle
73 @param bio BIO handle to destroy
74 */
75 void opj_bio_destroy(opj_bio_t *bio);
76 /**
77 Number of bytes written.
78 @param bio BIO handle
79 @return Returns the number of bytes written
80 */
81 ptrdiff_t opj_bio_numbytes(opj_bio_t *bio);
82 /**
83 Init encoder
84 @param bio BIO handle
85 @param bp Output buffer
86 @param len Output buffer length 
87 */
88 void opj_bio_init_enc(opj_bio_t *bio, OPJ_BYTE *bp, OPJ_UINT32 len);
89 /**
90 Init decoder
91 @param bio BIO handle
92 @param bp Input buffer
93 @param len Input buffer length 
94 */
95 void opj_bio_init_dec(opj_bio_t *bio, OPJ_BYTE *bp, OPJ_UINT32 len);
96 /**
97 Write bits
98 @param bio BIO handle
99 @param v Value of bits
100 @param n Number of bits to write
101 */
102 void opj_bio_write(opj_bio_t *bio, OPJ_UINT32 v, OPJ_UINT32 n);
103 /**
104 Read bits
105 @param bio BIO handle
106 @param n Number of bits to read 
107 @return Returns the corresponding read number
108 */
109 OPJ_UINT32 opj_bio_read(opj_bio_t *bio, OPJ_UINT32 n);
110 /**
111 Flush bits
112 @param bio BIO handle
113 @return Returns OPJ_TRUE if successful, returns OPJ_FALSE otherwise
114 */
115 opj_bool opj_bio_flush(opj_bio_t *bio);
116 /**
117 Passes the ending bits (coming from flushing)
118 @param bio BIO handle
119 @return Returns OPJ_TRUE if successful, returns OPJ_FALSE otherwise
120 */
121 opj_bool opj_bio_inalign(opj_bio_t *bio);
122 /* ----------------------------------------------------------------------- */
123 /*@}*/
124
125 /*@}*/
126
127 #endif /* __BIO_H */
128