[prev in list] [next in list] [prev in thread] [next in thread] 

List:       helix-protocol-dev
Subject:    [Protocol-dev] EAMO-7NXA4Y Server-controlled start time (AKA
From:       <ext-jesus.1.rodriguez () nokia ! com>
Date:       2009-03-05 20:58:56
Message-ID: B26CC1CBE7B84E4DAC8886E1C12FB3800139BE39 () xesebe102 ! nee ! nokia ! com
[Download RAW message or body]

"Nokia submits this code under the terms of a commercial contribution agreement with \
Real Networks, and I am authorized to contribute this code under said agreement."  
Modified by: ext-jesus.1.rodriguez@nokia.com
Reviewed by:
Date: Mar 05, 2009
Project: SymbianMmf_rel
ErrorId: EAMO-7NXA4Y
Synopsis: Server-controlled start time (AKA ServerStartTime, retooling of \
ApproxSeek).  
Overview: 
There are some servers that implement what I will call here "server-side bookmarks"; \
that is, they remember the position a client left a stream in, and resume from that \
point when asked for that stream again. These servers inform the client about that \
bookmark position via the Range: header in an RTSP PLAY response.

This calls for a generalization of ApproxSeek. At the same time, we feel that \
ApproxSeek would no longer be an appropriate name for such an interface, so the \
proposal includes a renaming of ApproxSeek to ServerStartTime.  
Solution:
Opposite to what ApproxSeek did, ServerStartTime qualifies whether the \
UseServerStartTime flag is true in the configuration files, while in \
HXMMFPlayCtrl::OpenRequest, not HXMMFPlayCtrl::Seek. If ServerStartTime is false \
(default) or unset, the player's OpenRequest is called as usual. Otherwise, Helix \
will indicate, from HXPlayer to HXNetSource to RTSPProtocol, that server start times \
are to be used, via InServerStartTime().

When Helix receives an answer to an RTSP PLAY, RTSPProtocol saves the new range \
(already implemented in ApproxSeek, no change in behaviour there) and, if enabled, \
will issue the HXNetSource::HandleServerStartTimeResponse() callback, which goes all \
the way up to HXPlayer. Here, HXPlayer will inform everyone involved  (CAudioPlayer, \
SourceInfo, HXNetSource, if applicable) of the change.

I also include a fix for a bug I found in the original ApproxSeek:

 HX_RESULT
 HXNetSource::UpdateSeekTime(ULONG32 seekTime)
 {
     HXLOGL2(HXLOG_NSRC, "HXNetSource::UpdateSeekTime seekTime:%lu \
m_llLastExpectedPacketTime:%lu", \
                seekTime,INT64_TO_ULONG32(m_llLastExpectedPacketTime));
     HXLOGL2(HXLOG_NSRC, "HXNetSource::UpdateSeekTime m_ulStartTime:%lu \
mLiveStream:%d m_bInitialized:%d", m_ulStartTime,mLiveStream,m_bInitialized);  
-    // Add any start time to seek time
-    seekTime    += m_ulStartTime;
-
     // Are we seeking past the last expected packet time?
     // If so, don't bother... and mark this source as done

This is causing an out-of-range condition when using ApproxSeek along with the \
"start" query string parameter.  
Modified files:
/common/include/hxcore.h
/common/include/hxhxiids.h
/clientapps/symbianMmf/hxmmfplayctrl.cpp
/clientapps/symbiancommon/config/R1_Mobile_4_0_Factory.cfg
/client/core/hxntsrc.cpp
/client/core/hxntsrc.h
/client/core/hxplay.cpp
/client/core/rtspprotocol.cpp
/client/core/pub/hxplay.h
/protocol/rtsp/rtspclnt.cpp
/protocol/rtsp/pub/rtspclnt.h
 
New files: None
Image size and heap use impact: Negligible
Module Release testing (STIF): Yes
Test case(s) added: No
Memory leak check performed: Yes, no new leaks introduced.
Platforms and Profiles Build verified: helix-client-s60-32-mmf-mdf-arm, \
helix-client-s60-50-mmf-mdf-arm Platforms and Profiles Functionality verified: armv5
Branch: 221Cays, 210Cays, Head

 


["clientapps.diff" (text/plain)]

? symbianMmf/Makefile
? symbianMmf/MmfCtrlLib.mak
? symbianMmf/MmfCtrlLib.upp
? symbianMmf/Umakefil.upp
? symbianMmf/armv5-dbg32
? symbianMmf/armv5-rel32
? symbianMmf/audiocontroller/Makefile
? symbianMmf/audiocontroller/Umakefil.upp
? symbianMmf/audiocontroller/armv5-dbg32
? symbianMmf/audiocontroller/armv5-rel32
? symbianMmf/audiocontroller/controllerdll.mak
? symbianMmf/audiocontroller/controllerdll.upp
? symbianMmf/audiocontroller/controllersis.mak
? symbianMmf/audiocontroller/controllersis.upp
? symbianMmf/audiocontroller/copyDlls.bat
? symbianMmf/audiocontroller/hxaudio-s60-mmf.pkg
? symbianMmf/audiocontroller/hxaudio-s60-mmf.sis
? symbianMmf/audiocontroller/hxaudio-s60-mmfU.pkg
? symbianMmf/audiocontroller/hxaudio-s60-mmf_stub.pkg
? symbianMmf/audiocontroller/hxmmfaudioctrl{000a0000}.def
? symbianMmf/common/Makefile
? symbianMmf/common/Umakefil.upp
? symbianMmf/common/armv5-dbg32
? symbianMmf/common/armv5-rel32
? symbianMmf/videocontroller/Makefile
? symbianMmf/videocontroller/MmfCtrlDll.mak
? symbianMmf/videocontroller/MmfCtrlDll.upp
? symbianMmf/videocontroller/MmfSis.mak
? symbianMmf/videocontroller/MmfSis.upp
? symbianMmf/videocontroller/Umakefil.upp
? symbianMmf/videocontroller/armv5-dbg32
? symbianMmf/videocontroller/armv5-rel32
? symbianMmf/videocontroller/copyDlls.bat
? symbianMmf/videocontroller/hxmmfctrl{000a0000}.def
? symbianMmf/videocontroller/mmfplayer-s60-mmf.pkg
? symbianMmf/videocontroller/mmfplayer-s60-mmf.sis
? symbianMmf/videocontroller/mmfplayer-s60-mmf.sisx
? symbianMmf/videocontroller/mmfplayer-s60-mmfU.SIS
? symbianMmf/videocontroller/mmfplayer-s60-mmfU.pkg
? symbianMmf/videocontroller/mmfplayer-s60-mmfU.sisx
? symbianMmf/videocontroller/mmfplayer-s60-mmf_stub.pkg
? symbianMmf/wmvextcontroller/Makefile
? symbianMmf/wmvextcontroller/Umakefil.upp
? symbianMmf/wmvextcontroller/WmaExtCtrlDll.mak
? symbianMmf/wmvextcontroller/WmaExtCtrlDll.upp
? symbianMmf/wmvextcontroller/WmvExtCtrlDll.mak
? symbianMmf/wmvextcontroller/WmvExtCtrlDll.upp
? symbianMmf/wmvextcontroller/WmvExtMmfSis.mak
? symbianMmf/wmvextcontroller/WmvExtMmfSis.upp
? symbianMmf/wmvextcontroller/armv5-dbg32
? symbianMmf/wmvextcontroller/armv5-rel32
? symbianMmf/wmvextcontroller/copyDlls.bat
? symbianMmf/wmvextcontroller/hx_s60-wm.pkg
? symbianMmf/wmvextcontroller/hx_s60-wm.sis
? symbianMmf/wmvextcontroller/hx_s60-wm.sisx
? symbianMmf/wmvextcontroller/hx_s60-wmU.SIS
? symbianMmf/wmvextcontroller/hx_s60-wmU.pkg
? symbianMmf/wmvextcontroller/hx_s60-wmU.sisx
? symbianMmf/wmvextcontroller/hx_s60-wm_stub.pkg
? symbianMmf/wmvextcontroller/wmaextctrldll{000a0000}.def
? symbianMmf/wmvextcontroller/wmvextctrldll{000a0000}.def
? symbiancommon/config/audio_dll_names.txt
? symbiancommon/config/audio_dll_names_wm.txt
? symbiancommon/config/dll_names.txt
? symbiancommon/config/dll_names_wm.txt
? symbiancommon/config/hxmetadata_dlls_wm.txt
Index: symbianMmf/hxmmfplayctrl.cpp
===================================================================
RCS file: /cvsroot/clientapps/symbianMmf/hxmmfplayctrl.cpp,v
retrieving revision 1.5.2.12.2.1
diff -w -u -r1.5.2.12.2.1 hxmmfplayctrl.cpp
--- symbianMmf/hxmmfplayctrl.cpp	25 Aug 2008 17:01:08 -0000	1.5.2.12.2.1
+++ symbianMmf/hxmmfplayctrl.cpp	24 Feb 2009 16:51:12 -0000
@@ -292,6 +292,32 @@
         // save the url
         m_url = url;
     }        
+
+    HXBOOL bUseServerStartTime = FALSE;
+    
+    bUseServerStartTime = prefs::GetBool(m_pPrefs, "UseServerStartTime", \
bUseServerStartTime ); +    
+    if(bUseServerStartTime)
+    {
+        HXLOGL2(HXLOG_SMMF, "HXMMFPlayCtrl::OpenRequest() ServerStartTime is \
allowed"); +        // see if IID_IHXServerStartTime is supported by HXPlayer
+        IHXServerStartTime* pServerStartTime = NULL;
+        m_pHXPlayer->QueryInterface(IID_IHXServerStartTime, (void **) \
&pServerStartTime); +        if(pServerStartTime)
+        {
+            pServerStartTime->ServerStartTime();
+            HX_RELEASE(pServerStartTime);
+        }
+        else
+        {
+            HXLOGL2(HXLOG_SMMF, "HXMMFPlayCtrl::OpenRequest() ServerStartTime \
interface is not supported"); +        }
+    }
+    else
+    {
+        HXLOGL2(HXLOG_SMMF, "HXMMFPlayCtrl::OpenRequest() ServerStartTime:%d", \
bUseServerStartTime); +    }
+
     return(m_pHXPlayer2->OpenRequest(pRequest));
 }
 
@@ -346,48 +372,8 @@
 {
     HXLOGL2(HXLOG_SMMF, "HXMMFPlayCtrl::Seek(%d)", newPos);
     HX_RESULT hxr;
-    HXBOOL bUseApproxSeek = FALSE;
-    HXBOOL bStreaming = FALSE;
-    HXBOOL bSeekIssued = FALSE;
-      
-    // Limit ApproxSeek to streaming cases
-    // check if OpenURL() was used or Request is URL ?
-   
-    CHXURL url(m_url);
-    if (url.IsNetworkProtocol())
-    {
-       bStreaming = TRUE;       
-    }
-    
-    // check if ApproxSeek is allowed
-    bUseApproxSeek = prefs::GetBool(m_pPrefs, "UseApproxSeek", bUseApproxSeek );
-    
-    if(bUseApproxSeek && bStreaming)
-    {
-        HXLOGL2(HXLOG_SMMF, "HXMMFPlayCtrl::Seek(%d) ApproxSeek is allowed", \
                newPos);
-        // see if IID_IHXApproxSeek is supported by HXPlayer	
-        IHXApproxSeek* pApproxSeek = NULL;
-        m_pHXPlayer->QueryInterface(IID_IHXApproxSeek, (void **) &pApproxSeek);
-        if(pApproxSeek)
-        {
-            hxr = pApproxSeek->ApproxSeek(newPos);
-            HX_RELEASE(pApproxSeek);
-            bSeekIssued = TRUE;
-        }
-        else
-        {
-            HXLOGL2(HXLOG_SMMF, "HXMMFPlayCtrl::Seek(%d) ApproxSeek is not \
                supported", newPos);
-        }      
-    }
-    else
-    {
-    	  HXLOGL2(HXLOG_SMMF, "HXMMFPlayCtrl::Seek(%d) bUseApproxSeek:%d \
                bStreaming:%d", bUseApproxSeek, bStreaming);
-    }
     
-    if(!bSeekIssued) 
-    {
         hxr = m_pHXPlayer->Seek(newPos);
-    }
        
     return hxr;   
 }
Index: symbiancommon/config/R1_Mobile_4_0_Factory.cfg
===================================================================
RCS file: /cvsroot/clientapps/symbiancommon/config/R1_Mobile_4_0_Factory.cfg,v
retrieving revision 1.26.2.22.2.11
diff -w -u -r1.26.2.22.2.11 R1_Mobile_4_0_Factory.cfg
--- symbiancommon/config/R1_Mobile_4_0_Factory.cfg	19 Sep 2008 19:48:56 \
                -0000	1.26.2.22.2.11
+++ symbiancommon/config/R1_Mobile_4_0_Factory.cfg	24 Feb 2009 16:20:43 -0000
@@ -138,9 +138,9 @@
 #determines interval after which NAT keep-alive is sent if no UDP packets are \
received  UDPNATTimeout=500
 
-# For streaming scenarios, uses time returned in Range field of RTSP PLAY response \
as the seek time. +# For streaming scenarios, uses time returned in Range field of \
RTSP PLAY response as the play/seek time.  # Disabled by default
-UseApproxSeek=0
+UseServerStartTime=0
 
 # use RTP for non-RM content
 UseRTP=1


["common.diff" (text/plain)]

? container/Makefile
? container/Umakefil.upp
? container/armv5-dbg32
? container/armv5-rel32
? container/ucontlib.mak
? container/ucontlib.upp
? dbgtool/Makefile
? dbgtool/Umakefil.upp
? dbgtool/armv5-dbg32
? dbgtool/armv5-rel32
? fileio/Makefile
? fileio/Umakefil.upp
? fileio/armv5-dbg32
? fileio/armv5-rel32
? lang/xml/Makefile
? lang/xml/Umakefil.upp
? lang/xml/armv5-dbg32
? lang/xml/armv5-rel32
? lang/xml/hxxml_dll_stub.c
? lang/xml/hxxml_ordinal.dat
? lang/xml/hxxml{000a0000}.def
? lang/xml/xmldll.mak
? lang/xml/xmldll.upp
? lang/xml/xmllib.mak
? lang/xml/xmllib.upp
? log/logcommon/Makefile
? log/logcommon/Umakefil.upp
? log/logcommon/armv5-dbg32
? log/logcommon/armv5-rel32
? log/logobserverfile/Makefile
? log/logobserverfile/Umakefil.upp
? log/logobserverfile/armv5-dbg32
? log/logobserverfile/armv5-rel32
? log/logobserverfile/logobserverfile_dll_stub.c
? log/logobserverfile/logobserverfile_ordinal.dat
? log/logobserverfile/logobserverfile{000a0000}.def
? log/logsystem/Makefile
? log/logsystem/Umakefil.upp
? log/logsystem/armv5-dbg32
? log/logsystem/armv5-rel32
? log/logsystem/hxtlogdll.mak
? log/logsystem/hxtlogdll.upp
? log/logsystem/log_dll_stub.c
? log/logsystem/log_ordinal.dat
? log/logsystem/log{000a0000}.def
? log/logutil/Makefile
? log/logutil/Umakefil.upp
? log/logutil/armv5-dbg32
? log/logutil/armv5-rel32
? netio/Makefile
? netio/Umakefil.upp
? netio/armv5-dbg32
? netio/armv5-rel32
? runtime/Makefile
? runtime/Umakefil.upp
? runtime/armv5-dbg32
? runtime/armv5-rel32
? system/Makefile
? system/Umakefil.upp
? system/armv5-dbg32
? system/armv5-rel32
? util/Makefile
? util/Umakefil.upp
? util/armv5-dbg32
? util/armv5-rel32
Index: include/hxcore.h
===================================================================
RCS file: /cvsroot/common/include/hxcore.h,v
retrieving revision 1.11.2.1.8.1
diff -u -w -r1.11.2.1.8.1 hxcore.h
--- include/hxcore.h	25 Aug 2008 17:00:04 -0000	1.11.2.1.8.1
+++ include/hxcore.h	5 Mar 2009 19:43:33 -0000
@@ -635,22 +635,22 @@
 
 
 /*
- * Similar to IHXPlayer::Seek(), except player will use the time returned 
- * in the Range field of the RTSP PLAY Response, if present,
- * as the actual seek time.  
+ * Enables the player to update its start/seek time
+ * according to what was returned in the Range field of the 
+ * RTSP PLAY response, if present.
  */
-DEFINE_GUID(IID_IHXApproxSeek, 0x63112719, 0x809b, 0x4ecd, 0xb6, 0xa5, 0x8e,
+DEFINE_GUID(IID_IHXServerStartTime, 0x63112719, 0x809b, 0x4ecd, 0xb6, 0xa5, 0x8e,
             0x32, 0xaa, 0xfe, 0xb6, 0x16);
 
 
 #undef  INTERFACE
-#define INTERFACE   IHXApproxSeek
-DECLARE_INTERFACE_(IHXApproxSeek, IUnknown)
+#define INTERFACE   IHXServerStartTime
+DECLARE_INTERFACE_(IHXServerStartTime, IUnknown)
 {
     STDMETHOD(QueryInterface)   (THIS_ REFIID riid, void** ppvObj) PURE;
     STDMETHOD_(ULONG32,AddRef)  (THIS) PURE;
     STDMETHOD_(ULONG32,Release) (THIS) PURE;
-    STDMETHOD(ApproxSeek)       (THIS_ ULONG32 ulTime) PURE;
+    STDMETHOD(ServerStartTime)  (THIS) PURE;
 };
 
 
Index: include/hxiids.h
===================================================================
RCS file: /cvsroot/common/include/hxiids.h,v
retrieving revision 1.89.2.4.2.1
diff -u -w -r1.89.2.4.2.1 hxiids.h
--- include/hxiids.h	25 Aug 2008 17:00:04 -0000	1.89.2.4.2.1
+++ include/hxiids.h	24 Feb 2009 16:21:12 -0000
@@ -367,7 +367,7 @@
 DEFINE_GUID_ENUM(IID_IHXStream2,    0x00000400, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, \
0x24, 0x40, 0x6d, 0x5a)  DEFINE_GUID_ENUM(IID_IHXStreamSource,   0x00000401, 0x901, \
0x11d1, 0x8b, 0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59)  \
DEFINE_GUID_ENUM(IID_IHXPlayer,     0x00000402, 0x901, 0x11d1, 0x8b, 0x6, 0x0, 0xa0, \
                0x24, 0x40, 0x6d, 0x59)
-DEFINE_GUID_ENUM(IID_IHXApproxSeek, 0x63112719, 0x809b, 0x4ecd, 0xb6, 0xa5, 0x8e, \
0x32, 0xaa, 0xfe, 0xb6, 0x16) +DEFINE_GUID_ENUM(IID_IHXServerStartTime, 0x63112719, \
0x809b, 0x4ecd, 0xb6, 0xa5, 0x8e, 0x32, 0xaa, 0xfe, 0xb6, 0x16)  \
DEFINE_GUID_ENUM(IID_IHXClientEngine,   0x00000403, 0x901, 0x11d1, 0x8b, 0x6, 0x0, \
0xa0, 0x24, 0x40, 0x6d, 0x59)  #ifdef _UNIX
 DEFINE_GUID_ENUM(IID_IHXClientEngineSelector,   0x00000404, 0x901, 0x11d1, 0x8b, \
                0x6, 0x0, 0xa0, 0x24, 0x40, 0x6d, 0x59)
Index: include/platform.h
===================================================================
RCS file: /cvsroot/common/include/platform.h,v
retrieving revision 1.34.2.3
diff -u -w -r1.34.2.3 platform.h
--- include/platform.h	7 Dec 2007 19:29:02 -0000	1.34.2.3
+++ include/platform.h	23 Feb 2009 18:30:22 -0000
@@ -50,5 +50,5 @@
 #ifndef _PLATFORM_H_

 #define _PLATFORM_H_

 #define TARVER_STR_PLATFORM "symbian"

-#define TARVER_STR_BUILD_BRANCH "hxclient_2_1_0_cayennes_restricted"

+#define TARVER_STR_BUILD_BRANCH "hxclient_2_2_1_cayennes_restricted"
 #endif


["protocol.diff" (text/plain)]

? common/util/Makefile
? common/util/Umakefil.upp
? common/util/armv5-dbg32
? common/util/armv5-rel32
? http/Makefile
? http/Umakefil.upp
? http/armv5-dbg32
? http/armv5-rel32
? rtsp/Makefile
? rtsp/Umakefil.upp
? rtsp/armv5-dbg32
? rtsp/armv5-rel32
? sdp/Makefile
? sdp/Umakefil.upp
? sdp/armv5-dbg32
? sdp/armv5-rel32
? sdp/hxsdp_dll_stub.c
? sdp/hxsdp_ordinal.dat
? sdp/hxsdp{000a0000}.def
? sdp/sdplib.mak
? sdp/sdplib.upp
? sdp/sdpplin.mak
? sdp/sdpplin.upp
? transport/common/system/Makefile
? transport/common/system/Umakefil.upp
? transport/common/system/armv5-dbg32
? transport/common/system/armv5-rel32
? transport/rdt/Makefile
? transport/rdt/Umakefil.upp
? transport/rdt/armv5-dbg32
? transport/rdt/armv5-rel32
? transport/rtp/Makefile
? transport/rtp/Umakefil.upp
? transport/rtp/armv5-dbg32
? transport/rtp/armv5-rel32
Index: rtsp/rtspclnt.cpp
===================================================================
RCS file: /cvsroot/protocol/rtsp/rtspclnt.cpp,v
retrieving revision 1.182.2.25.2.13
diff -w -u -r1.182.2.25.2.13 rtspclnt.cpp
--- rtsp/rtspclnt.cpp	21 Oct 2008 21:32:55 -0000	1.182.2.25.2.13
+++ rtsp/rtspclnt.cpp	4 Mar 2009 15:02:39 -0000
@@ -4261,7 +4261,7 @@
         }
     }
 
-    // ApproxSeek support
+    // ServerStartTime support
     // we didn't update Range from RTSP PLAY response yet
     m_bRangeUpdatedFromPlayResponse = FALSE;
     
@@ -7858,7 +7858,7 @@
                  		nFrom = (INT32)(dTemp * 1000);
                  	}
                  	
-                 	// update seektime from Range header for ApproxSeek handling
+                 	// update seektime from Range header for ServerStartTime handling
                  	// RTSPProtocol calls GetUpdatedSeekTime() to get it
                  	HXLOGL2(HXLOG_RTSP, "RTSPClientProtocol[%p]::handlePlayResponse(): \
new play Range from:%lu to:%lu", this, nFrom,nTo);   m_ulPlayFrom = nFrom;
Index: rtsp/pub/rtspclnt.h
===================================================================
RCS file: /cvsroot/protocol/rtsp/pub/rtspclnt.h,v
retrieving revision 1.77.2.11.2.3
diff -w -u -r1.77.2.11.2.3 rtspclnt.h
--- rtsp/pub/rtspclnt.h	25 Aug 2008 17:07:16 -0000	1.77.2.11.2.3
+++ rtsp/pub/rtspclnt.h	24 Feb 2009 16:28:04 -0000
@@ -954,7 +954,7 @@
     HX_RESULT SetStatistics             (UINT16 uStreamNumber, STREAM_STATS* \
                pStats);
     HXBOOL IsSessionSucceeded             (){return m_bSessionSucceeded;};
 
-    // ApproxSeek support
+    // ServerStartTime support
     // Is range received from RTSP PLAY response?
     HXBOOL IsRangeUpdated()             { return m_bRangeUpdatedFromPlayResponse;};
     UINT32 GetUpdatedSeekTime()         { return m_ulPlayFrom;};
@@ -1314,7 +1314,7 @@
     UINT32			            m_ulLastBWSent;
     HXBOOL                              m_bHaveSentRemainingSetupRequests;
     HXBOOL                              m_bSDBDisabled;
-    // ApproxSeek support 
+    // ServerStartTime support 
     // Range returned with RTSP PLAY response
     UINT32                              m_ulPlayFrom;
     UINT32                              m_ulPlayTo;


["client.diff" (text/plain)]

? audiosvc/Makefile
? audiosvc/Umakefil.upp
? audiosvc/armv5-dbg32
? audiosvc/armv5-rel32
? common/container/Makefile
? common/container/Umakefil.upp
? common/container/armv5-dbg32
? common/container/armv5-rel32
? common/netio/Makefile
? common/netio/Umakefil.upp
? common/netio/armv5-dbg32
? common/netio/armv5-rel32
? common/system/Makefile
? common/system/Umakefil.upp
? common/system/armv5-dbg32
? common/system/armv5-rel32
? common/util/Makefile
? common/util/Umakefil.upp
? common/util/armv5-dbg32
? common/util/armv5-rel32
? core/Makefile
? core/Umakefil.upp
? core/armv5-dbg32
? core/armv5-rel32
? core/clntcore_dll_stub.c
? core/clntcore_ordinal.dat
? core/clntcoredll.mak
? core/clntcoredll.upp
? core/clntcorelib.mak
? core/clntcorelib.upp
? core/clntcore{000a0000}.def
? netwksvc/Makefile
? netwksvc/Umakefil.upp
? netwksvc/armv5-dbg32
? netwksvc/armv5-rel32
? videosvc/Makefile
? videosvc/Umakefil.upp
? videosvc/armv5-dbg32
? videosvc/armv5-rel32
Index: core/hxntsrc.cpp
===================================================================
RCS file: /cvsroot/client/core/hxntsrc.cpp,v
retrieving revision 1.133.2.5.8.1
diff -w -u -r1.133.2.5.8.1 hxntsrc.cpp
--- core/hxntsrc.cpp	25 Aug 2008 16:57:15 -0000	1.133.2.5.8.1
+++ core/hxntsrc.cpp	4 Mar 2009 15:18:47 -0000
@@ -6009,19 +6009,19 @@
     }
 }
 
-// ApproxSeek support
+// ServerStartTime support
 HXBOOL 
-HXNetSource::InApproxSeek()
+HXNetSource::InServerStartTime()
 {
-    return ((m_pPlayer) ? (m_pPlayer->InApproxSeek()) : (FALSE));
+    return ((m_pPlayer) ? (m_pPlayer->InServerStartTime()) : (FALSE));
 }
 
-// ApproxSeek support
+// ServerStartTime support
 HX_RESULT
-HXNetSource::HandleApproxSeekResponse(UINT32 ulSeekTime)
+HXNetSource::HandleServerStartTimeResponse(UINT32 ulSeekTime)
 {
-    HXLOGL2(HXLOG_NSRC, "HXNetSource::HandleApproxSeekResponse ulSeekTime:%lu", \
                ulSeekTime);
-    return m_pPlayer->HandleApproxSeekResponse(ulSeekTime);
+    HXLOGL2(HXLOG_NSRC, "HXNetSource::HandleServerStartTimeResponse ulSeekTime:%lu", \
ulSeekTime); +    return m_pPlayer->HandleServerStartTimeResponse(ulSeekTime);
 }
 
 HX_RESULT
@@ -6034,9 +6034,6 @@
     HXLOGL2(HXLOG_NSRC, "HXNetSource::UpdateSeekTime seekTime:%lu \
m_llLastExpectedPacketTime:%lu", \
                seekTime,INT64_TO_ULONG32(m_llLastExpectedPacketTime));
     HXLOGL2(HXLOG_NSRC, "HXNetSource::UpdateSeekTime m_ulStartTime:%lu \
mLiveStream:%d m_bInitialized:%d", m_ulStartTime,mLiveStream,m_bInitialized);  
-    // Add any start time to seek time
-    seekTime    += m_ulStartTime;
-
     // Are we seeking past the last expected packet time?
     // If so, don't bother... and mark this source as done
     //
Index: core/hxntsrc.h
===================================================================
RCS file: /cvsroot/client/core/hxntsrc.h,v
retrieving revision 1.42.8.3.8.1
diff -w -u -r1.42.8.3.8.1 hxntsrc.h
--- core/hxntsrc.h	25 Aug 2008 16:57:59 -0000	1.42.8.3.8.1
+++ core/hxntsrc.h	24 Feb 2009 16:53:54 -0000
@@ -536,9 +536,9 @@
 
 	void		WritePerfectPlayToRegistry();
 	void		CreateCloakedPortList();
-	// ApproxSeek support
-	HXBOOL          InApproxSeek();
-	HX_RESULT       HandleApproxSeekResponse(UINT32 ulSeekTime);
+    // ServerStartTime support
+    HXBOOL          InServerStartTime();
+    HX_RESULT       HandleServerStartTimeResponse(UINT32 ulSeekTime);
 	virtual HX_RESULT       UpdateSeekTime(ULONG32 ulSeekTime);
 
 };
Index: core/hxplay.cpp
===================================================================
RCS file: /cvsroot/client/core/hxplay.cpp,v
retrieving revision 1.123.2.13.2.1
diff -w -u -r1.123.2.13.2.1 hxplay.cpp
--- core/hxplay.cpp	25 Aug 2008 16:58:41 -0000	1.123.2.13.2.1
+++ core/hxplay.cpp	5 Mar 2009 20:47:06 -0000
@@ -386,6 +386,7 @@
     ,m_pSharedWallClocks(NULL)
     ,m_pRecordService(NULL)
     ,m_bRecordServiceEnabled(FALSE)
+    ,m_bInServerStartTime(FALSE)
     ,m_bInApproxSeek(FALSE)
 #if defined(HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS)
     , m_ulTotalDurReported(HX_PROGDOWNLD_UNKNOWN_DURATION)
@@ -560,7 +561,7 @@
     QInterfaceList qiList[] =
         {
             { GET_IIDHANDLE(IID_IHXPlayer), (IHXPlayer*)this },
-            { GET_IIDHANDLE(IID_IHXApproxSeek), (IHXApproxSeek*)this },
+            { GET_IIDHANDLE(IID_IHXServerStartTime), (IHXServerStartTime*)this },
             { GET_IIDHANDLE(IID_IHXPlayer2), (IHXPlayer2*)this },
             { GET_IIDHANDLE(IID_IHXPendingStatus), (IHXPendingStatus*)this },
 #if defined(HELIX_FEATURE_AUTHENTICATION)
@@ -1027,6 +1028,11 @@
     HXLOGL1(HXLOG_CORE, "HXPlayer[%p]::SeekPlayer(%lu)", this, ulTime);
     HX_RESULT theErr = HXR_OK;
 
+	if(m_bInServerStartTime)
+    {
+        m_bInApproxSeek = TRUE;
+    }
+
     if (m_bIsDone)
     {
         return HXR_UNEXPECTED;
@@ -4547,6 +4553,7 @@
     pSource->Init(this, ulRegistryID);
 
     UINT32 ulStart = 0, ulEnd = HX_EOF_TIME, ulDelay = 0, ulDuration = 0, ulOffset = \
0; +
     GetTimingFromURL(m_pURL, ulStart, ulEnd, ulDelay, ulDuration, ulOffset);
 
     if (!(pURLProperties = m_pURL->GetProperties()))
@@ -11720,36 +11727,38 @@
 #endif
 #endif
 
-STDMETHODIMP HXPlayer::ApproxSeek(ULONG32 ulTime)
+STDMETHODIMP HXPlayer::ServerStartTime()
 {
     HX_RESULT theErr      = HXR_OK;    
-    m_bInApproxSeek = TRUE;
+    m_bInServerStartTime = TRUE;
     
-    HXLOGL1(HXLOG_CORE, "HXPlayer[%p]::ApproxSeek(%lu) m_bInApproxSeek:%d", this, \
                ulTime, m_bInApproxSeek);
-    // first do conventional seek
-    // so that we can get Range values from RTSP PLAY response
-    Seek(ulTime);
+    HXLOGL1(HXLOG_CORE, "HXPlayer[%p]::ServerStartTime() m_bInServerStartTime:%d", \
this, m_bInServerStartTime);  
     return theErr;
 }
 
-HX_RESULT HXPlayer::HandleApproxSeekResponse(ULONG32 ulTime)
+HX_RESULT HXPlayer::HandleServerStartTimeResponse(ULONG32 ulTime)
 {
-    // update player with new seektime from Range field of RTSP PLAY response
-    HXLOGL1(HXLOG_CORE, "HXPlayer[%p]::HandleApproxSeekResponse(%lu)", this, \
ulTime); +    // update player with new time from Range field of RTSP PLAY response
+    HXLOGL1(HXLOG_CORE, "HXPlayer[%p]::HandleServerStartTimeResponse(%lu) \
m_bInApproxSeek:%d", this, ulTime, m_bInApproxSeek);  HX_RESULT theErr = HXR_OK;
 
     m_bCoreLocked = TRUE;
     m_pCoreMutex->Lock();
     
-    //////////////////////////////////////
-    // update seektime here
-    //m_ulTimeBeforeSeek  = m_pAudioPlayer->GetCurrentPlayBackTime();
+    ULONG32 currentTime = m_pAudioPlayer->GetCurrentPlayBackTime();
+    HXLOGL1(HXLOG_CORE, "HXPlayer[%p]::HandleServerStartTimeResponse ulTime:%lu \
currentTime:%lu", this, ulTime, currentTime); +    if(currentTime != ulTime)
+    {
+        HXLOGL1(HXLOG_CORE, "HXPlayer[%p]::HandleServerStartTimeResponse \
updating...", this); +        // update time here
     m_ulTimeAfterSeek   = ulTime;
     UpdateCurrentPlayTime(ulTime);
     
     m_pAudioPlayer->Seek(ulTime);
     
+        if(m_bInApproxSeek)
+        {
     CHXMapPtrToPtr::Iterator ndxSource = m_pSourceMap->Begin();
     for (; !theErr && ndxSource != m_pSourceMap->End(); ++ndxSource)
     {
@@ -11759,14 +11768,14 @@
         HX_ASSERT(pSource);
         theErr = pSource->UpdateSeekTime(ulTime);
     }
+        }
+    }
 
     m_bInApproxSeek = FALSE;
-    //
-    //////////////////////////////////////
     
     m_pCoreMutex->Unlock();
     m_bCoreLocked = FALSE;
-    HXLOGL1(HXLOG_CORE, "HXPlayer[%p]::HandleApproxSeekResponse(%lu) \
m_bInApproxSeek:%d theErr:%d", this, ulTime, m_bInApproxSeek, theErr); +    \
HXLOGL1(HXLOG_CORE, "HXPlayer[%p]::HandleServerStartTimeResponse(%lu) \
m_bInApproxSeek:%d theErr:%d", this, ulTime, m_bInApproxSeek, theErr);  
     return theErr;
 }
Index: core/rtspprotocol.cpp
===================================================================
RCS file: /cvsroot/client/core/rtspprotocol.cpp,v
retrieving revision 1.67.2.4.8.2
diff -w -u -r1.67.2.4.8.2 rtspprotocol.cpp
--- core/rtspprotocol.cpp	25 Aug 2008 16:59:17 -0000	1.67.2.4.8.2
+++ core/rtspprotocol.cpp	24 Feb 2009 16:54:05 -0000
@@ -1397,8 +1397,8 @@
     {
         m_bPlaying = TRUE;
   
-        // handle Approx seek
-        if( mOwner->InApproxSeek() && 
+        // handle ServerStartTime
+        if( mOwner->InServerStartTime() && 
             m_pProtocolLib && 
             ((RTSPClientProtocol*)m_pProtocolLib)->IsRangeUpdated() )
         {
@@ -1407,11 +1407,11 @@
            
             // update player with new seek time
             HXLOGL2(HXLOG_RTSP, "RTSPProtocol[%p]::HandlePlayResponse(): updated \
                seek time = %lu", this, m_ulSeekPos1);
-            status = mOwner->HandleApproxSeekResponse(m_ulSeekPos1);
+            status = mOwner->HandleServerStartTimeResponse(m_ulSeekPos1);
            
             if (status != HXR_OK)
             {
-                HXLOGL2(HXLOG_RTSP, "RTSPProtocol[%p]::HandlePlayResponse(): \
ApproxSeek Error status = 0x%08x", this, status); +                \
HXLOGL2(HXLOG_RTSP, "RTSPProtocol[%p]::HandlePlayResponse(): ServerStartTime Error \
status = 0x%08x", this, status);  mOwner->ReportError(status);
                 return status;
             }
Index: core/pub/hxplay.h
===================================================================
RCS file: /cvsroot/client/core/pub/hxplay.h,v
retrieving revision 1.39.2.5.2.1
diff -w -u -r1.39.2.5.2.1 hxplay.h
--- core/pub/hxplay.h	25 Aug 2008 16:58:42 -0000	1.39.2.5.2.1
+++ core/pub/hxplay.h	5 Mar 2009 19:43:47 -0000
@@ -446,7 +446,7 @@
 } URL_TYPE;
 
 class HXPlayer :   public IHXPlayer, 
-                   public IHXApproxSeek,
+                   public IHXServerStartTime,
 		    public IHXPlayer2,
 		    public IHXAudioPlayerResponse,
 		    public IHXPendingStatus,
@@ -805,8 +805,8 @@
     void EventOccurred(HXxEvent* pEvent);
 
 
-    //IHXApproxSeek call
-    STDMETHOD(ApproxSeek) (THIS_ ULONG32 ulSeekTime );
+    //IHXServerStartTime call
+    STDMETHOD(ServerStartTime) (THIS);
     
 
 #ifdef _UNIX
@@ -1876,9 +1876,9 @@
 
     HX_RESULT		SetupAudioPlayer(void);
     virtual HX_RESULT	PrepareAudioPlayer(void);
-    // ApproxSeek support
-    HX_RESULT           HandleApproxSeekResponse(ULONG32 ulTime);
-    HXBOOL  InApproxSeek() { return m_bInApproxSeek;};
+    // ServerStartTime support
+    HX_RESULT           HandleServerStartTimeResponse(ULONG32 ulTime);
+    HXBOOL  InServerStartTime() { return m_bInServerStartTime;};
 //#if defined(HELIX_FEATURE_AUTHENTICATION)
     void		ProcessPendingAuthentication();
     void		ClearPendingAuthenticationRequests();
@@ -1962,7 +1962,8 @@
 
     IHXRecordService*	m_pRecordService;
     HXBOOL                m_bRecordServiceEnabled;
-    // ApproxSeek support
+    // ServerStartTime support
+    HXBOOL                m_bInServerStartTime;
     HXBOOL                m_bInApproxSeek;
 #if defined(HELIX_FEATURE_PROGRESSIVE_DOWNLD_STATUS)
     UINT32              m_ulTotalDurReported;



_______________________________________________
Protocol-dev mailing list
Protocol-dev@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/protocol-dev


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic