source: roaraudio/libroardsp/transcode_mualaw.c @ 2181:05f340c5ea82

Last change on this file since 2181:05f340c5ea82 was 2181:05f340c5ea82, checked in by phi, 15 years ago

wrote encoder/decoder functions

File size: 2.5 KB
Line 
1//transcode_mualaw.c:
2
3/*
4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2009
5 *
6 *  This file is part of libroardsp a part of RoarAudio,
7 *  a cross-platform sound system for both, home and professional use.
8 *  See README for details.
9 *
10 *  This file is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License version 3
12 *  as published by the Free Software Foundation.
13 *
14 *  libroardsp is distributed in the hope that it will be useful,
15 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *  GNU General Public License for more details.
18 *
19 *  You should have received a copy of the GNU General Public License
20 *  along with this software; see the file COPYING.  If not, write to
21 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
22 *
23 */
24
25#include "libroardsp.h"
26
27#define _CHECK() if ( state == NULL || state->info.pcm.bits != 16 || buf == NULL ) return -1
28
29#define _CHECK_BUF(len) \
30                        void * iobuf; \
31                        size_t outbyte = (len)/2; \
32                        _CHECK();     \
33                        if ( (len) & 0x01 ) return -1; \
34                        if ( provide_buffer(&iobuf, outbyte) == -1 ) \
35                         return -1;
36
37#define _SEND_RETURN()  if ( roar_vio_write(state->backend, iobuf, outbyte) != outbyte ) \
38                         return -1; \
39                        return 0;
40
41#define _READ()         if ( roar_vio_read(state->backend, iobuf, outbyte) != outbyte ) \
42                         return -1;
43
44static int provide_buffer(void ** buf, size_t len) {
45 static struct roar_buffer * bufbuf = NULL;
46 return -1;
47}
48
49int roar_xcoder_alaw_encode(struct roar_xcoder * state, void * buf, size_t len) {
50 _CHECK_BUF(len);
51
52 if ( roardsp_conv_pcm162alaw(iobuf, buf, outbyte) == -1 )
53  return -1;
54
55 _SEND_RETURN();
56}
57
58int roar_xcoder_alaw_decode(struct roar_xcoder * state, void * buf, size_t len) {
59 _CHECK_BUF(len);
60
61 _READ();
62
63 if ( roardsp_conv_alaw2pcm16(buf, iobuf, outbyte) == -1 )
64  return -1;
65
66 return 0;
67}
68
69int roar_xcoder_mulaw_encode(struct roar_xcoder * state, void * buf, size_t len) {
70 _CHECK_BUF(len);
71
72 if ( roardsp_conv_pcm162mulaw(iobuf, buf, outbyte) == -1 )
73  return -1;
74
75 _SEND_RETURN();
76}
77
78int roar_xcoder_mulaw_decode(struct roar_xcoder * state, void * buf, size_t len) {
79 _CHECK_BUF(len);
80
81 _READ();
82
83 if ( roardsp_conv_mulaw2pcm16(buf, iobuf, outbyte) == -1 )
84  return -1;
85
86 return 0;
87}
88
89//ll
Note: See TracBrowser for help on using the repository browser.