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

List:       helix-datatype-cvs
Subject:    [Datatype-cvs] rtsp/fileformat rtspfformat.cpp, 1.6, 1.6.40.1 rtspffpacketqueue.cpp, 1.5, 1.5.230.1
From:       yijil () helixcommunity ! org
Date:       2013-11-14 9:51:27
[Download RAW message or body]

Update of /cvsroot/datatype/rtsp/fileformat
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv16097

Modified Files:
      Tag: SERVER_15_1_0
	rtspfformat.cpp rtspffpacketqueue.cpp rtspfformat.ver 
Log Message:
Committed to: HEAD, SERVER_15_1_0_RN

Reviewed by: Richard

Synopsis:
=========
RTSP Ingest Feature

Branch: HEAD, SERVER_15_1_0_RN

Suggested Reviewers: anyone

Description:
============
I. Intro
==========================================
Some cameras or Multimedia server can support RTSP request. HUS need support RTSP \
protocol as a client to fetch streams. Then treat these streams as simple live \
stream. 

RTSP ingest simply opens a RTSP session with camera or Multimedia server, then create \
data connection with then, and fetch media data. When initialize RTSP session, it \
need support none/basic/digest authentication mode according to camera or Multimedia \
server.

Now it can only support single rate.

II. What feature have been implemented in the version

1. Implement basic/digest authentication

2. Add new admin page and license support

3. Add statistics information for RTSP ingest live stream

4. the configuration information
	<List Name="FSMount">
		<!-- RTSP ingest live -->
    	<List Name="RTSP Ingest Live">
        	<Var ShortName="pn-rtspingest"/>
        	<Var MountPoint="/rtspingest/"/>
    	</List>
	</List>

	<List Name="RTSP_Ingest">
    <Var GlobalEnable="1"/>
    <Var InitialTimeout="10"/>
    <Var SourceScanInterval="60"/>
    <Var StreamTimeout="5"/>
    <Var DebugLevel="0"/>
    <List Name="Source1">
        <Var StreamURL="rtsp://IPAddress:Port/[streamname]"/>
		<Var UserName=username/>
		<Var Password=password/>
        <Var Enable="1"/>
        <Var StreamName="test.mp4"/>
    </List>
</List>

IV.
Files affected:
===============

build/BIF/helixinternal.bif
build/BIF/SERVER_15_1_0-internal.bif
build/umakepf/helix-server-all-defines.pf

server/admin/web/server.opt
server/admin/web/build/mserver/config_broad_mpeg2ts_ingress.html
server/admin/web/build/mserver/config_broad_push2cdn.html
server/admin/web/build/mserver/config_broad_rtmp_send.html
server/admin/web/build/mserver/config_mpeg2ts.html
server/admin/web/build/mserver/config_pending.nc.html
server/admin/web/build/mserver/license.html
server/admin/web/build/mserver/toc.js
server/admin/web/build/server/config_broad_mpeg2ts_ingress.html
server/config_broad_push2cdn.html
server/config_broad_rtmp_send.html
server/admin/web/build/server/config_mpeg2ts.html
server/admin/web/build/server/config_pending.nc.html
server/admin/web/build/server/license.html
server/admin/web/src/srvprxy/license.html.wasm
server/admin/web/src/srvprxy/pageData.pm
server/admin/web/src/srvprxy/toc~server.js.wasm

client/auth/basicauth/clbascauth.cpp

client/audiosvc/hxaudply.cpp
client/audiosvc/hxaudses.cpp

server-restricted/installer/server/make_tempdir
server-restricted/installer/server/retailservinst.cpp
server/engine/context/hxclfact.cpp
server/engine/core/_main.cpp
server/engine/core/server_info.cpp
server/engine/core/pub/server_info.h
server/common/util/make_lib
server/common/util/pub/bcast_defs.h

common/auth/rn5auth/Umakefil
common/auth/rn5auth/digestauth.cpp
common/auth/rn5auth/digestauth.h
common/auth/rn5auth/rn5auth.cpp

protocol/rtsp/Umakefil
protocol/rtsp/dlliids.cpp
protocol/rtsp/rtspclnt.cpp

common/include/defslice.h

client/core/Umakefil
client/core/hxcleng.cpp
client/core/hxconnbwinfo.cpp
client/core/hxntsrc.cpp
client/core/hxsrc.cpp
client/core/hxplay.cpp
client/core/latency_mode_hlpr.cpp
client/core/perscmgr.h
client/core/recordctl.cpp
client/core/rtspprotocol.cpp
client/core/rtspprotocol.h
client/core/sinkctl.cpp
client/core/srcinfo.cpp
client/core/velproxy.cpp
client/core/pub/chxeven.h
client/core/pub/hxplay.h

common/include/hxwin.h
datatype/smil/renderer/smil2/smldoc.cpp
datatype/smil/renderer/smil2/pub/smldoc.h
protocol-restricted/pna/Umakefil

VII. New Files added:
=================
client/core/svrclntcorelib_unix.pcf
client/core/svrclntcorelib

datatype/rtsp/fileformat/pub/rtspffclocksource.h
datatype/rtsp/fileformat/pub/rtspfformat.h
datatype/rtsp/fileformat/pub/rtspffpacketqueue.h

datatype/rtsp/fileformat/rtspffclocksource.cpp
datatype/rtsp/fileformat/rtspfformat.cpp
datatype/rtsp/fileformat/rtspffpacketqueue.cpp
datatype/rtsp/fileformat/rtspfformatdll.cpp
datatype/rtsp/fileformat/Umakefil
datatype/rtsp/fileformat/win32.pcf

server_rn/broadcast/transport/rtsp/recv/pub/clientcontext.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingest_config.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingestfileowner.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingesthandler.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingestmap.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingestpln.h
server_rn/broadcast/transport/rtsp/recv/pub/rtspingestworkercb.h
server_rn/broadcast/transport/rtsp/recv/clientcontext.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingest_config.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingestfileowner.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingesthandler.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingestmap.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingestpln.cpp
server_rn/broadcast/transport/rtsp/recv/rtspingestworkercb.cpp
server_rn/broadcast/transport/rtsp/recv/win32.pcf
server_rn/broadcast/transport/rtsp/recv/guids.cpp
server_rn/broadcast/transport/rtsp/recv/Umakefil

server/admin/web/src/srvprxy/config_broadcast_rtsp_ingest.html.wasm
server/admin/web/build/server/config_broadcast _rtsp_ingest.html \
server/admin/web/build/mserver/config_broadcast _rtsp_ingest.html 

Testing Performed:
================
Unit Tests:
None

Integration Tests:
1. Add configuration like given upstairs 

2. Set camera using none/basic/digest authentication mode

3. using VLS/RealPlayer to play the stream from "/rtspingest/" mountpoint

4. Enable segmentation for "/rtspingest/", using IPad to play the stream

Leak Tests: None
Performance Tests: N/A

Platforms Tested: Windows

Builds Verified: Windows

QA Hints
========
None.



Index: rtspfformat.ver
===================================================================
RCS file: /cvsroot/datatype/rtsp/fileformat/rtspfformat.ver,v
retrieving revision 1.3924
retrieving revision 1.3924.4.1
diff -u -d -r1.3924 -r1.3924.4.1
--- rtspfformat.ver	30 May 2013 10:43:27 -0000	1.3924
+++ rtspfformat.ver	14 Nov 2013 09:51:24 -0000	1.3924.4.1
@@ -2,16 +2,16 @@
  * Copyright (C) 1997-2002 RealNetworks Corporation. All rights reserved.
  */
 #ifdef _MACINTOSH
-#define TARVER_ULONG32_VERSION ((10 << 28) | (0 << 20) | (0 << 12) | 3924)
-#define TARVER_ULONG64_VERSION ((10 << 48) | (0 << 32) | (0 << 16) | 3924)
+#define TARVER_ULONG32_VERSION ((15 << 28) | (1 << 20) | (0 << 12) | 0)
+#define TARVER_ULONG64_VERSION ((15 << 48) | (1 << 32) | (0 << 16) | 0)
 #else
-#define TARVER_ULONG32_VERSION (UINT32)(((UINT32)10 << 28) | ((UINT32)0 << 20) | \
                ((UINT32)0 << 12) | 3924)
-#define TARVER_ULONG64_VERSION (UINT64)(((UINT64)10 << 48) | ((UINT64)0 << 32) | \
((UINT64)0 << 16) | 3924) +#define TARVER_ULONG32_VERSION (UINT32)(((UINT32)15 << 28) \
| ((UINT32)1 << 20) | ((UINT32)0 << 12) | 0) +#define TARVER_ULONG64_VERSION \
(UINT64)(((UINT64)15 << 48) | ((UINT64)1 << 32) | ((UINT64)0 << 16) | 0)  #endif
-#define TARVER_LIST_VERSION 10,0,0,3924
-#define TARVER_MAJOR_VERSION 10
-#define TARVER_MINOR_VERSION 0
+#define TARVER_LIST_VERSION 15,1,0,0
+#define TARVER_MAJOR_VERSION 15
+#define TARVER_MINOR_VERSION 1
 #define TARVER_RELEASE_VERSION 0
-#define TARVER_BUILD_VERSION 3924
-#define TARVER_STRING_VERSION "10.0.0.3924"
+#define TARVER_BUILD_VERSION 0
+#define TARVER_STRING_VERSION "15.1.0.0"
 #define TARVER_STR_BUILD_NAME ""

Index: rtspffpacketqueue.cpp
===================================================================
RCS file: /cvsroot/datatype/rtsp/fileformat/rtspffpacketqueue.cpp,v
retrieving revision 1.5
retrieving revision 1.5.230.1
diff -u -d -r1.5 -r1.5.230.1
--- rtspffpacketqueue.cpp	6 Jul 2007 22:01:36 -0000	1.5
+++ rtspffpacketqueue.cpp	14 Nov 2013 09:51:24 -0000	1.5.230.1
@@ -59,6 +59,7 @@
 #include "rtspffpacketqueue.h"
 #include "hxtlogutil.h"
 #include "pckunpck.h"
+#include "hxthread.h"
 #include "hxtlogutil.h"
 
 
@@ -148,11 +149,12 @@
 
 	m_pMutex = pMutex;
 	HX_ADDREF(m_pMutex);
-
-	if (!m_pMutex)
-	{
-	    retVal = CreateInstanceCCF(CLSID_IHXMutex, (void**) &m_pMutex, m_pContext);
-	}
+#ifndef HELIX_FEATURE_SERVER
+        if (!m_pMutex)
+        {
+            retVal = CreateInstanceCCF(CLSID_IHXMutex, (void**) &m_pMutex, \
m_pContext); +        }
+#endif
     }
 
     return retVal;
@@ -164,7 +166,7 @@
     IHXFormatResponse* pFFResponse = NULL;
     IHXValues* pFileHeader = NULL;
 
-    m_pMutex->Lock();
+    HX_LOCK(m_pMutex);
 
     if (m_FileHeader.IsSet() && m_pFFResponse)
     {
@@ -174,7 +176,7 @@
 	retVal = m_FileHeader.Get(pFileHeader);
     }
 
-    m_pMutex->Unlock();
+    HX_UNLOCK(m_pMutex);
 
     if (SUCCEEDED(retVal))
     {
@@ -196,30 +198,30 @@
     IHXFormatResponse* pFFResponse = NULL;
     IHXValues* pStreamHeader = NULL;
 
-    m_pMutex->Lock();
+    HX_LOCK(m_pMutex);
 
     if (m_pStreams &&
-	(uStreamNumber < m_uNumStreamHeaders) &&
-	m_pFFResponse)
+    (uStreamNumber < m_uNumStreamHeaders) &&
+    m_pFFResponse)
     {
-	if (m_pStreams[uStreamNumber].m_Header.IsSet())
-	{
-	    pFFResponse = m_pFFResponse;
-	    pFFResponse->AddRef();
+        if (m_pStreams[uStreamNumber].m_Header.IsSet())
+        {
+            pFFResponse = m_pFFResponse;
+            pFFResponse->AddRef();
 
-	    retVal = m_pStreams[uStreamNumber].m_Header.Get(pStreamHeader);
-	}
+            retVal = m_pStreams[uStreamNumber].m_Header.Get(pStreamHeader);
+        }
     }
 
-    m_pMutex->Unlock();
+    HX_UNLOCK(m_pMutex);
 
     if (SUCCEEDED(retVal))
     {
-	HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::StreamHeaderReady(status=%ld, Strm=%hd)",
-		retVal,
-		uStreamNumber);
+        HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::StreamHeaderReady(status=%ld, \
Strm=%hd)", +            retVal,
+            uStreamNumber);
 
-	retVal = pFFResponse->StreamHeaderReady(retVal, pStreamHeader);
+        retVal = pFFResponse->StreamHeaderReady(retVal, pStreamHeader);
     }
 
     HX_RELEASE(pStreamHeader);
@@ -231,79 +233,78 @@
 HX_RESULT CRTSPFFPacketQueue::DispatchPacket(UINT16 uStreamNumber)
 {
     HX_RESULT retVal = HXR_UNEXPECTED;
-
     if (m_pStreams &&
-	(uStreamNumber < m_uNumStreamHeaders) &&
-	(!m_pStreams[uStreamNumber].IsStreamDone()))
+    (uStreamNumber < m_uNumStreamHeaders) &&
+    (!m_pStreams[uStreamNumber].IsStreamDone()))
     {
-	UINT32 ulPacketSize = 0;
-	IHXPacket* pPacket = NULL;
+        UINT32 ulPacketSize = 0;
+        IHXPacket* pPacket = NULL;
 
-	retVal = HXR_NO_DATA;
+        retVal = HXR_NO_DATA;
 
-	m_pMutex->Lock();
+        HX_LOCK(m_pMutex);
 
-	ulPacketSize = m_pStreams[uStreamNumber].GetPacket(pPacket);
+        ulPacketSize = m_pStreams[uStreamNumber].GetPacket(pPacket);
 
-	if (pPacket)
-	{
-	    retVal = HXR_OK;
+        if (pPacket)
+        {
+            retVal = HXR_OK;
 
-	    HX_ASSERT(m_ulPacketBytesQueued >= ulPacketSize);
+            HX_ASSERT(m_ulPacketBytesQueued >= ulPacketSize);
 
-	    if (m_ulPacketBytesQueued >= ulPacketSize)
-	    {
-		m_ulPacketBytesQueued -= ulPacketSize;
-	    }
+            if (m_ulPacketBytesQueued >= ulPacketSize)
+            {
+                m_ulPacketBytesQueued -= ulPacketSize;
+            }
 
-	    m_uNextPacketStreamNumber = INV_STREAM_NUM; // We need to re-eval next packet \
stream number +            m_uNextPacketStreamNumber = INV_STREAM_NUM; // We need to \
re-eval next packet stream number  
-	    if ((m_eStatus == RTSPFFPacketQueue_Full) &&
-		(m_ulPacketBytesQueued <= RTSPFF_FULL_TO_NORMAL_QUEUE_BYTES))
-	    {
-		m_eStatus = RTSPFFPacketQueue_Normal;
+            if ((m_eStatus == RTSPFFPacketQueue_Full) &&
+            (m_ulPacketBytesQueued <= RTSPFF_FULL_TO_NORMAL_QUEUE_BYTES))
+            {
+                m_eStatus = RTSPFFPacketQueue_Normal;
 
-		m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus, 
-							     RTSPFFPacketQueue_Full,
-							     uStreamNumber);
-	    }
+                m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus, 
+                                 RTSPFFPacketQueue_Full,
+                                 uStreamNumber);
+            }
 
-	    m_pMutex->Unlock();
+            HX_UNLOCK(m_pMutex);
 
-	    if (m_pFFResponse)
-	    {
-		HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::PacketReady(Strm=%hu Time=%lu) \
                BytesQueued=%ld", 
-		        uStreamNumber,
-			pPacket->GetTime(),
-			m_ulPacketBytesQueued);
+            if (m_pFFResponse)
+            {
+                HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::PacketReady(Strm=%hu \
Time=%lu) BytesQueued=%ld",  +                    uStreamNumber,
+                pPacket->GetTime(),
+                m_ulPacketBytesQueued);
 
-		m_pFFResponse->PacketReady(HXR_OK, pPacket);
-	    }
+                m_pFFResponse->PacketReady(HXR_OK, pPacket);
+            }
 
-	    pPacket->Release();
-	}
-	else
-	{
-	    if (m_bEndOfPackets)
-	    {
-		retVal = HXR_OK;
-		m_pStreams[uStreamNumber].SetStreamDone();
+            pPacket->Release();
+        }
+        else
+        {
+            if (m_bEndOfPackets)
+            {
+                retVal = HXR_OK;
+                m_pStreams[uStreamNumber].SetStreamDone();
 
-		// We need to re-eval next packet stream number
-		m_uNextPacketStreamNumber = INV_STREAM_NUM;
-	    }
-	    
-	    m_pMutex->Unlock();
+                // We need to re-eval next packet stream number
+                m_uNextPacketStreamNumber = INV_STREAM_NUM;
+            }
+        
+            HX_UNLOCK(m_pMutex);
 
-	    if (m_pStreams[uStreamNumber].IsStreamDone() && m_pFFResponse)
-	    {
-		HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::StreamDone(Strm=%hu) BytesQueued=%ld", 
-		        uStreamNumber, 
-			m_ulPacketBytesQueued);
+            if (m_pStreams[uStreamNumber].IsStreamDone() && m_pFFResponse)
+            {
+                HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::StreamDone(Strm=%hu) \
BytesQueued=%ld",  +                    uStreamNumber, 
+                    m_ulPacketBytesQueued);
 
-		m_pFFResponse->StreamDone(uStreamNumber);
-	    }
-	}
+                m_pFFResponse->StreamDone(uStreamNumber);
+            }
+        }
     }
 
     return retVal;
@@ -312,9 +313,9 @@
 HXBOOL CRTSPFFPacketQueue::IsStreamDone(UINT16 uStreamNumber)
 {
     if (m_pStreams &&
-	(uStreamNumber < m_uNumStreamHeaders))
+    (uStreamNumber < m_uNumStreamHeaders))
     {
-	return m_pStreams[uStreamNumber].IsStreamDone();
+        return m_pStreams[uStreamNumber].IsStreamDone();
     }
 
     return FALSE;
@@ -332,59 +333,59 @@
     
     if (uStreamNumber == INV_STREAM_NUM)
     {
-	IHXPacket* pPacket;
-	UINT32 ulStreamTime;
-	UINT16 uStrmIdx;
+        IHXPacket* pPacket;
+        UINT32 ulStreamTime;
+        UINT16 uStrmIdx;
 
-	m_pMutex->Lock();
+        HX_LOCK(m_pMutex);
 
-	for (uStrmIdx = 0; uStrmIdx < m_uNumStreamHeaders; uStrmIdx++)
-	{
-	    if (!m_pStreams[uStrmIdx].IsStreamDone())
-	    {
-		if (m_pStreams[uStrmIdx].IsEmpty())
-		{
-		    if (m_bEndOfPackets)
-		    {
-			uStreamNumber = uStrmIdx;
-			break;
-		    }
-		}
-		else
-		{
-		    pPacket = m_pStreams[uStrmIdx].PeekPacket();
+        for (uStrmIdx = 0; uStrmIdx < m_uNumStreamHeaders; uStrmIdx++)
+        {
+            if (!m_pStreams[uStrmIdx].IsStreamDone())
+            {
+                if (m_pStreams[uStrmIdx].IsEmpty())
+                {
+                    if (m_bEndOfPackets)
+                    {
+                        uStreamNumber = uStrmIdx;
+                        break;
+                    }
+                }
+                else
+                {
+                    pPacket = m_pStreams[uStrmIdx].PeekPacket();
 
-		    if (pPacket)
-		    {
-			if (pPacket->IsLost())
-			{
-			    pPacket->Release();
-			    uStreamNumber = uStrmIdx;
-			    break;
-			}
+                    if (pPacket)
+                    {
+                        if (pPacket->IsLost())
+                        {
+                            pPacket->Release();
+                            uStreamNumber = uStrmIdx;
+                            break;
+                        }
 
-			ulStreamTime = pPacket->GetTime();
+                        ulStreamTime = pPacket->GetTime();
 
-			if (uStreamNumber == INV_STREAM_NUM)
-			{
-			    ulMinStreamTime = ulStreamTime;
-			    uStreamNumber = uStrmIdx;
-			}
-			else if (((LONG32) (ulMinStreamTime - ulStreamTime)) > 0)
-			{
-			    ulMinStreamTime = ulStreamTime;
-			    uStreamNumber = uStrmIdx;
-			}
+                        if (uStreamNumber == INV_STREAM_NUM)
+                        {
+                            ulMinStreamTime = ulStreamTime;
+                            uStreamNumber = uStrmIdx;
+                        }
+                        else if (((LONG32) (ulMinStreamTime - ulStreamTime)) > 0)
+                        {
+                            ulMinStreamTime = ulStreamTime;
+                            uStreamNumber = uStrmIdx;
+                        }
 
-			pPacket->Release();
-		    }
-		}
-	    }
-	}
+                        pPacket->Release();
+                    }
+                }
+            }
+        }
 
-	m_uNextPacketStreamNumber = uStreamNumber;
+        m_uNextPacketStreamNumber = uStreamNumber;
 
-	m_pMutex->Unlock();
+        HX_UNLOCK(m_pMutex);
     }
 
     return uStreamNumber;
@@ -396,12 +397,12 @@
 
     if (m_pMutex)
     {
-	m_pMutex->Lock();
-	bLocked = TRUE;
+        HX_LOCK(m_pMutex);
+        bLocked = TRUE;
     }
 
     HXLOGL3(HXLOG_RTSF, "CRTSPFFPacketQueue::Close() BytesQueued=%ld", 
-	    m_ulPacketBytesQueued);
+            m_ulPacketBytesQueued);
 
     Flush();
 
@@ -415,15 +416,15 @@
 
     if (bLocked)
     {
-	m_pMutex->Unlock();
+        HX_UNLOCK(m_pMutex);
     }
 }
 
 const char* CRTSPFFPacketQueue::StatusToString(RTSPFFPacketQueueStatus eStatus)
 {
     return (((eStatus >= RTSPFFPacketQueue_Normal) && (eStatus <= \
                RTSPFFPacketQueue_Full)) ?
-	    m_zpStatusToStringMap[eStatus] :
-	    "????");
+        m_zpStatusToStringMap[eStatus] :
+        "????");
 }
 
 
@@ -442,46 +443,46 @@
 {
     HX_RESULT retVal = HXR_UNEXPECTED;
 
-    m_pMutex->Lock();
+    HX_LOCK(m_pMutex);
 
     HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::OnFileHeader()");
 
     if (pValues && (!m_FileHeader.IsSet()))
     {
-	UINT32 ulStreamCount = 0;
-	HX_ASSERT(m_uNumStreamHeaders == 0);
+        UINT32 ulStreamCount = 0;
+        HX_ASSERT(m_uNumStreamHeaders == 0);
 
-	pValues->GetPropertyULONG32("StreamCount", ulStreamCount);
-	m_uNumStreamHeaders = (UINT16) ulStreamCount;
+        pValues->GetPropertyULONG32("StreamCount", ulStreamCount);
+        m_uNumStreamHeaders = (UINT16) ulStreamCount;
 
-	retVal = HXR_INVALID_PARAMETER;
-	if (m_uNumStreamHeaders != 0)
-	{
-	    m_FileHeader.Set(pValues);
-	    m_pStreams = new CMediaStream [m_uNumStreamHeaders];
-	    retVal = HXR_OUTOFMEMORY;
-	    if (m_pStreams)
-	    {
-		retVal = HXR_OK;
+        retVal = HXR_INVALID_PARAMETER;
+        if (m_uNumStreamHeaders != 0)
+        {
+            m_FileHeader.Set(pValues);
+            m_pStreams = new CMediaStream [m_uNumStreamHeaders];
+            retVal = HXR_OUTOFMEMORY;
+            if (m_pStreams)
+            {
+                retVal = HXR_OK;
 
-		for (ulStreamCount = 0; 
-		     SUCCEEDED(retVal) && (ulStreamCount < m_uNumStreamHeaders); 
-		     ulStreamCount++)
-		{
-		    retVal = m_pStreams[ulStreamCount].Init(m_pContext);
-		}
+                for (ulStreamCount = 0; 
+                     SUCCEEDED(retVal) && (ulStreamCount < m_uNumStreamHeaders); 
+                     ulStreamCount++)
+                {
+                    retVal = m_pStreams[ulStreamCount].Init(m_pContext);
+                }
 
-		// Indicate to player that we are recording only without rendering
-		// and not acting as super-buffer (time-shifting buffer).
-		if (SUCCEEDED(retVal))
-		{
-		    retVal = HXR_RECORD_NORENDER;
-		}
-	    }
-	}
+                // Indicate to player that we are recording only without rendering
+                // and not acting as super-buffer (time-shifting buffer).
+                if (SUCCEEDED(retVal))
+                {
+                    retVal = HXR_RECORD_NORENDER;
+                }
+            }
+        }
     }
 
-    m_pMutex->Unlock();
+    HX_UNLOCK(m_pMutex);
 
     return retVal;
 }
@@ -498,51 +499,51 @@
     HXBOOL bHeadersReady = FALSE;
     HX_RESULT retVal = HXR_UNEXPECTED;
 
-    m_pMutex->Lock();
+    HX_LOCK(m_pMutex);
 
     if (m_pStreams)
     {
-	UINT32 ulStreamNumber = 0;
+        UINT32 ulStreamNumber = 0;
 
-	retVal = pValues->GetPropertyULONG32("StreamNumber", ulStreamNumber);
+        retVal = pValues->GetPropertyULONG32("StreamNumber", ulStreamNumber);
 
-	if (SUCCEEDED(retVal))
-	{
-	    HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::OnStreamHeader(Strm=%ld)",
-		    ulStreamNumber);
+        if (SUCCEEDED(retVal))
+        {
+            HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::OnStreamHeader(Strm=%ld)",
+                ulStreamNumber);
 
-	    retVal = HXR_INVALID_PARAMETER;
-	    if (ulStreamNumber < m_uNumStreamHeaders)
-	    {
-		retVal = HXR_UNEXPECTED;
-		if (!m_pStreams[ulStreamNumber].m_Header.IsSet())
-		{
-		    retVal = HXR_OK;
-		    m_pStreams[ulStreamNumber].m_Header.Set(pValues);
+            retVal = HXR_INVALID_PARAMETER;
+            if (ulStreamNumber < m_uNumStreamHeaders)
+            {
+                retVal = HXR_UNEXPECTED;
+                if (!m_pStreams[ulStreamNumber].m_Header.IsSet())
+                {
+                    retVal = HXR_OK;
+                    m_pStreams[ulStreamNumber].m_Header.Set(pValues);
 
-		    m_uNumStreamHeadersReceived++;
+                    m_uNumStreamHeadersReceived++;
 
-		    if (m_uNumStreamHeadersReceived == m_uNumStreamHeaders)
-		    {
-			bHeadersReady = TRUE;
-		    }
-		}
-	    }
-	}
+                    if (m_uNumStreamHeadersReceived == m_uNumStreamHeaders)
+                    {
+                        bHeadersReady = TRUE;
+                    }
+                }
+            }
+        }
     }
-	
-    m_pMutex->Unlock();
+
+    HX_UNLOCK(m_pMutex);
 
     if (bHeadersReady)
     {
-	retVal = m_pRTSPFileFormat->OnHeadersReady(retVal);
+        retVal = m_pRTSPFileFormat->OnHeadersReady(retVal);
     }
 
     if (SUCCEEDED(retVal))
     {
-	// Indicate to player that we are recording only without rendering
-	// and not acting as super-buffer (time-shifting buffer).
-	retVal = HXR_RECORD_NORENDER;
+        // Indicate to player that we are recording only without rendering
+        // and not acting as super-buffer (time-shifting buffer).
+        retVal = HXR_RECORD_NORENDER;
     }
 
     return retVal;
@@ -555,76 +556,82 @@
  * Purpose:
  *	   send packets to record source
  */
+UINT32 nQPackCount = 0;
 STDMETHODIMP CRTSPFFPacketQueue::OnPacket(IHXPacket* pPacket, 
-					  INT32 nTimeOffset)
+                                          INT32 nTimeOffset)
 {
     HX_RESULT retVal = HXR_UNEXPECTED;
-
+#ifdef HELIX_FEATURE_SERVER
+    if (m_pFFResponse)
+    {
+        m_pFFResponse->PacketReady(HXR_OK, pPacket);
+    }
+    return HXR_OK;
+#endif
+    
     if (m_pStreams && pPacket)
     {
-	UINT16 uStreamNumber = pPacket->GetStreamNumber();
-
-	retVal = HXR_OK;
-
-	HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::OnPacket(Strm=%hu, Time=%lu, Lost=%c) \
                BytesQueued=%ld", 
-		uStreamNumber,
-		pPacket->GetTime(),
-		pPacket->IsLost() ? 'T' : 'F',
-		m_ulPacketBytesQueued);
-
-	if ((uStreamNumber < m_uNumStreamHeaders) &&
-	    (!m_pStreams[uStreamNumber].IsStreamDone()))
-	{
-	    UINT32 ulPacketSize;
-
-	    retVal = HXR_OK;
+        UINT16 uStreamNumber = pPacket->GetStreamNumber();
 
-	    m_pMutex->Lock();
+        retVal = HXR_OK;
+        IHXBuffer* pBuffer = pPacket->GetBuffer();
+        HXLOGL4(HXLOG_RTSF, "CRTSPFFPacketQueue::OnPacket(Strm=%hu, Time=%lu, \
Lost=%c) BytesQueued=%ld",  +        uStreamNumber,
+        pPacket->GetTime(),
+        pPacket->IsLost() ? 'T' : 'F',
+        m_ulPacketBytesQueued);
+        HX_RELEASE(pBuffer);
+        if ((uStreamNumber < m_uNumStreamHeaders) &&
+            (!m_pStreams[uStreamNumber].IsStreamDone()))
+        {
+            UINT32 ulPacketSize;
 
-	    if (m_ulPacketBytesQueued < RTSPFF_FULL_QUEUE_BYTES_HARDSTOP)
-	    {
-		HXBOOL bWasEmpty;
+            retVal = HXR_OK;
 
-		bWasEmpty = m_pStreams[uStreamNumber].IsEmpty();
-		ulPacketSize = m_pStreams[uStreamNumber].PutPacket(pPacket);
-		m_ulPacketBytesQueued += ulPacketSize;
+            HX_LOCK(m_pMutex);
 
-		if (m_ulPacketBytesQueued >= RTSPFF_FULL_QUEUE_BYTES)
-		{
-		    if (m_eStatus != RTSPFFPacketQueue_Full)
-		    {
-			RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
-			m_eStatus = RTSPFFPacketQueue_Full;
+            if (m_ulPacketBytesQueued < RTSPFF_FULL_QUEUE_BYTES_HARDSTOP)
+            {
+                HXBOOL bWasEmpty;
 
-			m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus, 
-								     ePreviousStatus,
-								     uStreamNumber);
-		    }
-		}
+                bWasEmpty = m_pStreams[uStreamNumber].IsEmpty();
+                ulPacketSize = m_pStreams[uStreamNumber].PutPacket(pPacket);
+                m_ulPacketBytesQueued += ulPacketSize;
 
-		if (bWasEmpty)
-		{
-		    m_uNextPacketStreamNumber = INV_STREAM_NUM;	// We need to re-eval next packet \
                stream number
-		    m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus, 
-								 m_eStatus,
-								 uStreamNumber);
-		}
-	    }
-	    else
-	    {
-		if (m_eStatus != RTSPFFPacketQueue_Full)
-		{
-		    RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
-		    m_eStatus = RTSPFFPacketQueue_Full;
+                if (m_ulPacketBytesQueued >= RTSPFF_FULL_QUEUE_BYTES)
+                {
+                    if (m_eStatus != RTSPFFPacketQueue_Full)
+                    {
+                        RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
+                        m_eStatus = RTSPFFPacketQueue_Full;
+                        m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus, 
+                                     ePreviousStatus,
+                                     uStreamNumber);
+                    }
+                }
 
-		    m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus, 
-								 ePreviousStatus,
-								 uStreamNumber);
-		}
-	    }
+                if (bWasEmpty)
+                {
+                    m_uNextPacketStreamNumber = INV_STREAM_NUM;	// We need to \
re-eval next packet stream number +                    \
m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,  +                            \
m_eStatus, +                                 uStreamNumber);
+                }
+            }
+            else
+            {
+                if (m_eStatus != RTSPFFPacketQueue_Full)
+                {
+                    RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
+                    m_eStatus = RTSPFFPacketQueue_Full;
+                    m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus, 
+                                 ePreviousStatus,
+                                 uStreamNumber);
+                }
+            }
 
-	    m_pMutex->Unlock();
-	}
+            HX_UNLOCK(m_pMutex);
+        }
     }
 
     return retVal;
@@ -642,21 +649,31 @@
     HX_RESULT retVal = HXR_UNEXPECTED;
     HXBOOL bStreamDone = FALSE;
 
-    m_pMutex->Lock();
+    HX_LOCK(m_pMutex);
 
     HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::OnEndOfPackets() BytesQueued=%ld",
-	    m_ulPacketBytesQueued);
+        m_ulPacketBytesQueued);
 
     if (m_pRTSPFileFormat && (!m_bEndOfPackets))
     {
-	m_bEndOfPackets = TRUE;
-
-	m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus, 
-						     m_eStatus,
-						     INV_STREAM_NUM);
+        m_bEndOfPackets = TRUE;
+#ifndef HELIX_FEATURE_SERVER
+        m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus, 
+                                 m_eStatus,
+                                 INV_STREAM_NUM);
+#else
+        for (UINT32 i = 0; i < m_uNumStreamHeaders; i++)
+        {
+            m_pStreams[i].SetStreamDone();
+            if (m_pFFResponse)
+            {
+                m_pFFResponse->StreamDone(i);
+            }
+        }
+#endif
     }
 
-    m_pMutex->Unlock();
+    HX_UNLOCK(m_pMutex);
 
     return retVal;
 }
@@ -675,44 +692,44 @@
 
     if (m_pMutex)
     {
-	m_pMutex->Lock();
-	bLocked = TRUE;
+        HX_LOCK(m_pMutex);
+        bLocked = TRUE;
     }
 
     HXLOGL1(HXLOG_RTSF, "CRTSPFFPacketQueue::Flush() BytesQueued=%ld", 
-	    m_ulPacketBytesQueued);
+        m_ulPacketBytesQueued);
 
     if (m_pStreams)
     {
-	UINT16 uStrmIdx;
+        UINT16 uStrmIdx;
 
-	for (uStrmIdx = 0; 
-	     (uStrmIdx < m_uNumStreamHeaders); 
-	     uStrmIdx++)
-	{
-	    m_pStreams[uStrmIdx].Flush();
-	}
+        for (uStrmIdx = 0; 
+             (uStrmIdx < m_uNumStreamHeaders); 
+             uStrmIdx++)
+        {
+            m_pStreams[uStrmIdx].Flush();
+        }
 
-	m_ulPacketBytesQueued = 0;
-	m_bEndOfPackets = FALSE;
-	m_uNextPacketStreamNumber = INV_STREAM_NUM; // We need to re-eval next packet \
stream number +        m_ulPacketBytesQueued = 0;
+        m_bEndOfPackets = FALSE;
+        m_uNextPacketStreamNumber = INV_STREAM_NUM; // We need to re-eval next \
packet stream number  
-	if (m_eStatus != RTSPFFPacketQueue_Normal)
-	{
-	    RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
-	    m_eStatus = RTSPFFPacketQueue_Normal;
-	    if (m_pRTSPFileFormat)
-	    {
-		m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
-							     ePreviousStatus,
-							     INV_STREAM_NUM);
-	    }
-	}
+        if (m_eStatus != RTSPFFPacketQueue_Normal)
+        {
+            RTSPFFPacketQueueStatus ePreviousStatus = m_eStatus;
+            m_eStatus = RTSPFFPacketQueue_Normal;
+            if (m_pRTSPFileFormat)
+            {
+                m_pRTSPFileFormat->OnPacketQueueStatusNotice(m_eStatus,
+                                         ePreviousStatus,
+                                         INV_STREAM_NUM);
+            }
+        }
     }
 
     if (bLocked)
     {
-	m_pMutex->Unlock();
+        HX_UNLOCK(m_pMutex);
     }
 
     return retVal;
@@ -853,9 +870,9 @@
 
     while (!m_pPacketQueue->IsEmpty())
     {
-	pDeadItem = m_pPacketQueue->RemoveHead();
+        pDeadItem = m_pPacketQueue->RemoveHead();
 
-	HX_RELEASE(pDeadItem);
+        HX_RELEASE(pDeadItem);
     }
 
     m_bStreamDone = FALSE;

Index: rtspfformat.cpp
===================================================================
RCS file: /cvsroot/datatype/rtsp/fileformat/rtspfformat.cpp,v
retrieving revision 1.6
retrieving revision 1.6.40.1
diff -u -d -r1.6 -r1.6.40.1
--- rtspfformat.cpp	3 May 2011 01:08:26 -0000	1.6
+++ rtspfformat.cpp	14 Nov 2013 09:51:24 -0000	1.6.40.1
@@ -70,7 +70,7 @@
 #include "pckunpck.h"
 #include "hxtlogutil.h"
 #include "hxver.h"
-
+#include "hxthread.h"
 #include "hlxclib/string.h"
 #include "pckunpck.h"
 
@@ -170,6 +170,7 @@
     , m_pMutex(NULL)
     , m_eState(RTSPFF_Offline)
[...1146 lines suppressed...]
-	    retVal = m_pClientStateAdviseSinkControl->AddClientStateAdviseSink(
-		(IHXClientStateAdviseSink*) this);
-	}
+        if (SUCCEEDED(retVal))
+        {
+            retVal = m_pClientStateAdviseSinkControl->AddClientStateAdviseSink(
+                (IHXClientStateAdviseSink*) this);
+        }
 
-	if (FAILED(retVal))
-	{
-	    HX_RELEASE(m_pClientStateAdviseSinkControl);
-	}
+        if (FAILED(retVal))
+        {
+            HX_RELEASE(m_pClientStateAdviseSinkControl);
+        }
     }
 
     return retVal;


_______________________________________________
Datatype-cvs mailing list
Datatype-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/datatype-cvs


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

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