source: roaraudio/libroardsp/transcode_celt.c @ 2193:78e5b51e6117

Last change on this file since 2193:78e5b51e6117 was 2193:78e5b51e6117, checked in by phi, 15 years ago

corrected magic writing code

File size: 3.0 KB
Line 
1//transcode_celt.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#ifdef ROAR_HAVE_LIBCELT
28
29#define _16BIT (16/8)
30
31int roar_xcoder_celt_init       (struct roar_xcoder * state) {
32 struct roar_xcoder_celt * self = malloc(sizeof(struct roar_xcoder_celt));
33 struct roar_audio_info  * info = &(state->info.pcm);
34
35 if ( self == NULL )
36  return -1;
37
38 // curruntly only 16 bit mode is supported
39 if ( info->bits != 16 ) {
40  free(self);
41  return -1;
42 }
43
44 memset(self, 0, sizeof(struct roar_xcoder_celt));
45
46 state->inst = self;
47
48 self->frame_size           = 256;
49
50 self->mode                 = celt_mode_create(info->rate, info->channels, self->frame_size, NULL);
51
52 if ( self->mode == NULL ) {
53  free(self);
54  return -1;
55 }
56
57 if (state->encode) {
58  self->encoder = celt_encoder_create(self->mode);
59  if ( self->encoder == NULL ) {
60   roar_xcoder_celt_uninit(state);
61   return -1;
62  }
63 } else {
64  self->decoder = celt_decoder_create(self->mode);
65  if ( self->decoder == NULL ) {
66   roar_xcoder_celt_uninit(state);
67   return -1;
68  }
69 }
70
71 return 0;
72}
73
74int roar_xcoder_celt_uninit     (struct roar_xcoder * state) {
75 struct roar_xcoder_celt * self = state->inst;
76
77 if ( self->encoder )
78 celt_encoder_destroy(self->encoder);
79
80 if ( self->decoder )
81 celt_decoder_destroy(self->decoder);
82
83 if ( self->mode )
84  celt_mode_destroy(self->mode);
85
86 free(self);
87
88 return -1;
89}
90
91int roar_xcoder_celt_packet_size(struct roar_xcoder * state, int samples) {
92 struct roar_xcoder_celt * self = state->inst;
93
94 return self->frame_size;
95}
96
97int roar_xcoder_celt_encode     (struct roar_xcoder * state, void * buf, size_t len) {
98 struct roar_xcoder_celt * self = state->inst;
99
100 if (!state->encode)
101  return -1;
102
103 if ( len != self->frame_size * _16BIT * state->info.pcm.channels )
104  return -1;
105
106 if ( state->stage == ROAR_XCODER_STAGE_INITED ) {
107  if ( roar_vio_write(state->backend, ROAR_CELT_MAGIC, ROAR_CELT_MAGIC_LEN) != ROAR_CELT_MAGIC_LEN )
108   return -1;
109  state->stage = ROAR_XCODER_STAGE_MAGIC;
110 }
111
112 return -1;
113}
114
115int roar_xcoder_celt_decode     (struct roar_xcoder * state, void * buf, size_t len) {
116 struct roar_xcoder_celt * self = state->inst;
117
118 if (state->encode)
119  return -1;
120
121 return -1;
122}
123
124#endif
125
126//ll
Note: See TracBrowser for help on using the repository browser.