Changeset 611:eb4c2b27dd1b in roaraudio
- Timestamp:
- 08/19/08 21:58:06 (16 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- roard
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/codecfilter.c
r582 r611 24 24 #ifdef ROAR_HAVE_LIBCELT 25 25 {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}, 27 27 #endif 28 28 -
roard/codecfilter_celt.c
r609 r611 171 171 } 172 172 173 #define BS (ROAR_STREAM(self->stream)->info.channels * 64) 173 174 int cf_celt_write(CODECFILTER_USERDATA_T inst, char * buf, int len) { 174 175 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; 177 220 } 178 221
Note: See TracChangeset
for help on using the changeset viewer.