g72x.h
上传用户:sy_wanhua
上传日期:2013-07-25
资源大小:3048k
文件大小:4k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

C/C++

  1. /*
  2. ** Copyright (C) 1999-2000 Erik de Castro Lopo <erikd@zip.com.au>
  3. **  
  4. ** This program is free software; you can redistribute it and/or modify
  5. ** it under the terms of the GNU Lesser General Public License as published by
  6. ** the Free Software Foundation; either version 2.1 of the License, or
  7. ** (at your option) any later version.
  8. ** 
  9. ** This program is distributed in the hope that it will be useful,
  10. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. ** GNU Lesser General Public License for more details.
  13. ** 
  14. ** You should have received a copy of the GNU Lesser General Public License
  15. ** along with this program; if not, write to the Free Software 
  16. ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17. */
  18. /*
  19. ** This file is not the same as the original file from Sun Microsystems. Nearly
  20. ** all the original definitions and function prototypes that were in the  file 
  21. ** of this name have been moved to private.h.
  22. */
  23. #ifndef G72X_HEADER_FILE
  24. #define G72X_HEADER_FILE
  25. /* 
  26. ** Number of samples per block to process. 
  27. ** Must be a common multiple of possible bits per sample : 2, 3, 4, 5 and 8.
  28. */
  29. #define G72x_BLOCK_SIZE (3*5*8)  
  30. /*
  31. ** Identifiers for the differing kinds of G72x ADPCM codecs.
  32. ** The identifiers also define the number of encoded bits per sample.
  33. */
  34. enum
  35. { G723_16_BITS_PER_SAMPLE = 2,
  36. G723_24_BITS_PER_SAMPLE = 3, 
  37. G721_32_BITS_PER_SAMPLE = 4,
  38. G721_40_BITS_PER_SAMPLE = 5,
  39. G723_16_MIN_BYTES = 1,
  40. G723_24_MIN_BYTES = 3, 
  41. G721_32_MIN_BYTES = 1,
  42. G721_40_MIN_BYTES = 5
  43. } ;
  44. enum
  45. { G723_16_SAMPLES_PER_BLOCK = G72x_BLOCK_SIZE,
  46. G723_24_SAMPLES_PER_BLOCK = G723_24_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G723_24_BITS_PER_SAMPLE), 
  47. G721_32_SAMPLES_PER_BLOCK = G72x_BLOCK_SIZE,
  48. G721_40_SAMPLES_PER_BLOCK = G721_40_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G721_40_BITS_PER_SAMPLE)
  49. } ;
  50. enum
  51. { G723_16_BYTES_PER_BLOCK = (G723_16_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
  52. G723_24_BYTES_PER_BLOCK = (G723_24_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
  53. G721_32_BYTES_PER_BLOCK = (G721_32_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
  54. G721_40_BYTES_PER_BLOCK = (G721_40_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8
  55. } ; 
  56. /* 
  57. ** This is the public structure for passing data between the caller and
  58. ** the G72x encoder and decoder. 
  59. ** The private array is used by the encoder and decoder for internal
  60. ** state information and should not be changed in any way by the caller.
  61. ** When decoding or encoding a stream, the same instance of this struct
  62. ** should be used for every call so that the decoder/encoder keeps the
  63. ** correct state data between calls.
  64. */
  65. typedef struct 
  66. { /* Private data. Don't mess with it. */
  67. unsigned char private [256] ;  
  68. /* Public data. Read only. */
  69. int blocksize, max_bytes, samplesperblock, bytesperblock ;
  70. /* Public data. Read and write. */
  71. int blocks, blockcount, samplecount ;
  72. unsigned char block [G72x_BLOCK_SIZE] ;
  73. short samples [G72x_BLOCK_SIZE] ;
  74. } G72x_DATA ;
  75. /* External function definitions. */
  76. int g72x_reader_init (G72x_DATA *data, int codec) ;
  77. int g72x_writer_init (G72x_DATA *data, int codec) ;
  78. /*
  79. ** Initialize the ADPCM state table for the given codec.
  80. ** Return 0 on success, 1 on fail.
  81. */
  82. int g72x_decode_block (G72x_DATA *data) ;
  83. /*
  84. ** The caller fills data->block with data->bytes bytes before calling the 
  85. ** function. The value data->bytes must be an integer multiple of 
  86. ** data->blocksize and be <= data->max_bytes.
  87. ** When it returns, the caller can read out data->samples samples. 
  88. */  
  89. int g72x_encode_block (G72x_DATA *data) ;
  90. /*
  91. ** The caller fills state->samples some integer multiple data->samples_per_block
  92. ** (up to G72x_BLOCK_SIZE) samples before calling the function.
  93. ** When it returns, the caller can read out bytes encoded bytes. 
  94. */
  95. #endif /* !G72X_HEADER_FILE */