Changeset 2305:d0b7c9a6b499 in roaraudio
- Timestamp:
- 08/05/09 06:06:35 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroardsp/transcode_speex.c
r2302 r2305 44 44 } 45 45 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; 50 53 } 51 54 … … 101 104 return -1; 102 105 103 return _16BIT * self->frame_size ;106 return _16BIT * self->frame_size * (self->stereo ? 2 : 1); 104 107 } 105 108 … … 131 134 speex_bits_reset(&(self->bits)); 132 135 136 if ( self->stereo ) 137 speex_encode_stereo_int((spx_int16_t *) buf, self->frame_size, &(self->bits)); 138 133 139 speex_encode_int(self->xcoder, (spx_int16_t *) buf, &(self->bits)); 134 140 … … 146 152 } 147 153 154 // TODO: move all the init thingys into a seperate function 148 155 int roar_xcoder_speex_decode (struct roar_xcoder * state, void * buf, size_t len) { 149 156 struct roar_xcoder_speex * self = state->inst; … … 152 159 int pkg_len; 153 160 int tmp; 161 SpeexStereoState stereo = SPEEX_STEREO_STATE_INIT; 162 SpeexCallback callback; 154 163 155 164 if ( state->stage == ROAR_XCODER_STAGE_INITED ) { … … 184 193 speex_decoder_ctl(self->xcoder, SPEEX_GET_FRAME_SIZE, &(self->frame_size)); 185 194 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 186 205 state->stage = ROAR_XCODER_STAGE_OPENED; 187 206 } … … 202 221 speex_decode_int(self->xcoder, &(self->bits), buf); 203 222 223 if ( self->stereo ) { 224 speex_decode_stereo_int(buf, self->frame_size, &(self->stereo_state)); 225 } 226 204 227 return 0; 205 228 }
Note: See TracChangeset
for help on using the changeset viewer.