source: roaraudio/roard/codecfilter_wave.c @ 559:87c4f08f2204

Last change on this file since 559:87c4f08f2204 was 559:87c4f08f2204, checked in by phi, 16 years ago

added codecfilter_wave.c

File size: 1.9 KB
Line 
1//codecfilter_wave.c:
2
3#include "roard.h"
4
5struct codecfilter_wave_inst {
6 struct roar_stream_server * stream;
7 int opened;
8};
9
10int cf_wave_open(CODECFILTER_USERDATA_T * inst, int codec,
11                                            struct roar_stream_server * info,
12                                            struct roar_codecfilter   * filter) {
13 struct codecfilter_wave_inst * self = malloc(sizeof(struct codecfilter_wave_inst));
14 struct roar_stream * s = (struct roar_stream *) info;
15
16 if ( !self )
17  return -1;
18
19 self->stream               = info;
20 self->opened               = 0;
21
22/*
23 if ( s->dir == ROAR_DIR_PLAY ) {
24   self->decoder = celt_decoder_create(self->mode);
25 } else if ( s->dir == ROAR_DIR_MONITOR ) {
26   self->encoder = celt_encoder_create(self->mode);
27 } else {
28  celt_mode_destroy(self->mode);
29  free(self);
30  return -1;
31 }
32*/
33
34 *inst = (CODECFILTER_USERDATA_T) self;
35
36 memcpy(&(s->info), g_sa, sizeof(struct roar_audio_info));
37 return 0;
38}
39
40int cf_wave_close(CODECFILTER_USERDATA_T   inst) {
41 struct codecfilter_wave_inst * self = (struct codecfilter_wave_inst *) inst;
42
43 if ( !inst )
44  return -1;
45
46 free(inst);
47 return 0;
48}
49
50int cf_wave_read(CODECFILTER_USERDATA_T   inst, char * buf, int len) {
51 struct codecfilter_wave_inst * self = (struct codecfilter_wave_inst *) inst;
52 int fh = ((struct roar_stream *)self->stream)->fh;
53 int r = -1;
54 char buf[44];
55 struct roar_stream * s = ROAR_STREAM(self->stream);
56
57 if ( self->opened ) {
58  return read(fh, buf, len);
59 } else {
60  if (read(fh, buf, 44) != 44) {
61   close(fh);
62   return -1;
63  }
64
65  memcpy(&(s->info.rate    ), buf+24, 4);
66  memcpy(&(s->info.channels), buf+22, 2);
67  memcpy(&(s->info.bits    ), buf+34, 2);
68
69  errno = EAGAIN;
70  return -1;
71 }
72
73 return r;
74}
75
76int cf_wave_write(CODECFILTER_USERDATA_T   inst, char * buf, int len) {
77 struct codecfilter_wave_inst * self = (struct codecfilter_wave_inst *) inst;
78
79 return 0;
80}
81
82//ll
Note: See TracBrowser for help on using the repository browser.