Changeset 3038
- Timestamp:
- 01/06/00 12:09:34 (13 years ago)
- Files:
-
- 1 modified
-
rat/trunk/cc_vanilla.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
rat/trunk/cc_vanilla.c
r3034 r3038 187 187 const codec_format_t *cf; 188 188 codec_id_t id; 189 uint32_t data_len;189 uint32_t data_len; 190 190 u_char *p, *end; 191 191 media_data *m; 192 ts_t playout_step; 193 194 id = codec_get_by_payload(cu->pt); 195 cf = codec_get_format(id); 196 197 media_data_create(&m, 1); 198 assert(m->nrep == 1); 199 200 /* Do first unit separately as that may have state */ 201 p = cu->data; 202 end = cu->data + cu->data_len; 203 204 if (cf->mean_per_packet_state_size) { 205 m->rep[0]->state_len = cf->mean_per_packet_state_size; 206 m->rep[0]->state = (u_char*)block_alloc(m->rep[0]->state_len); 207 memcpy(m->rep[0]->state, p, cf->mean_per_packet_state_size); 208 p += cf->mean_per_packet_state_size; 209 } 210 211 data_len = codec_peek_frame_size(id, p, (uint16_t)(end - p)); 212 m->rep[0]->id = id; 213 m->rep[0]->data_len = (uint16_t)data_len; 214 m->rep[0]->data = (u_char*)block_alloc(data_len); 215 memcpy(m->rep[0]->data, p, data_len); 216 p += data_len; 217 218 if (pb_add(out, (u_char *)m, sizeof(media_data), playout) == FALSE) { 219 debug_msg("XXX Failed to add unit\n"); 220 media_data_destroy(&m, sizeof(media_data)); 221 return; 222 } 223 /* Now do other units which do not have state*/ 224 playout_step = ts_map32(cf->format.sample_rate, codec_get_samples_per_frame(id)); 192 ts_t unit_dur; 193 194 id = codec_get_by_payload(cu->pt); 195 cf = codec_get_format(id); 196 unit_dur = ts_map32(cf->format.sample_rate, codec_get_samples_per_frame(id)); 197 p = cu->data; 198 end = cu->data + cu->data_len; 199 225 200 while(p < end) { 226 playout = ts_add(playout, playout_step);227 201 media_data_create(&m, 1); 228 m->rep[0]->id = id; 229 assert(m->nrep == 1); 230 202 m->rep[0]->id = id; 203 if (p == cu->data && cf->mean_per_packet_state_size) { 204 /* First unit out of packet may have state */ 205 m->rep[0]->state_len = cf->mean_per_packet_state_size; 206 m->rep[0]->state = (u_char*)block_alloc(m->rep[0]->state_len); 207 memcpy(m->rep[0]->state, p, cf->mean_per_packet_state_size); 208 p += cf->mean_per_packet_state_size; 209 } 210 /* Now do data section */ 231 211 data_len = codec_peek_frame_size(id, p, (uint16_t)(end - p)); 232 212 m->rep[0]->data = (u_char*)block_alloc(data_len); 233 213 m->rep[0]->data_len = (uint16_t)data_len; 234 235 214 memcpy(m->rep[0]->data, p, data_len); 236 p += data_len;237 215 if (pb_add(out, (u_char *)m, sizeof(media_data), playout) == FALSE) { 238 216 debug_msg("Vanilla decode failed\n"); 239 } 217 media_data_destroy(&m, sizeof(media_data)); 218 return; 219 } 220 p += data_len; 221 playout = ts_add(playout, unit_dur); 240 222 } 241 223 assert(p == end);
