G726A.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. /**************************************************************************
  2. *
  3. * ITU-T SOFTWARE TOOLS' GENERAL PUBLIC LICENSE
  4. *
  5. * This "General Public License" is published in the Annex 1 of the
  6. * ITU-T Recommendation on "SOFTWARE TOOLS FOR HOMOGENITY OF RESULTS
  7. * IN THE STANDARDIZATION PROCESS OF SPEECH AND AUDIO CODERS",
  8. * approved in Geneva, 2000.
  9. *
  10. * TERMS AND CONDITIONS
  11. *
  12. * 1. This License Agreement applies to any module or other work
  13. * related to the ITU-T Software Tool Library, and developed by the
  14. * User's Group on Software Tools. The "Module", below, refers to any
  15. * such module or work, and a "work based on the Module" means either
  16. * the Module or any work containing the Module or a portion of it,
  17. * either verbatim or with modifications. Each licensee is addressed
  18. * as "you".
  19. *
  20. * 2. You may copy and distribute verbatim copies of the Module's
  21. * source code as you receive it, in any medium, provided that you:
  22. * - conspicuously and appropriately publish on each copy an appropriate
  23. * copyright notice and disclaimer of warranty;
  24. * - keep intact all the notices that refer to this General Public
  25. * License and to the absence of any warranty; and
  26. * - give any other recipients of the Module a copy of this General
  27. * Public License along with the Module.
  28. * You may charge a fee for the physical act of transferring a copy.
  29. *
  30. * 3. You may modify your copy or copies of the Module or any portion
  31. * of it, and copy and distribute such modifications under the terms
  32. * of Paragraph 1 above, provided that you also do the following:
  33. *
  34. * o cause the modified files to carry prominent notices stating
  35. * that you changed the files and the date of any change; and
  36. *
  37. * o cause the whole of any work that you distribute or publish,
  38. * that in whole or in part contains the Module or any part
  39. * thereof, either with or without modifications, to be licensed
  40. * at no charge to all third parties under the terms of this
  41. * General Public License (except that you may choose to grant
  42. * warranty protection to some or all third parties, at your
  43. * option).
  44. *
  45. * o If the modified module normally reads commands interactively
  46. * when run, you must cause it, when started running for such
  47. * interactive use in the simplest and most usual way, to print or
  48. * display an announcement including an appropriate copyright
  49. * notice and a notice that there is no warranty (or else, saying
  50. * that you provide a warranty) and that users may redistribute
  51. * the module under these conditions, and telling the user how to
  52. * view a copy of this General Public License.
  53. *
  54. * You may charge a fee for the physical act of transferring a copy,
  55. * and you may at your option offer warranty protection in exchange
  56. * for a fee.
  57. *
  58. * Mere aggregation of another independent work with the Module (or
  59. * its derivative) on a volume of a storage or distribution medium
  60. * does not bring the other work under the scope of these terms.
  61. *
  62. * 4. You may copy and distribute the Module (or a portion or
  63. * derivative of it, under Paragraph 2) in object code or executable
  64. * form under the terms of Paragraphs 1 and 2 above provided that you
  65. * also do one of the following:
  66. *
  67. * o accompany it with the complete corresponding machine-
  68. * readable source code, which must be distributed under the terms
  69. * of Paragraphs 1 and 2 above; or,
  70. *
  71. * o accompany it with a written offer, valid for at least three
  72. * years, to give any third party free (except for a nominal
  73. * charge for the cost of distribution) a complete machine-
  74. * readable copy of the corresponding source code, to be
  75. * distributed under the terms of Paragraphs 1 and 2 above; or,
  76. *
  77. * o accompany it with the information you received as to where
  78. * the corresponding source code may be obtained. (This
  79. * alternative is allowed only for noncommercial distribution and
  80. * only if you received the module in object code or executable
  81. * form alone.)
  82. *
  83. * Source code for a work means the preferred form of the work for
  84. * making modifications to it. For an executable file, complete
  85. * source code means all the source code for all modules it contains;
  86. * but, as a special exception, it need not include source code for
  87. * modules which are standard libraries that accompany the operating
  88. * system on which the executable file runs, or for standard header
  89. * files or definitions files that accompany that operating system.
  90. *
  91. * 5. You may not copy, modify, sublicense, distribute or transfer
  92. * the Module except as expressly provided under this General Public
  93. * License. Any attempt otherwise to copy, modify, sublicense,
  94. * distribute or transfer the Module is void, and will automatically
  95. * terminate your rights to use the Module under this License.
  96. * However, parties who have received copies, or rights to use copies,
  97. * from you under this General Public License will not have their
  98. * licenses terminated so long as such parties remain in full
  99. * compliance.
  100. *
  101. * 6. By copying, distributing or modifying the Module (or any work
  102. * based on the Module) you indicate your acceptance of this license
  103. * to do so, and all its terms and conditions.
  104. *
  105. * 7. Each time you redistribute the Module (or any work based on the
  106. * Module), the recipient automatically receives a license from the
  107. * original licensor to copy, distribute or modify the Module subject
  108. * to these terms and conditions. You may not impose any further
  109. * restrictions on the recipients' exercise of the rights granted
  110. * herein.
  111. *
  112. * 8. The ITU-T may publish revised and/or new versions of this
  113. * General Public License from time to time. Such new versions will
  114. * be similar in spirit to the present version, but may differ in
  115. * detail to address new problems or concerns.
  116. *
  117. * Each version is given a distinguishing version number. If the
  118. * Module specifies a version number of the license which applies to
  119. * it and "any later version", you have the option of following the
  120. * terms and conditions either of that version or of any later version
  121. * published by the ITU-T. If the Module does not specify a version
  122. * number of the license, you may choose any version ever published by
  123. * the ITU-T.
  124. *
  125. * 9. If you wish to incorporate parts of the Module into other free
  126. * modules whose distribution conditions are different, write to the
  127. * author to ask for permission. For software which is copyrighted by
  128. * the ITU-T, write to the ITU-T Secretariat; exceptions may be made
  129. * for this. This decision will be guided by the two goals of
  130. * preserving the free status of all derivatives of this free software
  131. * and of promoting the sharing and reuse of software generally.
  132. *
  133. *
  134. * NO WARRANTY
  135. *
  136. * 10. BECAUSE THE MODULE IS LICENSED FREE OF CHARGE, THERE IS NO
  137. * WARRANTY FOR THE MODULE, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
  138. * EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
  139. * AND/OR OTHER PARTIES PROVIDE THE MODULE "AS IS" WITHOUT WARRANTY OF
  140. * ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED
  141. * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  142. * PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
  143. * PERFORMANCE OF THE MODULE IS WITH YOU. SHOULD THE MODULE PROVE
  144. * DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
  145. * OR CORRECTION.
  146. *
  147. * 11. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
  148. * WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
  149. * MODIFY AND/OR REDISTRIBUTE THE MODULE AS PERMITTED ABOVE, BE LIABLE
  150. * TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
  151. * CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
  152. * THE MODULE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
  153. * RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR
  154. * A FAILURE OF THE MODULE TO OPERATE WITH ANY OTHER MODULES), EVEN IF
  155. * SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
  156. * SUCH DAMAGES.
  157. *
  158. * END OF TERMS AND CONDITIONS
  159. ***************************************************************************/
  160. #ifndef _G726_H_
  161. #define _G726_H_
  162. /********************************
  163. * This defines the size of the
  164. * G.726A encoder state structure
  165. * in bytes.
  166. ********************************/
  167. #define G726A_ENCODER_SIZE 76
  168. /*********************************
  169. * This defines the size of the
  170. * G.726A decoder state structure
  171. * in bytes.
  172. *********************************/
  173. #define G726A_DECODER_SIZE 76
  174. //***************************************************************
  175. /* G726A_BIT_RATES
  176. Summary:
  177. Identifies the supported G.726A encoder and decoder
  178. bit rates.
  179. Description:
  180. This enumeration identifies the supported G.726A encoder
  181. and decoder bit rates. The bit rates for the encoder and
  182. decoder are specified at the time of encoder and decoder
  183. intialization.
  184. */
  185. typedef enum
  186. {
  187. // G.726A Encoder/Decoder work at 16kbps.
  188. // 2 LSBs of encoded byte are significant
  189. // Compression ratio 7:1
  190. G726A_16KBPS=2,
  191. // G.726A Encoder/Decoder work at 24kbps.
  192. // 3 LSBs of encoded byte are significant
  193. // Compression ratio 4.6:1
  194. G726A_24KBPS=3,
  195. // G.726A Encoder/Decoder work at 32kbps.
  196. // 4 LSBs of encoded byte are significant
  197. // Compression ratio 3.5:1
  198. G726A_32KBPS=4,
  199. // G.726A Encoder/Decoder work at 40kbps.
  200. // 5 LSBs of encoded byte are significant
  201. // Compression ratio 2.8:1
  202. G726A_40KBPS=5
  203. }G726A_BIT_RATES;
  204. //******************************************************************
  205. /********************************
  206. * This defines the size of G.726A
  207. * encoder input frame size in samples
  208. * and is user definable. Minimum
  209. * size is 1.
  210. *********************************/
  211. #define G726A_FRAME_SIZE 256
  212. //-----------------------------------------------------------------------------
  213. //FUNCTION PROTOTYPES
  214. //-----------------------------------------------------------------------------
  215. /*******************************************************************************
  216. Function:
  217. void G726AEncoderInit(unsigned char * encoder,G726A_BIT_RATES rate,
  218. int frameSize);
  219. Summary:
  220. This routine allows intializes a G.726A encoder to operate at the specified
  221. output bit rate and input frame size.
  222. Description:
  223. This routine intializes a G.726A encoder to operate at the specified
  224. output bit rate and input frame size. Multiple encoders can instantiated,
  225. each encoder operating at its own bit rate and it own input frame size.
  226. Precondition:
  227. The encoder state memory for each decoder should have been allocated.
  228. Parameters:
  229. encoder - Encoder state memory.
  230. rate - Specifies the bit rate at which the encoder will operate.
  231. frameSize - Specifies the encoder input frame size in samples.
  232. Returns:
  233. None.
  234. Example:
  235. <code>
  236. // This code snippet shows how to initialize two G.726A
  237. // encoders, one to operate at 16kbps and and the
  238. // other to work at 24kbps. Note the state
  239. // memory sizes for both encoders is the same. The
  240. // input frame size for each encoder can be different.
  241. unsigned char encoder16kbps[G726A_ENCODER_SIZE];
  242. unsigned char encoder24kbps[G726A_ENCODER_SIZE];
  243. G726AEncoderInit(encoder16kbps, G726A_16KBPS, G726A_FRAME_SIZE);
  244. G726AEncoderInit(encoder24kbps, G726A_24KBPS, G726A_FRAME_SIZE);
  245. </code>
  246. Remarks:
  247. None.
  248. *****************************************************************************/
  249. void G726AEncoderInit(unsigned char * encoder,G726A_BIT_RATES rate, int frameSize);
  250. /*******************************************************************************
  251. Function:
  252. void G726ADecoderInit(unsigned char * decoder,G726A_BIT_RATES rate,
  253. int frameSize);
  254. Summary:
  255. This routine intializes a G.726A decoder to operate at the specified output
  256. bit rate and input frame size.
  257. Description:
  258. This routine intializes a G.726A decoder to operate at the specified
  259. output bit rate and input frame size. Multiple decoders can instantiated,
  260. each decoder operating at its own bit rate and it own input frame size.
  261. Precondition:
  262. The decoder state memory for each decoder should have been allocated.
  263. Parameters:
  264. decoder - Decoder state memory.
  265. rate - Specifies the bit rate at which the decoder will operate.
  266. frameSize - Specifies the decoder input frame size in samples.
  267. Returns:
  268. None.
  269. Example:
  270. <code>
  271. // This code snippet shows how to initialize two G.726A
  272. // decoders, one to operate at 16kbps and and the
  273. // other to work at 24kbps. Note the state
  274. // memory sizes for both decoders is the same. The
  275. // input frame size for each decoder can be different.
  276. unsigned char decoder16kbps[G726A_DECODER_SIZE];
  277. unsigned char decoder24kbps[G726A_DECODER_SIZE];
  278. G726ADecoderInit(decoder16kbps, G726A_16KBPS, G726A_FRAME_SIZE);
  279. G726ADecoderInit(decoder24kbps, G726A_24KBPS, G726A_FRAME_SIZE);
  280. </code>
  281. Remarks:
  282. None.
  283. *****************************************************************************/
  284. void G726ADecoderInit(unsigned char * decoder,G726A_BIT_RATES rate, int frameSize);
  285. /*******************************************************************************
  286. Function:
  287. void G726AEncode(unsigned char * encoder, int * inputFrame,
  288. unsigned char * outputFrame);
  289. Summary:
  290. This routine encodes one input frame.
  291. Description:
  292. This routine encodes one input frame. The size of the frame and the bit rate
  293. to be used should have been defined during encoder initialization. Irrespective
  294. of the bit rate used, each output sample requires one byte. Therefore, the
  295. output array should be an unsigned char array of the same size as the input array.
  296. Note that the input to the encode function should be a 14 bit signed integer as
  297. specified by the ITU-T G.726A specification.
  298. Precondition:
  299. The encoder state memory should have been intialized.
  300. Parameters:
  301. encoder - Encoder state memory.
  302. inputFrame - Input array containing samples to be encoded. The samples
  303. should be 14 bit signed integer values. The size of the
  304. array should match the encoder frame size specified during
  305. encoder initialization.
  306. outputFrame - Output array where the encoded samples will be stored. Each
  307. byte of output array will store one encoded sample. Depending
  308. on the selected encoder bit rate, only certain number of LSBs
  309. in the output sample byte will be significant. Refer to the
  310. G726A_BIT_RATES type for details.
  311. Returns:
  312. None.
  313. Example:
  314. <code>
  315. // This code snippet demonstartes how to use the
  316. // G.726A encoder. The encoder is first initialized
  317. // and then the encode function is used to encode
  318. // the input. Note the input and output array size
  319. // and types. The input should be right shifted by
  320. // 2 bits for 16 bit values. This will make the input
  321. // 14 bit as required by the encoder.
  322. unsigned char encoder16kbps[G726A_ENCODER_SIZE];
  323. int input[G726A_FRAME_SIZE];
  324. unsigned char output[G726A_FRAME_SIZE];
  325. int i;
  326. G726AEncoderInit(encoder16kbps, G726A_16KBPS, G726A_FRAME_SIZE);
  327. for(i = 0; i < G726A_FRAME_SIZE; i ++)
  328. {
  329. // Not necessary if its known that input
  330. // is 14 bits or less.
  331. input[i] = input[i] >> 2;
  332. }
  333. G726AEncode(encoder16kbps, input, output);
  334. </code>
  335. Remarks:
  336. None.
  337. *****************************************************************************/
  338. void G726AEncode(unsigned char * encoder, int * inputFrame, unsigned char * outputFrame);
  339. /*******************************************************************************
  340. Function:
  341. void G726ADecode(unsigned char * decoder, unsigned char * inputFrame,
  342. int * outputFrame);
  343. Summary:
  344. This routine decodes one input frame.
  345. Description:
  346. This routine decodes one input frame. The size of the frame and the bit rate
  347. to be used should have been defined during decoder initialization. The
  348. input array should be an unsigned char array of the same size as the output array.
  349. Note that the output of the decode function will be a 14 bit signed integer as
  350. specified by the ITU-T G.726A specification.
  351. Precondition:
  352. The decoder state memory should have been intialized.
  353. Parameters:
  354. decoder - Decoder state memory.
  355. inputFrame - Input array containing samples to be decoded. The samples
  356. should have been encoded using the same bit rate as decoder
  357. bit rate. The encoded samples should be arranged such that
  358. one element of the array holds one encoded sample.
  359. outputFrame - Output array where the decoded samples will be stored. The
  360. decoded value is a 14 bit signed integer value.
  361. Returns:
  362. None.
  363. Example:
  364. <code>
  365. // This code snippet demonstrates how to use the
  366. // G.726A decoder. The decoder is first initialized
  367. // and then the decode function is used to decode
  368. // the input. Note the input and output array
  369. // size and types. The output array can be left
  370. // shifted by 2 bits to scale up the 14 bit output
  371. // value to 16 bit.
  372. unsigned char decoder16kbps[G726A_DECODER_SIZE];
  373. int output[G726A_FRAME_SIZE];
  374. unsigned char input[G726A_FRAME_SIZE];
  375. G726ADecoderInit(decoder16kbps, G726A_16KBPS, G726A_FRAME_SIZE);
  376. G726ADecode(decoder16kbps, input, output);
  377. for(i = 0; i < G726A_FRAME_SIZE; i ++)
  378. {
  379. // Not necessary if the input to encoder
  380. // which generated the encoded samples
  381. // where not right shifted.
  382. output[i] = output[i] << 2;
  383. }
  384. </code>
  385. Remarks:
  386. None.
  387. *****************************************************************************/
  388. void G726ADecode(unsigned char * decoder, unsigned char * inputFrame, int * outputFrame);
  389. #endif /* _G726_H_ */
  390. /* .......................... End of G726a.H ........................... */