Hi,
I've been experiencing an issue with sipXtapi whereby when we minimise
applications (either using sipXtapi or not) we lose audio from the sipXtapi
DLL. The audio can be restored by minimising another window, or maximising
it, or restoring focus, etc.
This is on a Windows XP platform although I believe the issue is present on
other platforms but perhaps harder to reproduce.
Looking into this further I have managed to track down the issue a bit more.
It looks like there is an issue in the MpdSipxPcma::decodeIn function. The
same presumably applies to MpdSipxPcmu::decodeIn. The error is around the
handling of the following code:
if (MpDspUtils::compareSerials(rtpTimestamp, mNextPullTimerCount) <= 0) {
Should this comparison prove false, then we know that the rtpTimestamp is
later than mNextPullTimerCount. This then takes us to the following:
// Count errors if we are not pulling packets for some reason
mUnderflowCount++;
return 0; // We don't want this packet
At this point we don't update mNextPullTimerCount. When returning to the
decodeIn function for the next RTP packet we find that the
mNextPullTimerCount has increased by 80 (through the frameIncrement
function) but has not yet passed the point where the check "delta >
(160*(mWaitTimeInFrames*2))" evaluates to true. This means that we then
proceed to drop this RTP packet as well. This can continue almost
indefinitely.
In terms of fixes I've thought of two. One is setting mNextPullTimerCount
before returning, and another is to remove the checking of the timestamps
and just ensure the RTP sequence numbers are increasing monotonicly,
dropping packets if not.
Presumably the act of minimising windows causes some timer issues that
brings out the problem I've seen.
If anyone can comment on a solution then I'd appreciate it. I'm still not
too familiar with the code :-)
Many Thanks in Advance,
Alex
I've included a trace of the results of the compareSerials call in a test
below. Sorry if this fills up too much space.
----
First Application Minimised here!!
----
rtpTimestamp=109776680, mNextPullTimerCount=109776520, diff=160.
rtpTimestamp=109776840, mNextPullTimerCount=109776600, diff=240.
rtpTimestamp=109777000, mNextPullTimerCount=109776680, diff=320.
rtpTimestamp=109777160, mNextPullTimerCount=109776760, diff=400.
rtpTimestamp=109777320, mNextPullTimerCount=109776840, diff=480.
rtpTimestamp=109777480, mNextPullTimerCount=109776920, diff=560.
rtpTimestamp=109777640, mNextPullTimerCount=109777000, diff=640.
rtpTimestamp=109777800, mNextPullTimerCount=109777080, diff=720.
rtpTimestamp=109777960, mNextPullTimerCount=109777240, diff=720.
rtpTimestamp=109778120, mNextPullTimerCount=109777320, diff=800.
rtpTimestamp=109778280, mNextPullTimerCount=109777400, diff=880.
rtpTimestamp=109778440, mNextPullTimerCount=109777640, diff=800.
rtpTimestamp=109778600, mNextPullTimerCount=109777960, diff=640.
rtpTimestamp=109778760, mNextPullTimerCount=109778280, diff=480.
rtpTimestamp=109778920, mNextPullTimerCount=109778360, diff=560.
rtpTimestamp=109779080, mNextPullTimerCount=109778440, diff=640.
rtpTimestamp=109779240, mNextPullTimerCount=109778680, diff=560.
rtpTimestamp=109779400, mNextPullTimerCount=109778760, diff=640.
rtpTimestamp=109779560, mNextPullTimerCount=109778920, diff=640.
rtpTimestamp=109779720, mNextPullTimerCount=109779080, diff=640.
rtpTimestamp=109780040, mNextPullTimerCount=109779400, diff=640.
rtpTimestamp=109780200, mNextPullTimerCount=109779560, diff=640.
rtpTimestamp=109780360, mNextPullTimerCount=109779640, diff=720.
rtpTimestamp=109780520, mNextPullTimerCount=109779800, diff=720.
rtpTimestamp=109780680, mNextPullTimerCount=109780040, diff=640.
rtpTimestamp=109780840, mNextPullTimerCount=109780200, diff=640.
rtpTimestamp=109781000, mNextPullTimerCount=109780280, diff=720.
rtpTimestamp=109781160, mNextPullTimerCount=109780360, diff=800.
rtpTimestamp=109781320, mNextPullTimerCount=109780680, diff=640.
rtpTimestamp=109781480, mNextPullTimerCount=109780840, diff=640.
rtpTimestamp=109781640, mNextPullTimerCount=109781000, diff=640.
rtpTimestamp=109781800, mNextPullTimerCount=109781240, diff=560.
rtpTimestamp=109781960, mNextPullTimerCount=109781320, diff=640.
rtpTimestamp=109782120, mNextPullTimerCount=109781400, diff=720.
rtpTimestamp=109782280, mNextPullTimerCount=109781720, diff=560.
rtpTimestamp=109782440, mNextPullTimerCount=109781800, diff=640.
rtpTimestamp=109782600, mNextPullTimerCount=109781880, diff=720.
rtpTimestamp=109782760, mNextPullTimerCount=109781960, diff=800.
rtpTimestamp=109782920, mNextPullTimerCount=109782120, diff=800.
rtpTimestamp=109783080, mNextPullTimerCount=109782360, diff=720.
rtpTimestamp=109783240, mNextPullTimerCount=109782440, diff=800.
rtpTimestamp=109783400, mNextPullTimerCount=109782520, diff=880.
rtpTimestamp=109783560, mNextPullTimerCount=109782760, diff=800.
rtpTimestamp=109783720, mNextPullTimerCount=109782840, diff=880.
rtpTimestamp=109783880, mNextPullTimerCount=109783000, diff=880.
rtpTimestamp=109784040, mNextPullTimerCount=109783240, diff=800.
rtpTimestamp=109784200, mNextPullTimerCount=109783400, diff=800.
rtpTimestamp=109784360, mNextPullTimerCount=109783480, diff=880.
rtpTimestamp=109784520, mNextPullTimerCount=109783720, diff=800.
rtpTimestamp=109784680, mNextPullTimerCount=109783800, diff=880.
rtpTimestamp=109784840, mNextPullTimerCount=109783960, diff=880.
rtpTimestamp=109785000, mNextPullTimerCount=109784040, diff=960.
rtpTimestamp=109785160, mNextPullTimerCount=109784120, diff=1040.
rtpTimestamp=109785320, mNextPullTimerCount=109784360, diff=960.
rtpTimestamp=109785480, mNextPullTimerCount=109784520, diff=960.
rtpTimestamp=109785640, mNextPullTimerCount=109784600, diff=1040.
rtpTimestamp=109785800, mNextPullTimerCount=109784760, diff=1040.
rtpTimestamp=109785960, mNextPullTimerCount=109784840, diff=1120.
rtpTimestamp=109786120, mNextPullTimerCount=109784920, diff=1200.
rtpTimestamp=109786280, mNextPullTimerCount=109785080, diff=1200.
rtpTimestamp=109786440, mNextPullTimerCount=109785320, diff=1120.
rtpTimestamp=109786600, mNextPullTimerCount=109785480, diff=1120.
rtpTimestamp=109786760, mNextPullTimerCount=109785560, diff=1200.
rtpTimestamp=109786920, mNextPullTimerCount=109785640, diff=1280.
rtpTimestamp=109787080, mNextPullTimerCount=109785720, diff=1360.
rtpTimestamp=109787240, mNextPullTimerCount=109785880, diff=1360.
rtpTimestamp=109787400, mNextPullTimerCount=109786040, diff=1360.
rtpTimestamp=109787560, mNextPullTimerCount=109786120, diff=1440.
rtpTimestamp=109787720, mNextPullTimerCount=109786200, diff=1520.
rtpTimestamp=109787880, mNextPullTimerCount=109786520, diff=1360.
rtpTimestamp=109788040, mNextPullTimerCount=109786600, diff=1440.
rtpTimestamp=109788200, mNextPullTimerCount=109786680, diff=1520.
rtpTimestamp=109788360, mNextPullTimerCount=109786840, diff=1520.
rtpTimestamp=109788520, mNextPullTimerCount=109786920, diff=1600.
rtpTimestamp=109788680, mNextPullTimerCount=109787080, diff=1600.
rtpTimestamp=109788840, mNextPullTimerCount=109787400, diff=1440.
rtpTimestamp=109789000, mNextPullTimerCount=109787480, diff=1520.
rtpTimestamp=109789160, mNextPullTimerCount=109787560, diff=1600.
rtpTimestamp=109789320, mNextPullTimerCount=109787640, diff=1680.
rtpTimestamp=109789480, mNextPullTimerCount=109787800, diff=1680.
rtpTimestamp=109789640, mNextPullTimerCount=109787960, diff=1680.
rtpTimestamp=109789800, mNextPullTimerCount=109788120, diff=1680.
rtpTimestamp=109789960, mNextPullTimerCount=109788200, diff=1760.
rtpTimestamp=109790120, mNextPullTimerCount=109788360, diff=1760.
rtpTimestamp=109790280, mNextPullTimerCount=109788440, diff=1840.
rtpTimestamp=109790440, mNextPullTimerCount=109788520, diff=1920.
----
Second Application Minimised here
----
=====
Alex Boreham
Development Engineer
Redwood Technologies Limited
The Redwood Building, Broad Lane, Bracknell, Berkshire, RG12 9GU, U.K.
Registered in England No. 2817863
T +[44] (0)1344 304 344
F +[44] (0)1344 304 345
E [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
W www.redwoodtech.com <http://www.redwoodtech.com>
=====
Email Disclaimer
The information in this email is confidential and may be legally privileged.
It is intended solely for the addressee. Access to this email by anyone else
is unauthorised. If you are not the intended recipient, any disclosure,
copying, distribution or any action taken or omitted to be taken in reliance
on it is prohibited and may be unlawful. When addressed to our clients any
opinions or advice contained in this email are subject to the limitations of
Redwood Technologies Limited's standard terms and conditions of contract.
_______________________________________________
sipxtapi-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/