Actually, this version of libortp seems to have a bug which causes
the ortp receiver to segfault. Fix seems to be simple and is already
sent out to the linphone mailing list.
Moreover, Simon made msg_to_buf() static ;(
An easy solution to this problem is to provide an own version in
ortp_recv.c.
- the new paraslash scheduler, short and sweet.
- Support for m4a files via the new aac filter/ and audio
- the new paraslash scheduler, short and sweet.
- Support for m4a files via the new aac filter/ and audio
- format handler. (requires libfaad)
+ format handler (requires libfaad).
+ - each writer has its own command line parser, just like
+ para_recv and para_filter.
- new writer: osxplay (thanks to Gerd Becker)
- new writer: osxplay (thanks to Gerd Becker)
+ - para_client and para_audioc use the error subsystem
- writers are integrated in para_audiod
- para_client is integrated in para_audiod
- writers are integrated in para_audiod
- para_client is integrated in para_audiod
- - each writer of para_write has its own command line parser,
- just like para_recv and para_filter.
- random/playlist selector: improved info strings
- new audiod commands: tasks, kill
- random/playlist selector: improved info strings
- new audiod commands: tasks, kill
- - para_client/para_audioc use the error subsystem
+ - update to libortp-0.10.0
------------------------------------------
------------------------------------------
#define CHUNK_SIZE 128 * 1024
#define CHUNK_SIZE 128 * 1024
-extern int msg_to_buf(mblk_t *, char *, int);
-
/**
* data specific to the ortp receiver
*
/**
* data specific to the ortp receiver
*
+
+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;
static void ortp_recv_pre_select(struct sched *s, struct task *t)
{
struct receiver_node *rn = t->private_data;