bio.h 4.4 KB

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