spandsp
0.0.6
|
00001 /* 00002 * SpanDSP - a series of DSP components for telephony 00003 * 00004 * oki_adpcm.h - Conversion routines between linear 16 bit PCM data and 00005 * OKI (Dialogic) ADPCM format. 00006 * 00007 * Written by Steve Underwood <steveu@coppice.org> 00008 * 00009 * Copyright (C) 2001 Steve Underwood 00010 * 00011 * All rights reserved. 00012 * 00013 * This program is free software; you can redistribute it and/or modify 00014 * it under the terms of the GNU Lesser General Public License version 2.1, 00015 * as published by the Free Software Foundation. 00016 * 00017 * This program is distributed in the hope that it will be useful, 00018 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00020 * GNU Lesser General Public License for more details. 00021 * 00022 * You should have received a copy of the GNU Lesser General Public 00023 * License along with this program; if not, write to the Free Software 00024 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00025 */ 00026 00027 /*! \file */ 00028 00029 #if !defined(_SPANDSP_OKI_ADPCM_H_) 00030 #define _SPANDSP_OKI_ADPCM_H_ 00031 00032 /*! \page okiadpcm_page OKI (Dialogic) ADPCM encoding and decoding 00033 \section okiadpcm_page_sec_1 What does it do? 00034 OKI ADPCM is widely used in the CTI industry because it is the principal format 00035 supported by Dialogic. As the market leader, they tend to define "common 00036 practice". It offers a good balance of simplicity and quality at rates of 00037 24kbps or 32kbps. 32kbps is obtained by ADPCM compressing 8k samples/second linear 00038 PCM. 24kbps is obtained by resampling to 6k samples/second and using the same ADPCM 00039 compression algorithm on the slower samples. 00040 00041 The algorithms for this ADPCM codec can be found in "PC Telephony - The complete guide 00042 to designing, building and programming systems using Dialogic and Related Hardware" 00043 by Bob Edgar. pg 272-276. */ 00044 00045 /*! 00046 Oki (Dialogic) ADPCM conversion state descriptor. This defines the state of 00047 a single working instance of the Oki ADPCM converter. This is used for 00048 either linear to ADPCM or ADPCM to linear conversion. 00049 */ 00050 typedef struct oki_adpcm_state_s oki_adpcm_state_t; 00051 00052 #if defined(__cplusplus) 00053 extern "C" 00054 { 00055 #endif 00056 00057 /*! Initialise an Oki ADPCM encode or decode context. 00058 \param s The Oki ADPCM context. 00059 \param bit_rate The required bit rate for the ADPCM data. 00060 The valid rates are 24000 and 32000. 00061 \return A pointer to the Oki ADPCM context, or NULL for error. */ 00062 SPAN_DECLARE(oki_adpcm_state_t *) oki_adpcm_init(oki_adpcm_state_t *s, 00063 int bit_rate); 00064 00065 /*! Release an Oki ADPCM encode or decode context. 00066 \param s The Oki ADPCM context. 00067 \return 0 for OK. */ 00068 SPAN_DECLARE(int) oki_adpcm_release(oki_adpcm_state_t *s); 00069 00070 /*! Free an Oki ADPCM encode or decode context. 00071 \param s The Oki ADPCM context. 00072 \return 0 for OK. */ 00073 SPAN_DECLARE(int) oki_adpcm_free(oki_adpcm_state_t *s); 00074 00075 /*! Decode a buffer of Oki ADPCM data to linear PCM. 00076 \param s The Oki ADPCM context. 00077 \param amp The audio sample buffer. 00078 \param oki_data 00079 \param oki_bytes 00080 \return The number of samples returned. */ 00081 SPAN_DECLARE(int) oki_adpcm_decode(oki_adpcm_state_t *s, 00082 int16_t amp[], 00083 const uint8_t oki_data[], 00084 int oki_bytes); 00085 00086 /*! Encode a buffer of linear PCM data to Oki ADPCM. 00087 \param s The Oki ADPCM context. 00088 \param oki_data The Oki ADPCM data produced 00089 \param amp The audio sample buffer. 00090 \param len The number of samples in the buffer. 00091 \return The number of bytes of Oki ADPCM data produced. */ 00092 SPAN_DECLARE(int) oki_adpcm_encode(oki_adpcm_state_t *s, 00093 uint8_t oki_data[], 00094 const int16_t amp[], 00095 int len); 00096 00097 #if defined(__cplusplus) 00098 } 00099 #endif 00100 00101 #endif 00102 /*- End of file ------------------------------------------------------------*/