Changeset 2300:a1f45451cd78 in roaraudio
- Timestamp:
- 08/05/09 05:26:01 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroardsp/transcode_speex.c
r2299 r2300 94 94 int roar_xcoder_speex_packet_size(struct roar_xcoder * state, int samples) { 95 95 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; 99 100 100 101 return _16BIT * self->frame_size; … … 144 145 145 146 int 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; 147 201 } 148 202
Note: See TracChangeset
for help on using the changeset viewer.