oki_adpcm.h

Go to the documentation of this file.
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 ------------------------------------------------------------*/

Generated on 9 Jul 2012 for spandsp by  doxygen 1.6.1