Changeset 1012:e0923fe24fa9 in roaraudio for roard/codecfilter_wave.c


Ignore:
Timestamp:
12/20/08 22:48:23 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added support for writeing wave files, ha!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/codecfilter_wave.c

    r668 r1012  
    8383int cf_wave_write(CODECFILTER_USERDATA_T   inst, char * buf, int len) { 
    8484 struct codecfilter_wave_inst * self = (struct codecfilter_wave_inst *) inst; 
     85 struct roar_stream           * s    = ROAR_STREAM(self->stream); 
     86 char header[44]; 
     87 int32_t  tmp32; 
     88 int16_t  tmp16; 
     89 int16_t  bits; 
     90 int16_t  codec; 
    8591 
    86  return 0; 
     92 ROAR_WARN("cf_wave_write(inst=%p, buf=%p, len=%i) = ?", inst, buf, len); 
     93 ROAR_WARN("cf_wave_write(inst=%p, buf=%p, len=%i): self->opened=%i", inst, buf, len, self->opened); 
     94 
     95 if ( self->opened ) { 
     96  return stream_vio_s_write(self->stream, buf, len); 
     97 } else { 
     98 
     99  if ( s->fh == -1 ) { 
     100   errno = EAGAIN; 
     101   return -1; 
     102  } 
     103 
     104  memcpy(header   , "RIFF\367\377\377\177WAVEfmt \020", 17); 
     105  memcpy(header+36, "data\313\377\377\177", 8); 
     106 
     107  switch (s->info.codec) { 
     108   case ROAR_CODEC_PCM_S_LE: 
     109     codec = 0x0001; 
     110    break; 
     111   default: 
     112     ROAR_ERR("cf_wave_write(*) Codec not supported!"); 
     113     return -1; 
     114    break; 
     115  } 
     116 
     117  ROAR_WARN("cf_wave_write(*) Codec supported!"); 
     118 
     119  bits = s->info.bits; 
     120  memcpy(header+24, &(s->info.rate    ), 4); 
     121  memcpy(header+22, &(s->info.channels), 2); 
     122  memcpy(header+34, &bits, 2); 
     123 
     124  tmp16 = s->info.channels * bits / 8; 
     125  memcpy(header+32, &tmp16, 2); 
     126  tmp32 = tmp16 * s->info.rate; 
     127  memcpy(header+28, &tmp32, 4); 
     128  memcpy(header+20, &codec, 2); 
     129 
     130  if ( stream_vio_s_write(self->stream, header, 44) != 44 ) 
     131   return -1; 
     132 
     133  self->opened = 1; 
     134 
     135  errno = EAGAIN; 
     136//  return -1; 
     137 
     138  len = stream_vio_s_write(self->stream, buf, len); 
     139 
     140  cf_wave_close(inst); 
     141  ROAR_STREAM_SERVER(s)->codecfilter = -1; 
     142 
     143  return len; 
     144 
     145//  return stream_vio_s_write(self->stream, buf, len); 
     146 } 
     147 
     148 return -1; 
    87149} 
    88150 
Note: See TracChangeset for help on using the changeset viewer.