source: roaraudio/libroardsp/transcode_mualaw.c @ 2186:f7714457be02

Last change on this file since 2186:f7714457be02 was 2186:f7714457be02, checked in by phi, 15 years ago

added debug lions, wrote code for provide_buffer()

File size: 3.0 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 size_t buflen;
47
48 if ( bufbuf != NULL ) {
49  if ( roar_buffer_get_len(bufbuf, &buflen) == -1 )
50   return -1;
51
52  if ( buflen >= len ) {
53   if ( roar_buffer_get_data(bufbuf, buf) == -1 )
54    return -1;
55
56   return 0;
57  } else {
58   if ( roar_buffer_free(bufbuf) == -1 )
59    return -1;
60  }
61 }
62
63 if ( roar_buffer_new(&bufbuf, len) == -1 )
64  return -1;
65
66 if ( roar_buffer_get_data(bufbuf, buf) == -1 )
67  return -1;
68
69 return 0;
70}
71
72int roar_xcoder_alaw_encode(struct roar_xcoder * state, void * buf, size_t len) {
73 _CHECK_BUF(len);
74
75 if ( roardsp_conv_pcm162alaw(iobuf, buf, outbyte) == -1 )
76  return -1;
77
78 _SEND_RETURN();
79}
80
81int roar_xcoder_alaw_decode(struct roar_xcoder * state, void * buf, size_t len) {
82 _CHECK_BUF(len);
83
84 _READ();
85
86 ROAR_DBG("roar_xcoder_alaw_decode(*): Start decoding..");
87
88 if ( roardsp_conv_alaw2pcm16(buf, iobuf, outbyte) == -1 )
89  return -1;
90
91 ROAR_DBG("roar_xcoder_alaw_decode(*): Decoding sucessful");
92 return 0;
93}
94
95int roar_xcoder_mulaw_encode(struct roar_xcoder * state, void * buf, size_t len) {
96 _CHECK_BUF(len);
97
98 if ( roardsp_conv_pcm162mulaw(iobuf, buf, outbyte) == -1 )
99  return -1;
100
101 _SEND_RETURN();
102}
103
104int roar_xcoder_mulaw_decode(struct roar_xcoder * state, void * buf, size_t len) {
105 _CHECK_BUF(len);
106
107 _READ();
108
109 if ( roardsp_conv_mulaw2pcm16(buf, iobuf, outbyte) == -1 )
110  return -1;
111
112 return 0;
113}
114
115//ll
Note: See TracBrowser for help on using the repository browser.