Changeset 2300:a1f45451cd78 in roaraudio


Ignore:
Timestamp:
08/05/09 05:26:01 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

wrote decoder part

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroardsp/transcode_speex.c

    r2299 r2300  
    9494int roar_xcoder_speex_packet_size(struct roar_xcoder * state, int samples) { 
    9595 struct roar_xcoder_speex * self = state->inst; 
    96  if (!state->encode) { 
    97   return -1; 
    98  } 
     96 
     97 if (!state->encode) 
     98  if (state->stage != ROAR_XCODER_STAGE_OPENED) 
     99   return -1; 
    99100 
    100101 return _16BIT * self->frame_size; 
     
    144145 
    145146int roar_xcoder_speex_decode     (struct roar_xcoder * state, void * buf, size_t len) { 
    146  return -1; 
     147 struct roar_xcoder_speex * self = state->inst; 
     148 char magic[ROAR_SPEEX_MAGIC_LEN]; 
     149 uint16_t tmp_net; 
     150 int pkg_len; 
     151 int tmp; 
     152 
     153 if ( state->stage == ROAR_XCODER_STAGE_INITED ) { 
     154  if ( roar_vio_read(state->backend, magic, ROAR_SPEEX_MAGIC_LEN) != ROAR_SPEEX_MAGIC_LEN ) 
     155   return -1; 
     156 
     157  if ( memcmp(magic, ROAR_SPEEX_MAGIC, ROAR_SPEEX_MAGIC_LEN) != 0 ) 
     158   return -1; 
     159 
     160  state->stage = ROAR_XCODER_STAGE_MAGIC; 
     161 
     162  if ( roar_vio_read(state->backend, &tmp_net, 2) != 2 ) 
     163   return -1; 
     164 
     165  self->mode = ROAR_NET2HOST16(tmp_net); 
     166 
     167  state->stage = ROAR_XCODER_STAGE_OPENING; 
     168 
     169  switch (self->mode) { 
     170   case ROAR_SPEEX_MODE_NB:  self->xcoder = speex_decoder_init(&speex_nb_mode);  break; 
     171   case ROAR_SPEEX_MODE_WB:  self->xcoder = speex_decoder_init(&speex_wb_mode);  break; 
     172   case ROAR_SPEEX_MODE_UWB: self->xcoder = speex_decoder_init(&speex_uwb_mode); break; 
     173   default: 
     174     return -1; 
     175    break; 
     176  } 
     177 
     178  tmp=1; 
     179  speex_decoder_ctl(self->xcoder, SPEEX_SET_ENH, &tmp); 
     180  speex_decoder_ctl(self->xcoder, SPEEX_GET_FRAME_SIZE, &(self->frame_size)); 
     181 
     182  state->stage = ROAR_XCODER_STAGE_OPENED; 
     183 } 
     184 
     185 if ( roar_vio_read(state->backend, &tmp_net, 2) != 2 ) 
     186  return -1; 
     187 
     188 pkg_len = ROAR_NET2HOST16(tmp_net); 
     189 
     190 if ( pkg_len > ROAR_SPEEX_MAX_CC ) 
     191  return -1; 
     192 
     193 if ( roar_vio_read(state->backend, self->cc, pkg_len) != pkg_len ) 
     194  return -1; 
     195 
     196 speex_bits_read_from(&(self->bits), self->cc, pkg_len); 
     197 
     198 speex_decode_int(self->xcoder, &(self->bits), buf); 
     199 
     200 return 0; 
    147201} 
    148202 
Note: See TracChangeset for help on using the changeset viewer.