g72x.h
上传用户:shw771010
上传日期:2022-01-05
资源大小:991k
文件大小:3k
源码类别:

Audio

开发平台:

Unix_Linux

  1. /*
  2. ** Copyright (C) 1999-2009 Erik de Castro Lopo <erikd@mega-nerd.com>
  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 g72x_priv.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. G723_40_BITS_PER_SAMPLE = 5,
  38. G721_32_BITS_PER_SAMPLE = 4,
  39. G721_40_BITS_PER_SAMPLE = 5,
  40. G723_16_SAMPLES_PER_BLOCK = G72x_BLOCK_SIZE,
  41. G723_24_SAMPLES_PER_BLOCK = G723_24_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G723_24_BITS_PER_SAMPLE),
  42. G723_40_SAMPLES_PER_BLOCK = G723_40_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G723_40_BITS_PER_SAMPLE),
  43. G721_32_SAMPLES_PER_BLOCK = G72x_BLOCK_SIZE,
  44. G721_40_SAMPLES_PER_BLOCK = G721_40_BITS_PER_SAMPLE * (G72x_BLOCK_SIZE / G721_40_BITS_PER_SAMPLE),
  45. G723_16_BYTES_PER_BLOCK = (G723_16_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
  46. G723_24_BYTES_PER_BLOCK = (G723_24_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
  47. G723_40_BYTES_PER_BLOCK = (G723_40_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
  48. G721_32_BYTES_PER_BLOCK = (G721_32_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8,
  49. G721_40_BYTES_PER_BLOCK = (G721_40_BITS_PER_SAMPLE * G72x_BLOCK_SIZE) / 8
  50. } ;
  51. /* Forward declaration of of g72x_state. */
  52. struct g72x_state ;
  53. /* External function definitions. */
  54. struct g72x_state * g72x_reader_init (int codec, int *blocksize, int *samplesperblock) ;
  55. struct g72x_state * g72x_writer_init (int codec, int *blocksize, int *samplesperblock) ;
  56. /*
  57. ** Initialize the ADPCM state table for the given codec.
  58. ** Return 0 on success, 1 on fail.
  59. */
  60. int g72x_decode_block (struct g72x_state *pstate, const unsigned char *block, short *samples) ;
  61. /*
  62. ** The caller fills data->block with data->bytes bytes before calling the
  63. ** function. The value data->bytes must be an integer multiple of
  64. ** data->blocksize and be <= data->max_bytes.
  65. ** When it returns, the caller can read out data->samples samples.
  66. */
  67. int g72x_encode_block (struct g72x_state *pstate, short *samples, unsigned char *block) ;
  68. /*
  69. ** The caller fills state->samples some integer multiple data->samples_per_block
  70. ** (up to G72x_BLOCK_SIZE) samples before calling the function.
  71. ** When it returns, the caller can read out bytes encoded bytes.
  72. */
  73. #endif /* !G72X_HEADER_FILE */