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