Changeset 611:eb4c2b27dd1b in roaraudio


Ignore:
Timestamp:
08/19/08 21:58:06 (16 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

got RoarCELT codec filter rw!

Location:
roard
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • roard/codecfilter.c

    r582 r611  
    2424#ifdef ROAR_HAVE_LIBCELT 
    2525 {ROAR_CODEC_ROAR_CELT, "RoarCELT", "RoarAudio CELT", NULL, 
    26   cf_celt_open, cf_celt_close, NULL, NULL, cf_celt_read, NULL}, 
     26  cf_celt_open, cf_celt_close, NULL, cf_celt_write, cf_celt_read, NULL}, 
    2727#endif 
    2828 
  • roard/codecfilter_celt.c

    r609 r611  
    171171} 
    172172 
     173#define BS (ROAR_STREAM(self->stream)->info.channels * 64) 
    173174int cf_celt_write(CODECFILTER_USERDATA_T   inst, char * buf, int len) { 
    174175 struct codecfilter_celt_inst * self = (struct codecfilter_celt_inst *) inst; 
    175  
    176  return 0; 
     176 int have = 0; 
     177 int org_len = len; 
     178 int diff; 
     179 int fs2 = self->frame_size * 2 * ROAR_STREAM(self->stream)->info.channels; 
     180 uint16_t pkglen_net, pkglen; 
     181 unsigned char cbits[BS+2]; 
     182 
     183 if ( (self->fo_rest + len) > fs2 ) { 
     184  if ( self->fo_rest ) { 
     185   memcpy(self->obuf, self->o_rest, self->fo_rest); 
     186   have = self->fo_rest; 
     187   self->fo_rest = 0; 
     188  } 
     189 
     190  memcpy(self->obuf+have, buf, (diff=fs2-have)); 
     191  buf += diff; 
     192  len -= diff; 
     193 
     194  pkglen     = celt_encode(self->encoder, (celt_int16_t *) self->obuf, cbits+2, BS); 
     195  pkglen_net = ROAR_HOST2NET16(pkglen); 
     196  *(uint16_t*)cbits = pkglen_net; 
     197 
     198  if ( stream_vio_s_write(self->stream, cbits, pkglen+2) == -1 ) 
     199   return -1; 
     200 
     201  while (len >= fs2) { 
     202   pkglen     = celt_encode(self->encoder, (celt_int16_t *) buf, cbits+2, BS); 
     203   pkglen_net = ROAR_HOST2NET16(pkglen); 
     204   *(uint16_t*)cbits = pkglen_net; 
     205 
     206   if ( stream_vio_s_write(self->stream, cbits, pkglen+2) == -1 ) 
     207    return -1; 
     208   len -= fs2; 
     209   buf += fs2; 
     210  } 
     211 } 
     212 
     213 if ( len ) { 
     214  memcpy(self->o_rest + self->fo_rest, buf, len); 
     215  self->fo_rest += len; 
     216  len            = 0; 
     217 }  
     218 
     219 return org_len; 
    177220} 
    178221 
Note: See TracChangeset for help on using the changeset viewer.