[vlc-devel] [PATCH] speex: Fix DecodeRtpSpeexPacket function PTS handling error

Rémi Denis-Courmont remi at remlab.net
Wed Jul 29 11:01:28 CEST 2015


    Hello,

Le 2015-07-28 21:55, Yupeng Chang a écrit :
> at line 708, the orginal code is
> if ( !date_Get( &p_sys->end_date ) )
>     date_Set( &p_sys->end_date, p_speex_bit_block->i_dts );
>
> This is not correct.
> When end_date is 0, the first packet's PTS will be set to end_date,
> after RTCP sync,
> the packet's PTS/DTS will be much different than the first packet's 
> PTS/DTS,
> if the end_date is not updated, decoder will always report error 
> message

I think this code was copied from the non-RTP version above. I think 
you are right that it will break if the first RTCP SR compound is 
received after the first RTP packet (or if NTP/RTP time correlation is 
modified later).

In my opinion, Speex over RTP should not be treated as a codec of its 
own anyway. RTP depayloading and RTCP processing belongs in the demuxer.

> After I remove if ( !date_Get( &p_sys->end_date ) ), speex RTP 
> playing
> back works perfect with VLC.

That would probably work as a stop-gap solution. But then I guess you 
should remove the date_Increment() call. In fact, you should probably 
remove date_*() calls completely and just copy the i_pts value from 
input block to output block.

Ideally, the RTP processing would be moved out of the codec plugin into 
the RTP plugin, though. Are you using live555?

-- 
Rémi Denis-Courmont
http://www.remlab.net/




More information about the vlc-devel mailing list