[Protocol-dev] RE: [Client-dev] CR-Client-Resend: Added code to contol how muchlatency can be caused by the transport buffer

[Protocol-dev] RE: [Client-dev] CR-Client-Resend: Added code to contol how muchlatency can be caused by the transport buffer

Henry Ping ping at real.com
Wed Oct 20 10:05:50 PDT 2004


looks good to me

-->Henry

> -----Original Message-----
> From: client-dev-bounces at helixcommunity.org
> [mailto:client-dev-bounces at helixcommunity.org]On Behalf Of Aaron Colwell
> Sent: Wednesday, October 20, 2004 8:58 AM
> To: protocol-dev at lists.helixcommunity.org;
> client-dev at lists.helixcommunity.org
> Subject: [Client-dev] CR-Client-Resend: Added code to contol how
> muchlatency can be caused by the transport buffer
>
>
>  On Mon, Oct 18, 2004 at 02:20:30PM -0700, Aaron Colwell wrote:
> >
> > Synopsis: Added code to contol how much latency can be caused by the
> >           transport buffer.
> >
> > Overview: These changes allow the HXNetSource object to control
> the amount
> >           of latency that can be introduced by the transport
> buffer. These
> >           latency parameters are controlled by a LatencyMode
> parameter in
> >           the stream header. Latency mode 0 represents normal
> legacy latency.
> >           This results in a 2 second transport latency with an
> extra 2 seconds
> >           during buffering. Latency mode 1 is auto-latency
> mode. This mode is
> >           a little fuzzy to me at this time so I just set it to
> only allow 1
> >           second of transport latency and no extra latency
> during buffering.
> >           This mode can be tuned later once it is better
> defined. Latency Mode
> >           2 doesn't allow the transport to introduce any latency. All of
> >           these default values can be overloaded with
> preferences. You can
> >           also force a specific latency mode by setting a LatencyMode
> >           preference.
> >
> >           - Created the new IHXResendBufferControl2 interface to allow
> >             tighter control over the transport buffer parameters.
> >             IHXResendBufferControl only allows you to specify one of the
> >             parameters that controls latency and it uses seconds as the
> >             parameter units. IHXResendBufferControl2 allows you
> to control
> >             the minimum and maximum latencies as well as the
> extra latency
> >             that is added when the client is rebuffering. The units for
> >             these parameter are in milliseconds so that you can
> have tighter
> >             control over the latency.
> >
> >           - Added code to RTSPClientProtocol to implement
> >             IHXResendBufferControl2. This required that
> RTSPTransport and
> >             RTSPTransportBuffer to be modified as well so the
> parameters could
> >             get to the code that they effect.
> >
> >           - Fixed RTSPClientProtocol::SetResendBufferDepth() so
> that it would
> >             actually set the resend buffer depth on the
> transports when called.
> >             The previous code was depending on the buffer depth
> to get set
> >             by some other code, but that sequence of events
> never happened so
> >             this call basically did nothing before.
> >
> >           - Created the CHXLatencyModeHelper class to contain
> all the logic for
> >             managing the various latency modes. Currently this
> only entails
> >             setting the resend buffer parameters, but it will
> likely contain
> >             more code in the future.
> >
> >           - Added code to HXNetSource to figure out the latency
> mode and use
> >             the CHXLatencyModeHelper class to configure the
> source for that
> >             latency mode.
> >
> >
> > Files Modified:
> > client/core/hxntsrc.cpp
> > client/core/hxntsrc.h
> > client/core/clntcorelib
> > protocol/transport/common/system/rtsptran.cpp
> > protocol/transport/common/system/transbuf.cpp
> > protocol/transport/common/system/pub/rtsptran.h
> > protocol/transport/common/system/pub/transbuf.h
> > protocol/rtsp/rtspclnt.cpp
> > protocol/rtsp/include/hxrsdbf.h
> > protocol/rtsp/pub/rtspclnt.h
> >
> > Files Added:
> > client/core/latency_mode_hlpr.h
> > client/core/latency_mode_hlpr.cpp
> >
> > Image Size and Heap Use impact:
> >
> > Platforms and Profiles affected: all
> >
> > Distribution Libraries affected: none
> >
> > Distribution library impact and planned action: none
> >
> > Platforms and Profiles Build Verified: win32
> >
> > Platforms and Profiles Functionality verified: win32
> >
> > Branch: HEAD
> >
> > QA Instructions: none
> >
> > Index: hxntsrc.cpp
> > ===================================================================
> > RCS file: /cvsroot/client/core/hxntsrc.cpp,v
> > retrieving revision 1.106
> > diff -u -r1.106 hxntsrc.cpp
> > --- hxntsrc.cpp	13 Oct 2004 20:31:48 -0000	1.106
> > +++ hxntsrc.cpp	18 Oct 2004 18:49:45 -0000
> > @@ -89,6 +89,7 @@
> >  #include "hxprotocol.h"
> >  #include "dtrvtcon.h"
> >  #include "rtspprotocol.h"
> > +#include "latency_mode_hlpr.h"
> >
> >  #if defined(HELIX_FEATURE_PNA)
> >  #include "hxpnapro.h"
> > @@ -212,8 +213,8 @@
> >      , m_bUserHasCalledStartInit(FALSE)
> >      , m_bTimeBased(FALSE)
> >      , m_bAltURL(FALSE)
> > -    , m_bNoLatency(FALSE)
> > -    , m_bNoLatencySet(FALSE)
> > +    , m_uLatencyMode(0)
> > +    , m_bLatencyModeSet(FALSE)
> >      , m_pCookies(NULL)
> >      , m_pCookies2(NULL)
> >      , m_bABDCalibrationDone(FALSE)
> > @@ -1044,7 +1045,7 @@
> >              }
> >          }
> >
> > -        SetNoLatency();
> > +        SetLatencyMode();
> >
> >          HX_ASSERT(m_llLastExpectedPacketTime <= MAX_UINT32);
> >
> > @@ -1156,7 +1157,7 @@
> >                  }
> >              }
> >
> > -            SetNoLatency();
> > +            SetLatencyMode();
> >
> >              if (m_bBruteForceReconnected && m_bSeekPending)
> >              {
> > @@ -3608,16 +3609,40 @@
> >
> >      ProcessFileHeader();
> >
> > -    UINT32 ulNoLatency = 0;
> > -    if (pHeader->GetPropertyULONG32("MinimizeLatency",
> ulNoLatency) == HXR_OK)
> > +    m_uLatencyMode = 0;
> > +
> > +    ULONG32 ulLatencyMode;
> > +    if (HXR_OK == pHeader->GetPropertyULONG32("LatencyMode",
> ulLatencyMode))
> >      {
> > -        m_bNoLatency = (ulNoLatency == 1);
> > +        m_uLatencyMode = (UINT32)ulLatencyMode;
> >      }
> >
> > -    // "MinimizeLatency" in player's preference
> > -    // can overwrite the one in file header
> > -    ReadPrefBOOL(m_pPreferences, "MinimizeLatency", m_bNoLatency);
> > +    ULONG32 ulNoLatency = 0;
> > +    if (((HXR_OK == pHeader->GetPropertyULONG32("MinimizeLatency",
> > +                                                ulNoLatency)) &&
> > +         (ulNoLatency == 1)))
> > +    {
> > +        // The minimize latency feature is equivalent to latency mode 2
> > +        m_uLatencyMode = 2;
> > +    }
> > +
> > +    // The player's preference can overwrite the one in file header
> > +    BOOL bNoLatency = FALSE;
> > +    if ((HXR_OK == ReadPrefBOOL(m_pPreferences, "MinimizeLatency",
> > +                                bNoLatency)) && bNoLatency)
> > +    {
> > +        // The minimize latency feature is equivalent to latency mode 2
> > +        m_uLatencyMode = 2;
> > +    }
> >
> > +    // The player's "LatencyMode" preference gets the final say
> > +    UINT32 uLatencyModePref;
> > +    if (HXR_OK == ReadPrefUINT32(m_pPreferences, "LatencyMode",
> > +                                 uLatencyModePref))
> > +    {
> > +        m_uLatencyMode = uLatencyModePref;
> > +    }
> > +
> >      PostFileHeaderReadyExt();
> >
> >      return HXR_OK;
> > @@ -4960,7 +4985,7 @@
> >      m_bFirstResume = TRUE;
> >      m_bResendAuthenticationInfo = TRUE;
> >      m_bRTSPRuleFlagWorkAround = FALSE;
> > -    m_bNoLatencySet = FALSE;
> > +    m_bLatencyModeSet = FALSE;
> >      m_bIsActive = FALSE;
> >
> >      return;
> > @@ -5799,21 +5824,22 @@
> >  }
> >
> >  void
> > -HXNetSource::SetNoLatency()
> > +HXNetSource::SetLatencyMode()
> >  {
> > -    if (!m_bNoLatencySet && m_bNoLatency)
> > +    if (!m_bLatencyModeSet)
> >      {
> > -        m_bNoLatencySet = TRUE;
> > -        IHXResendBufferControl* pResendBufferControl = NULL;
> > +        m_bLatencyModeSet = TRUE;
> >
> > -        if (m_pProto &&
> > -            HXR_OK ==
> m_pProto->QueryInterface(IID_IHXResendBufferControl,
> > -
> (void**)&pResendBufferControl))
> > +        CHXLatencyModeHelper latencyModeHlpr;
> > +        IUnknown* pUnk = NULL;
> > +
> > +        if ((HXR_OK == QueryInterface(IID_IUnknown, (void**)&pUnk)) &&
> > +            (HXR_OK == latencyModeHlpr.Init(pUnk)))
> >          {
> > -            pResendBufferControl->SetResendBufferDepth(0);
> > +            latencyModeHlpr.SetLatencyMode(m_uLatencyMode);
> >          }
> >
> > -        HX_RELEASE(pResendBufferControl);
> > +        HX_RELEASE(pUnk);
> >      }
> >  }
> >
> > Index: hxntsrc.h
> > ===================================================================
> > RCS file: /cvsroot/client/core/hxntsrc.h,v
> > retrieving revision 1.33
> > diff -u -r1.33 hxntsrc.h
> > --- hxntsrc.h	9 Sep 2004 17:13:51 -0000	1.33
> > +++ hxntsrc.h	18 Oct 2004 18:49:45 -0000
> > @@ -253,7 +253,7 @@
> >
> >  	        BOOL		IsSourceDone(void);
> >
> > -		void		SetNoLatency();
> > +		void		SetLatencyMode();
> >
> >  		void		EnterBufferedPlay(void);
> >  		void		LeaveBufferedPlay(void);
> > @@ -441,8 +441,8 @@
> >  	HX_BITFIELD	m_bBruteForceReconnected : 1;
> >  	HX_BITFIELD	m_bBruteForceConnectToBeDone : 1;
> >  	HX_BITFIELD	m_bReconnect : 1;
> > -	BOOL    	m_bNoLatency;
> > -	HX_BITFIELD	m_bNoLatencySet : 1;
> > +	UINT32    	m_uLatencyMode;
> > +	HX_BITFIELD	m_bLatencyModeSet : 1;
> >  	HX_BITFIELD	m_bPerfectPlayPreferenceRead : 1;
> >  	BOOL    	m_bPerfectPlayErrorChecked;
> >  	HX_BITFIELD	m_bServerHasPerfectPlay : 1;
> > Index: clntcorelib
> > ===================================================================
> > RCS file: /cvsroot/client/core/clntcorelib,v
> > retrieving revision 1.23
> > diff -u -r1.23 clntcorelib
> > --- clntcorelib	12 Oct 2004 21:30:35 -0000	1.23
> > +++ clntcorelib	18 Oct 2004 18:49:45 -0000
> > @@ -102,7 +102,8 @@
> >                     "wmbufctl.cpp",
> >                     "fbbufctl.cpp",
> >                     "client_preroll_hlpr.cpp",
> > -                   "velproxy.cpp")
> > +                   "velproxy.cpp",
> > +                   "latency_mode_hlpr.cpp")
> >
> >  if "HELIX_FEATURE_PLAYBACK_LOCAL" in project.defines:
> >      project.AddSources('hxflsrc.cpp')
> > Index: rtsptran.cpp
> > ===================================================================
> > RCS file: /cvsroot/protocol/transport/common/system/rtsptran.cpp,v
> > retrieving revision 1.32
> > diff -u -r1.32 rtsptran.cpp
> > --- rtsptran.cpp	5 Aug 2004 14:37:09 -0000	1.32
> > +++ rtsptran.cpp	18 Oct 2004 19:08:59 -0000
> > @@ -1886,6 +1886,30 @@
> >      return HXR_OK;
> >  }
> >
> > +HX_RESULT
> > +RTSPTransport::SetResendBufferParameters(UINT32 uMinimumDelay,
>             /* ms */
> > +                                         UINT32 uMaximumDelay,
>             /* ms */
> > +                                         UINT32
> uExtraDelayDuringBuffering /* ms */)
> > +{
> > +    RTSPStreamData* pStreamData = m_pStreamHandler->firstStreamData();
> > +
> > +    ASSERT(pStreamData);
> > +
> > +    while (pStreamData)
> > +    {
> > +	if (!m_bIsSource && pStreamData->m_pTransportBuffer)
> > +        {
> > +
> pStreamData->m_pTransportBuffer->SetBufferParameters(uMinimumDelay,
> > +
>   uMaximumDelay,
> > +
>   uExtraDelayDuringBuffering);
> > +	}
> > +
> > +	pStreamData = m_pStreamHandler->nextStreamData();
> > +    }
> > +
> > +    return HXR_OK;
> > +}
> > +
> >  #ifdef RDT_MESSAGE_DEBUG
> >  void RTSPTransport::RDTmessageFormatDebugFileOut(const char* fmt, ...)
> >  {
> > Index: transbuf.cpp
> > ===================================================================
> > RCS file: /cvsroot/protocol/transport/common/system/transbuf.cpp,v
> > retrieving revision 1.18
> > diff -u -r1.18 transbuf.cpp
> > --- transbuf.cpp	9 Jul 2004 18:41:12 -0000	1.18
> > +++ transbuf.cpp	18 Oct 2004 19:08:59 -0000
> > @@ -114,6 +114,7 @@
> >  ) : m_pOwner(owner),
> >      m_uStreamNumber(streamNumber),
> >      m_bufferDuration(bufferDuration),
> > +    m_extraDelayDuringBuffering(MIN_NETWORK_JITTER_MSECS),
> >      m_maxBufferDuration(maxBufferDuration),
> >      m_growthRate(growthRate),
> >      m_wrapSequenceNumber(wrapSequenceNumber),
> > @@ -206,7 +207,7 @@
> >  }
> >
> >  RTSPTransportBuffer::~RTSPTransportBuffer()
> > -{
> > +{
> >      CHXSimpleList::Iterator i;
> >      ClientPacket* pPacket;
> >
> > @@ -1081,105 +1082,12 @@
> >      UINT16& ulPercentDone
> >  )
> >  {
> > -#if 0
> > -    uStatusCode     = HX_STATUS_READY;
> > -    ulPercentDone   = 100;
> > -
> > -    if (m_bIsEnded)
> > -    {
> > -        return HXR_OK;
> > -    }
> > -
> > -    /* ignore multicasted sparsed streams(i.e. events)
> > -     * it is OK to not be initialized if we are dealing with
> > -     * sparse streams over multicast. This is because
> > -     * in multicast, the transport gets initialialized on
> > -     * receiving the first packet. We do not want to hold
> > -     * the entire presenation if we never receive a packet
> > -     * for this sparse stream.
> > -     */
> > -    else if ((!m_bIsInitialized || m_uSeekCount) &&
> > -             (!m_bMulticast || !m_bSparseStream))
> > -    {
> > -        uStatusCode     = HX_STATUS_BUFFERING;
> > -        ulPercentDone   = 0;
> > -
> > -        return HXR_OK;
> > -    }
> > -
> > -    UINT32 ulCurrentBuffering   = 0;
> > -    INT64 llActualLastTimestampReceived = 0;
> > -
> > -    if (m_bAtLeastOnePacketReceived)
> > -    {
> > -        llActualLastTimestampReceived = CAST_TO_INT64
> m_ulTSRollOver * CAST_TO_INT64 MAX_UINT32 +
> > -                                        CAST_TO_INT64
> m_ulLastTimestampReceived;
> > -
> > -        // FileFormats may send packets with out of order timestamps
> > -        // if the stream has been continuesly playing for 49 days
> > -        // we will set llCurrentBufferingInMs to MAX_UINT32
> > -        if (llActualLastTimestampReceived > CAST_TO_INT64
> m_ulFirstTimestampReceived)
> > -        {
> > -            if (llActualLastTimestampReceived - CAST_TO_INT64
> m_ulFirstTimestampReceived > MAX_UINT32)
> > -            {
> > -                ulCurrentBuffering = MAX_UINT32;
> > -            }
> > -            else
> > -            {
> > -                ulCurrentBuffering =
> INT64_TO_UINT32(llActualLastTimestampReceived -
> > -
> m_ulFirstTimestampReceived);
> > -            }
> > -        }
> > -    }
> > -
> > -    UINT32 ulElapsedBufferingTime =
> > -        CALCULATE_ELAPSED_TICKS(m_ulBufferingStartTime,
> > -                                HX_GET_TICKCOUNT());
> > -
> > -    UINT32 ulPauseTime = m_PacketTime.m_PauseTime.tv_sec*1000 +
> > -                         m_PacketTime.m_PauseTime.tv_usec/1000;
> > -
> > -    if (ulPauseTime > 0 && ulElapsedBufferingTime > ulPauseTime)
> > -    {
> > -        ulElapsedBufferingTime -= ulPauseTime;
> > -    }
> > -
> > -    /*
> > -     * If the buffer duration = 0, then there is no network
> jitter to worry
> > -     * about
> > -     */
> > -
> > -    UINT32 ulMinimumToBuffer =
> > -         m_bufferDuration + (m_bufferDuration ?
> MIN_NETWORK_JITTER_MSECS : 0);
> > -
> > -    if (m_status == TRANSBUF_FILLING ||
> > -        (ulElapsedBufferingTime < ulMinimumToBuffer &&
> > -         ulCurrentBuffering     < ulMinimumToBuffer))
> > -    {
> > -        uStatusCode = HX_STATUS_BUFFERING;
> > -
> > -        UINT32 ulHighVal = ulCurrentBuffering >
> ulElapsedBufferingTime ?
> > -                          ulCurrentBuffering : ulElapsedBufferingTime;
> > -
> > -        if (ulHighVal < ulMinimumToBuffer)
> > -        {
> > -            ulPercentDone =
> HX_SAFEUINT16(ulHighVal*100/ulMinimumToBuffer);
> > -        }
> > -        else // Waiting for a reliable packet
> > -        {
> > -            ulPercentDone = 99;
> > -        }
> > -    }
> > -
> > -    return HXR_OK;
> > -#else
> >      return HXR_NOTIMPL;
> > -#endif
> >  }
> >
> >  HX_RESULT
> >  RTSPTransportBuffer::SetupForACKPacket
> > -(
> > +(
> >      UINT16& uSeqNo,
> >      CHXBitset& pBitset,
> >      UINT16& uBitCount,
> > @@ -2067,6 +1975,21 @@
> >      }
> >  }
> >
> > +void
> > +RTSPTransportBuffer::SetBufferParameters(UINT32 uMinimumDelay,
>             /* ms */
> > +                                         UINT32 uMaximumDelay,
>             /* ms */
> > +                                         UINT32
> uExtraDelayDuringBuffering /* ms */)
> > +{
> > +    if (uMaximumDelay < uMinimumDelay)
> > +    {
> > +        uMaximumDelay = uMinimumDelay;
> > +    }
> > +
> > +    m_bufferDuration = uMinimumDelay;
> > +    m_maxBufferDuration = uMaximumDelay;
> > +    m_extraDelayDuringBuffering = uExtraDelayDuringBuffering;
> > +}
> > +
> >  void
> >  RTSPTransportBuffer::EnterPrefetch(void)
> >  {
> > @@ -2234,8 +2157,8 @@
> >      {
> >          bPlaying = m_pOwner->m_pPlayerState->IsPlaying();
> >
> > -        if (!bPlaying && ulMinimumToBuffer != 0 )
> > -            ulMinimumToBuffer += MIN_NETWORK_JITTER_MSECS;
> > +        if (!bPlaying)
> > +            ulMinimumToBuffer += m_extraDelayDuringBuffering;
> >      }
> >
> >      // We only want to get packets as soon as possible for
> FastStart when
> > Index: pub/rtsptran.h
> > ===================================================================
> > RCS file: /cvsroot/protocol/transport/common/system/pub/rtsptran.h,v
> > retrieving revision 1.30
> > diff -u -r1.30 rtsptran.h
> > --- pub/rtsptran.h	5 Aug 2004 14:37:09 -0000	1.30
> > +++ pub/rtsptran.h	18 Oct 2004 19:08:59 -0000
> > @@ -318,6 +318,9 @@
> >      virtual HX_RESULT resumeBuffers     (void);
> >      HX_RESULT Init                      (IUnknown* pContext);
> >      HX_RESULT SetResendBufferDepth      (UINT32 uMilliseconds);
> > +    HX_RESULT SetResendBufferParameters(UINT32 uMinimumDelay,
>            /* ms */
> > +                                        UINT32 uMaximumDelay,
>            /* ms */
> > +                                        UINT32
> uExtraDelayDuringBuffering /* ms */);
> >
> >      BOOL IsInitialized                  (void);
> >      BOOL IsUpdated                      (void);
> > Index: pub/transbuf.h
> > ===================================================================
> > RCS file: /cvsroot/protocol/transport/common/system/pub/transbuf.h,v
> > retrieving revision 1.8
> > diff -u -r1.8 transbuf.h
> > --- pub/transbuf.h	9 Jul 2004 18:41:08 -0000	1.8
> > +++ pub/transbuf.h	18 Oct 2004 19:08:59 -0000
> > @@ -167,6 +167,9 @@
> >      void		UpdateStatsFromPacket(ClientPacket* pPacket);
> >      void		SeekFlush();
> >      void		SetBufferDepth(UINT32 uMilliseconds);
> > +    void                SetBufferParameters(UINT32
> uMinimumDelay,             /* ms */
> > +                                            UINT32
> uMaximumDelay,             /* ms */
> > +                                            UINT32
> uExtraDelayDuringBuffering /* ms */);
> >
> >      void		EnterPrefetch(void);
> >      void		LeavePrefetch(void);
> > @@ -247,6 +250,7 @@
> >      BOOL		m_bPausedHack;
> >      UINT32		m_ulTSRollOver;
> >      UINT32		m_bufferDuration;
> > +    UINT32              m_extraDelayDuringBuffering;
> >      UINT32		m_maxBufferDuration;
> >      UINT32		m_growthRate;
> >      UINT32		m_wrapSequenceNumber;
> >
> > Index: rtspclnt.cpp
> > ===================================================================
> > RCS file: /cvsroot/protocol/rtsp/rtspclnt.cpp,v
> > retrieving revision 1.117
> > diff -u -r1.117 rtspclnt.cpp
> > --- rtspclnt.cpp	13 Oct 2004 20:32:53 -0000	1.117
> > +++ rtspclnt.cpp	18 Oct 2004 19:10:29 -0000
> > @@ -1485,6 +1485,7 @@
> >          { GET_IIDHANDLE(IID_IHXResolverResponse),
> (IHXResolverResponse*) this },
> >          { GET_IIDHANDLE(IID_IHXInterruptSafe),
> (IHXInterruptSafe*) this },
> >          { GET_IIDHANDLE(IID_IHXResendBufferControl),
> (IHXResendBufferControl*) this },
> > +        { GET_IIDHANDLE(IID_IHXResendBufferControl2),
> (IHXResendBufferControl2*) this },
> >          { GET_IIDHANDLE(IID_IHXThinnableSource),
> (IHXThinnableSource*) this },
> >          { GET_IIDHANDLE(IID_IHXTransportSyncServer),
> (IHXTransportSyncServer*) this },
> >          { GET_IIDHANDLE(IID_IHXTransportBufferLimit),
> (IHXTransportBufferLimit*) this },
> > @@ -5120,9 +5121,47 @@
> >  {
> >      m_ulBufferDepth = uSeconds * 1000;
> >
> > +    CHXMapLongToObj::Iterator i;
> > +    for(i=m_pTransportStreamMap->Begin();
> i!=m_pTransportStreamMap->End(); ++i)
> > +    {
> > +
> > +        RTSPTransport* pTransport = (RTSPTransport*)(*i);
> > +
> > +        HX_RESULT hresult =
> > +            pTransport->SetResendBufferDepth(m_ulBufferDepth);
> > +
> > +        if (HXR_OK != hresult)
> > +        {
> > +            return hresult;
> > +        }
> > +    }
> > +
> >      return HXR_OK;
> >  }
> >
> > +STDMETHODIMP
> > +RTSPClientProtocol::SetResendBufferParameters(THIS_
> > +                                              UINT32
> uMinimumDelay,  /* ms */
> > +                                              UINT32
> uMaximumDelay,  /* ms */
> > +                                         UINT32
> uExtraBufferingDelay /* ms */)
> > +{
> > +    CHXMapLongToObj::Iterator i;
> > +    for(i=m_pTransportStreamMap->Begin();
> i!=m_pTransportStreamMap->End(); ++i)
> > +    {
> > +
> > +        RTSPTransport* pTransport = (RTSPTransport*)(*i);
> > +
> > +        HX_RESULT hresult =
> > +            pTransport->SetResendBufferParameters(uMinimumDelay,
> > +                                                  uMaximumDelay,
> > +
> uExtraBufferingDelay);
> > +
> > +        if (HXR_OK != hresult)
> > +        {
> > +            return hresult;
> > +        }
> > +    }
> > +}
> >
> >  /*
> >   * IHXTransportSyncServer methods
> > @@ -9772,6 +9811,7 @@
> >             break;
> >             case HX_SOCK_EVENT_WRITE:
> >                 //HX_ASSERT(false); //XXXLCM buffered write
> socket prevents this
> > +               hr = HXR_OK;
> >                 break;
> >             default:
> >                 hr = HXR_OK;
> > Index: include/hxrsdbf.h
> > ===================================================================
> > RCS file: /cvsroot/protocol/rtsp/include/hxrsdbf.h,v
> > retrieving revision 1.2
> > diff -u -r1.2 hxrsdbf.h
> > --- include/hxrsdbf.h	9 Jul 2004 18:41:16 -0000	1.2
> > +++ include/hxrsdbf.h	18 Oct 2004 19:10:29 -0000
> > @@ -94,4 +94,50 @@
> >  					UINT32 uSeconds) PURE;
> >  };
> >
> > +typedef _INTERFACE	IHXResendBufferControl2	    IHXResendBufferControl2;
> > +
> >
> +/****************************************************************
> ************
> > + *
> > + *  Interface:
> > + *
> > + *	IHXResendBufferControl2
> > + *
> > + *  Purpose:
> > + *
> > + *	Allows management of the transport resend buffer
> > + *
> > + *  IID_IHXResendBufferControl2:
> > + *
> > + *	{D3103F1E-738F-4161-9B39-1DE7BC60E0E3}
> > + *
> > + */
> > +DEFINE_GUID(IID_IHXResendBufferControl2, 0xd3103f1e, 0x738f, 0x4161,
> > +            0x9b, 0x39, 0x1d, 0xe7, 0xbc, 0x60, 0xe0, 0xe3);
> > +
> > +#undef  INTERFACE
> > +#define INTERFACE   IHXResendBufferControl2
> > +
> > +DECLARE_INTERFACE_(IHXResendBufferControl2, IUnknown)
> > +{
> > +    /*
> > +     *	IUnknown methods
> > +     */
> > +    STDMETHOD(QueryInterface)	(THIS_
> > +				REFIID riid,
> > +				void** ppvObj) PURE;
> > +
> > +    STDMETHOD_(ULONG32,AddRef)	(THIS) PURE;
> > +
> > +    STDMETHOD_(ULONG32,Release)	(THIS) PURE;
> > +
> > +    /*
> > +     *	IHXResendBufferControl2 methods
> > +     */
> > +
> > +    STDMETHOD(SetResendBufferParameters) (THIS_
> > +                                          UINT32 uMinimumDelay,/* ms */
> > +                                          UINT32
> uMaximumDelay, /* ms */
> > +                                          UINT32
> uExtraBufferingDelay/* ms */) PURE;
> > +};
> > +
> >  #endif /* _HXRSDBF_H_ */
> > Index: pub/rtspclnt.h
> > ===================================================================
> > RCS file: /cvsroot/protocol/rtsp/pub/rtspclnt.h,v
> > retrieving revision 1.52
> > diff -u -r1.52 rtspclnt.h
> > --- pub/rtspclnt.h	3 Aug 2004 23:24:54 -0000	1.52
> > +++ pub/rtspclnt.h	18 Oct 2004 19:10:29 -0000
> > @@ -419,6 +419,7 @@
> >                            public IHXPacketResend,
> >                            public IHXInterruptSafe,
> >                            public IHXResendBufferControl,
> > +                          public IHXResendBufferControl2,
> >                            public IHXTransportSyncServer,
> >                            public IHXTransportBufferLimit,
> >                            public IHXResolveResponse,
> > @@ -770,8 +771,20 @@
> >      STDMETHOD(InitPacketFilter)         (THIS_
> >                                          RawPacketFilter* pFilter);
> >
> > +    /*
> > +     *	IHXResendBufferControl methods
> > +     */
> >      STDMETHOD(SetResendBufferDepth)     (THIS_
> >                                          UINT32 uSeconds);
> > +
> > +    /*
> > +     *	IHXResendBufferControl2 methods
> > +     */
> > +
> > +    STDMETHOD(SetResendBufferParameters) (THIS_
> > +                                          UINT32
> uMinimumDelay,      /* ms */
> > +                                          UINT32
> uMaximumDelay,      /* ms */
> > +                                          UINT32
> uExtraBufferingDelay/* ms */);
> >
> >      /*
> >       * IHXTransportSyncServer methods
>
>
>
> > _______________________________________________
> > Client-dev mailing list
> > Client-dev at helixcommunity.org
> > http://lists.helixcommunity.org/mailman/listinfo/client-dev
>
>
> _______________________________________________
> Client-dev mailing list
> Client-dev at helixcommunity.org
> http://lists.helixcommunity.org/mailman/listinfo/client-dev




More information about the Protocol-dev mailing list
 

Site Map   |   Terms of Use   |   Privacy Policy   |   Contact Us

Copyright © 1995-2007 RealNetworks, Inc. All rights reserved. RealNetworks and Helix are trademarks of RealNetworks.
All other trademarks or registered trademarks are the property of their respective holders.