linphone-developers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Linphone-developers] G722


From: Vadim Lebedev
Subject: Re: [Linphone-developers] G722
Date: Fri, 30 Jan 2009 15:48:19 +0100
User-agent: Thunderbird 2.0.0.19 (X11/20090105)

Hi Simon,
Simon Morlat wrote:
Hello,

First of all thanks for G722 and G726 contributions. Actually instead of 
integrating them directly in mediastreamer2, I would like to make them 
plugins, such as msilbc and msx264.

  
I've nothing against plugins :)

I've applied your portaudio fix.

Concerning the ugly IETF mistake concerning the rate of G722, my preferrence 
would be to define the PayloadType with a 8000 Hz clockrate, but put a 
limited hack within audiostream.c so that the soundcards are open at 16000 Hz 
instead of 8000 as written in the payloadtype.
Or do the reverse thing (perhaps it's better):
declare the PayloadType as 16000 Hz but msrtp will "read" 8000 in case 
mime_type=="g722" .

I think it should work.

The reason why I dislike the rtp_rate addon is that it modifies the ABI the 
PayloadType struct and brings confustion just to workaround an IETF mistake 
for a single payload type. Not sure it is worth to do that.

What do you think ?
  
The desire to keep stable ABI is very good reason  to avoid changing payload type.

However it seems that modifciations of of msrtp.c becomes somewhat more complicated than
you think.


First of all when sending  (line 223 at msrtp.c) we need to do something like:

    if (pt == g722_pt)
        timestamp /= 2;


Then when receiving, in addition fo 'reading' 8000 instead of 16000 from the payload descriptor we need to
do something like in receiver_process:

    while ((m = rtp_session_recvm_with_ts(d->session, timestamp)) != NULL) {
        uint32_t  pkttstamp = rtp_get_timestamp(m);
        int  pt = rtp_get_payload_type(m);

         if (pt == g722_pt)
             pkttstamp *= 2;

        mblk_set_timestamp_info(m,  pkttstamp);
        mblk_set_marker_info(m, rtp_get_markbit(m));
        mblk_set_payload_type(m, pt);
        rtp_get_payload(m,&m->b_rptr);
        ms_queue_put(f->outputs[0], m);
    }


Any comments?

BTW  the g722_pt  could have different values for send and receive directions,  but this
is a general problem in mediastreamer  ---  even if oRtp is able to function with different profiles for each direction
mediastreamer2 and linphone does not support it

Thanks
Vadim






Simon

Le Wednesday 28 January 2009 19:30:56 Vadim Lebedev, vous avez écrit :
  
Hello,

We've a following interop problem with G722 codec:

Because of historical reasons the relevant RTP RFC   speicifies that
when using G722 payload
RTP TIMESTAMP should be incremented with 8KHZ frequency  even if the
REAL sampling rate
is 16KHZ.

As you understand msrtp.c filter is unable to handle this situation,
so we've been thinking about possible enchancements.

One idea that comes to mind is to add a 'rtp_rate'  field to Payloadtype
structure , and if it is non zero and different from sampling rate to
compute adjustement (divider or multiplier) to rtp time stamp.

Any comments on this approach?


Thanks
Vadim



_______________________________________________
Linphone-developers mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/linphone-developers
    



  


reply via email to

[Prev in Thread] Current Thread [Next in Thread]