Changeset 2305:d0b7c9a6b499 in roaraudio


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

added support for stereo Speex

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroardsp/transcode_speex.c

    r2302 r2305  
    4444 } 
    4545 
    46  // curruntly only mono mode is supported 
    47  if ( info->channels != 1 ) { 
    48   free(self); 
    49   return -1; 
     46 // only mono/stereo mode is supported 
     47 switch (info->channels) { 
     48  case 1: self->stereo = 0; break; 
     49  case 2: self->stereo = 1; break; 
     50  default: 
     51    free(self); 
     52    return -1; 
    5053 } 
    5154 
     
    101104   return -1; 
    102105 
    103  return _16BIT * self->frame_size; 
     106 return _16BIT * self->frame_size * (self->stereo ? 2 : 1); 
    104107} 
    105108 
     
    131134 speex_bits_reset(&(self->bits)); 
    132135 
     136 if ( self->stereo ) 
     137  speex_encode_stereo_int((spx_int16_t *) buf, self->frame_size, &(self->bits)); 
     138 
    133139 speex_encode_int(self->xcoder, (spx_int16_t *) buf, &(self->bits)); 
    134140 
     
    146152} 
    147153 
     154// TODO: move all the init thingys into a seperate function 
    148155int roar_xcoder_speex_decode     (struct roar_xcoder * state, void * buf, size_t len) { 
    149156 struct roar_xcoder_speex * self = state->inst; 
     
    152159 int pkg_len; 
    153160 int tmp; 
     161 SpeexStereoState stereo = SPEEX_STEREO_STATE_INIT; 
     162 SpeexCallback callback; 
    154163 
    155164 if ( state->stage == ROAR_XCODER_STAGE_INITED ) { 
     
    184193  speex_decoder_ctl(self->xcoder, SPEEX_GET_FRAME_SIZE, &(self->frame_size)); 
    185194 
     195  if ( self->stereo ) { 
     196   memcpy(&(self->stereo_state), &stereo, sizeof(self->stereo_state)); 
     197 
     198   callback.callback_id = SPEEX_INBAND_STEREO; 
     199   callback.func = speex_std_stereo_request_handler; 
     200   callback.data = &(self->stereo_state); 
     201 
     202   speex_decoder_ctl(self->xcoder, SPEEX_SET_HANDLER, &callback); 
     203  } 
     204 
    186205  state->stage = ROAR_XCODER_STAGE_OPENED; 
    187206 } 
     
    202221 speex_decode_int(self->xcoder, &(self->bits), buf); 
    203222 
     223 if ( self->stereo ) { 
     224  speex_decode_stereo_int(buf, self->frame_size, &(self->stereo_state)); 
     225 } 
     226 
    204227 return 0; 
    205228} 
Note: See TracChangeset for help on using the changeset viewer.