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