X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=ortp_recv.c;h=00dac0e3e95b418d9dd37e28567c0c3e70fe6e49;hp=d9b260980e89f0a0c06d9de72cb390de0075aeef;hb=30c2a4cdeb8e56db492536ead6cbba79c18f8497;hpb=7d1805d1559e08e0af701155574aef220925d411 diff --git a/ortp_recv.c b/ortp_recv.c index d9b26098..00dac0e3 100644 --- a/ortp_recv.c +++ b/ortp_recv.c @@ -32,8 +32,6 @@ #define CHUNK_SIZE 128 * 1024 -extern int msg_to_buf(mblk_t *, char *, int); - /** * data specific to the ortp receiver * @@ -67,6 +65,37 @@ uint32_t timestamp; uint32_t chunk_ts; }; + +static int msg_to_buf(mblk_t *mp, char *buffer, int len) +{ + int rlen = len; + mblk_t *m, *mprev; + int mlen; + + m = mp->b_cont; + mprev = mp; + while (m != NULL) { + mlen = (int) (m->b_wptr - m->b_rptr); + if (mlen <= rlen) { + mblk_t *consumed = m; + memcpy (buffer, m->b_rptr, mlen); + /* go to next mblk_t */ + mprev->b_cont = m->b_cont; + m = m->b_cont; + consumed->b_cont = NULL; + freeb (consumed); + buffer += mlen; + rlen -= mlen; + } else { /*if mlen>rlen */ + memcpy (buffer, m->b_rptr, rlen); + m->b_rptr += rlen; + return len; + } + } + return len - rlen; +} + + static void ortp_recv_pre_select(struct sched *s, struct task *t) { struct receiver_node *rn = t->private_data; @@ -91,9 +120,9 @@ static void compute_next_chunk(unsigned chunk_time, tv_add(&chunk_tv, &pord->next_chunk, &tmp); pord->next_chunk = tmp; pord->timestamp += pord->chunk_ts; - PARA_DEBUG_LOG("next chunk (ts = %d) due at %lu:%lu\n", - pord->timestamp, pord->next_chunk.tv_sec, - pord->next_chunk.tv_usec); +// PARA_DEBUG_LOG("next chunk (ts = %d) due at %lu:%lu\n", +// pord->timestamp, pord->next_chunk.tv_sec, +// pord->next_chunk.tv_usec); } static void ortp_recv_post_select(__a_unused struct sched *s, struct task *t)