[Common-dev] CR-Client: Add client preroll fixup code to SDP parser

[Common-dev] CR-Client: Add client preroll fixup code to SDP parser

Aaron Colwell acolwell at real.com
Tue Aug 10 11:07:09 PDT 2004


The idea was that I don't want to replace Preroll with a 0 value. I don't 
believe that ActualPreroll will ever be 0 and I don't think that valid
Annex G headers can be 0 either. 

Aaron

On Tue, Aug 10, 2004 at 01:47:40PM -0400, Eric Hyche wrote:
> 
> >+        if (ulPreroll)
> >+        {
> >+            pHeader->SetPropertyULONG32("Preroll", ulPreroll);
> >+        }
> 
> Is a preroll of 0 not a valid value?
> 
> Rest looks good.
> 
> Eric
> 
> At 11:58 AM 8/9/2004 -0700, Aaron Colwell wrote:
> >Synopsis: Add client preroll fixup to SDP parser
> >
> >Overview: These changes adjust the Preroll based on fields that provide
> >          more accurate preroll information. If the ActualPreroll field
> >          is present, them the Preroll value is replaced with that value.
> >          If the 3GPP Annex G x-initpredecbufperiod header is present,
> >          then the preroll value is replaced with the value from the sum 
> >of the
> >          x-initpredecbufperiod and x-initpostdecbufperiod headers.
> >          x-initpostdecbufperiod defaults to 0 if it isn't present. These
> >          operations only occur when the client is using the SDP plugin.
> >
> >          I updated the unit test to verify this functionality. Since I 
> >needed
> >          to create a context that supported IHXClientEngine, I decided 
> >to move
> >          a context class I created for another unit test into common/util 
> >          so
> >          that it could be used by multiple unit tests. I renamed the
> >          CHXTestContext used by
> >          protocol/common/util/test/altgrpselect_test.cpp to 
> >CHXListContext and
> >          moved its code to common/util. This is a very simple class that
> >          allows you to create contexts by adding various IUnknown objects 
> >          to
> >          the CHXListContext object. In this particular case I am adding a
> >          common class factory and an object that implements 
> >          IHXClientEngine.
> >          Minor changes were made to the Alt-Group unit test to deal with 
> >          the
> >          classes new name and location.
> >
> >Files Modified:
> >protocol/sdp/sdpmdparse.cpp
> >protocol/sdp/pub/sdpmdparse.h
> >protocol/sdp/test/gensdptest.cpp
> >protocol/sdp/test/sdpparse_test.cpp
> >protocol/sdp/test/sdpparse_test.h
> >protocol/sdp/test/tsdpparse
> >protocol/sdp/test/tsdpparse.cpp
> >protocol/sdp/test/tsdpparse.in
> >protocol/common/util/test/altgrpselect_test.cpp
> >protocol/common/util/test/taltgrpselect
> >protocol/common/util/test/taltgrpselect.cpp
> >common/util/Umakefil
> >
> >Files Added:
> >common/util/chxlistctx.cpp
> >common/util/pub/chxlistctx.h
> >protocol/sdp/test/testclnteng.cpp
> >protocol/sdp/test/testclnteng.h
> >
> >
> >Files Removed:
> >protocol/common/util/test/testctx.cpp
> >protocol/common/util/test/testctx.h
> >
> >
> >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
> >
> >
> >===================================================================
> >RCS file: /cvsroot/protocol/sdp/sdpmdparse.cpp,v
> >retrieving revision 1.22
> >diff -u -r1.22 sdpmdparse.cpp
> >--- sdpmdparse.cpp      6 Aug 2004 17:09:48 -0000       1.22
> >+++ sdpmdparse.cpp      9 Aug 2004 18:39:43 -0000
> >@@ -59,6 +59,7 @@
> > #include "chxcharstack.h"
> > #include "chxpckts.h"
> > #include "netbyte.h"
> >+#include "hxcore.h"
> >
> > class SDPParseState
> > {
> >@@ -234,6 +235,35 @@
> >         }
> >     }
> >
> >+    if (IsClient())
> >+    {
> >+        // If we are being used by the client we should try to override
> >+        // the Preroll field with a value that is likely more accurate
> >+        ULONG32 ulPreroll = 0;
> >+
> >+        pHeader->GetPropertyULONG32("Preroll", ulPreroll);
> >+        if (HXR_OK == pHeader->GetPropertyULONG32("ActualPreroll", ulTmp))
> >+        {
> >+            // Replace Preroll with ActualPreroll
> >+            ulPreroll = ulTmp;
> >+        }
> >+        else if (HXR_OK == 
> >pHeader->GetPropertyULONG32("x-initpredecbufperiod",
> >+                                                       ulTmp))
> >+        {
> >+            // Replace Preroll with the Annex G headers
> >+
> >+            ULONG32 ulPostDec = 0;
> >+            pHeader->GetPropertyULONG32("x-initpostdecbufperiod", 
> >ulPostDec);
> >+
> >+            ulPreroll = (ulTmp  + ulPostDec) / 90;
> >+        }
> >+
> >+        if (ulPreroll)
> >+        {
> >+            pHeader->SetPropertyULONG32("Preroll", ulPreroll);
> >+        }
> >+    }
> >+
> >     HX_RELEASE(pBuf);
> > }
> >
> >@@ -1983,6 +2013,24 @@
> >             bRet = (('0' <= *pStart) && (*pStart <= '9'));
> >         }
> >     }
> >+
> >+    return bRet;
> >+}
> >+
> >+BOOL SDPMediaDescParser::IsClient()
> >+{
> >+    BOOL bRet = FALSE;
> >+
> >+    IHXClientEngine* pEngine = NULL;
> >+
> >+    if (m_pContext &&
> >+        (HXR_OK == m_pContext->QueryInterface(IID_IHXClientEngine,
> >+                                              (void**)&pEngine)))
> >+    {
> >+        bRet = TRUE;
> >+    }
> >+
> >+    HX_RELEASE(pEngine);
> >
> >     return bRet;
> > }
> >Index: pub/sdpmdparse.h
> >===================================================================
> >RCS file: /cvsroot/protocol/sdp/pub/sdpmdparse.h,v
> >retrieving revision 1.6
> >diff -u -r1.6 sdpmdparse.h
> >--- pub/sdpmdparse.h    21 Jul 2004 19:54:16 -0000      1.6
> >+++ pub/sdpmdparse.h    9 Aug 2004 18:39:43 -0000
> >@@ -150,6 +150,7 @@
> >
> >     BOOL IsToken(const char* pStart, const char* pEnd) const;
> >     BOOL IsAltID(const char* pStart, const char* pEnd) const;
> >+    BOOL IsClient();
> >
> >     IUnknown* m_pContext;
> >     IHXCommonClassFactory* m_pCCF;
> >Index: test/gensdptest.cpp
> >===================================================================
> >RCS file: /cvsroot/protocol/sdp/test/gensdptest.cpp,v
> >retrieving revision 1.3
> >diff -u -r1.3 gensdptest.cpp
> >--- test/gensdptest.cpp 21 Jul 2004 19:53:18 -0000      1.3
> >+++ test/gensdptest.cpp 9 Aug 2004 18:39:43 -0000
> >@@ -54,6 +54,7 @@
> > #include "chxminiccf.h"
> > #include "ihxpckts.h"
> > #include "sdpmdparse.h"
> >+#include "hxcore.h"
> > #include "hxpiids.h"
> >
> > IHXBuffer* ReadSDPFile(IHXCommonClassFactory* pCCF, const char* pFilename)
> >Index: test/sdpparse_test.cpp
> >===================================================================
> >RCS file: /cvsroot/protocol/sdp/test/sdpparse_test.cpp,v
> >retrieving revision 1.5
> >diff -u -r1.5 sdpparse_test.cpp
> >--- test/sdpparse_test.cpp      21 Jul 2004 19:53:18 -0000      1.5
> >+++ test/sdpparse_test.cpp      9 Aug 2004 18:39:43 -0000
> >@@ -53,6 +53,8 @@
> > #include "ut_param_util.h"
> >
> > #include "chxminiccf.h"
> >+#include "testclnteng.h"
> >+#include "chxlistctx.h"
> >
> > SDPMediaDescParserTest::SDPMediaDescParserTest() :
> >     m_pContext(0),
> >@@ -64,8 +66,8 @@
> >     m_pList(0),
> >     m_pListItr(0)
> > {
> >-    m_pContext = new CHXMiniCCF();
> >-
> >+    createContext(FALSE);
> >+
> >     if (m_pContext)
> >     {
> >        m_pContext->AddRef();
> >@@ -112,6 +114,12 @@
> >                                                           "Parse",
> >
> >&SDPMediaDescParserTest::HandleParseCmd,
> >                                                           4);
> >+    cmds.Resize(index + 1);
> >+    cmds[index++] =
> >+       new HLXUnitTestCmdInfoDisp<SDPMediaDescParserTest>(this,
> >+                                                          
> >"SetClientContext",
> >+ 
> >&SDPMediaDescParserTest::HandleSetClientContextCmd,
> >+                                                          2);
> >
> >     cmds.Resize(index + 1);
> >     cmds[index++] =
> >@@ -278,6 +286,33 @@
> >     return ret;
> > }
> >
> >+bool SDPMediaDescParserTest::HandleSetClientContextCmd(const 
> >UTVector<UTString>& info)
> >+{
> >+    bool ret = false;
> >+    bool bVal = false;
> >+
> >+    if (!UTParamUtil::GetBool(info[1], bVal))
> >+    {
> >+       DPRINTF(D_ERROR, 
> >("SDPMediaDescParserTest::HandleSetClientContextCmd : failed to convert 
> >parameter\n"));
> >+    }
> >+    else
> >+    {
> >+        HX_RESULT res = createContext(bVal);
> >+
> >+        if (HXR_OK != res)
> >+        {
> >+            DPRINTF(D_ERROR, 
> >("SDPMediaDescParserTest::HandleSetClientContextCmd : createContext() 
> >failed %08x\n", res));
> >+        }
> >+        else
> >+        {
> >+            ret = true;
> >+        }
> >+    }
> >+
> >+
> >+    return ret;
> >+}
> >+
> > bool SDPMediaDescParserTest::GetHXResult(const char* pStr,
> >                                        HX_RESULT& res) const
> > {
> >@@ -1181,6 +1216,79 @@
> >
> >         HX_RELEASE(pHdr2);
> >     }
> >+
> >+    return res;
> >+}
> >+
> >+HX_RESULT
> >+SDPMediaDescParserTest::addCCF(CHXListContext* pContext)
> >+{
> >+    HX_RESULT res = HXR_INVALID_PARAMETER;
> >+
> >+    if (pContext)
> >+    {
> >+        IUnknown* pCCF = new CHXMiniCCF();
> >+
> >+        if (pCCF)
> >+        {
> >+            pCCF->AddRef();
> >+
> >+            res = pContext->AddIUnknown(pCCF);
> >+        }
> >+        HX_RELEASE(pCCF);
> >+    }
> >+
> >+    return res;
> >+}
> >+
> >+HX_RESULT
> >+SDPMediaDescParserTest::addClientEngine(CHXListContext* pContext)
> >+{
> >+    HX_RESULT res = HXR_INVALID_PARAMETER;
> >+
> >+    if (pContext)
> >+    {
> >+        IUnknown* pEngine = new CHXSDPTestClientEngine;
> >+
> >+        if (pEngine)
> >+        {
> >+            pEngine->AddRef();
> >+
> >+            res = pContext->AddIUnknown(pEngine);
> >+        }
> >+        HX_RELEASE(pEngine);
> >+    }
> >+
> >+    return res;
> >+}
> >+
> >+HX_RESULT
> >+SDPMediaDescParserTest::createContext(BOOL bIsClient)
> >+{
> >+    HX_RESULT res = HXR_OUTOFMEMORY;
> >+
> >+    HX_RELEASE(m_pContext);
> >+
> >+    CHXListContext* pContext = new CHXListContext;
> >+
> >+    if (pContext)
> >+    {
> >+        pContext->AddRef();
> >+
> >+        res = addCCF(pContext);
> >+
> >+        if ((HXR_OK == res) && bIsClient)
> >+        {
> >+            res = addClientEngine(pContext);
> >+        }
> >+
> >+        if (HXR_OK == res)
> >+        {
> >+            m_pContext = pContext;
> >+            m_pContext->AddRef();
> >+        }
> >+    }
> >+    HX_RELEASE(pContext);
> >
> >     return res;
> > }
> >Index: test/sdpparse_test.h
> >===================================================================
> >RCS file: /cvsroot/protocol/sdp/test/sdpparse_test.h,v
> >retrieving revision 1.3
> >diff -u -r1.3 sdpparse_test.h
> >--- test/sdpparse_test.h        21 Jul 2004 19:53:18 -0000      1.3
> >+++ test/sdpparse_test.h        9 Aug 2004 18:39:43 -0000
> >@@ -55,6 +55,8 @@
> > #include "sdpmdparse.h"
> > #include "ihxlist.h"
> >
> >+class CHXListContext;
> >+
> > class SDPMediaDescParserTest : public HLXCmdBasedTest
> > {
> > public:
> >@@ -68,6 +70,7 @@
> > protected:
> >     bool HandleInitCmd(const UTVector<UTString>& info);
> >     bool HandleParseCmd(const UTVector<UTString>& info);
> >+    bool HandleSetClientContextCmd(const UTVector<UTString>& info);
> >
> >     bool HandleIntCountCmd(const UTVector<UTString>& info);
> >     bool HandleStringCountCmd(const UTVector<UTString>& info);
> >@@ -99,6 +102,11 @@
> >
> >     HX_RESULT getIHXValuesProp(IHXValues* pHdr, const char* pKey,
> >                                REF(IHXValues*) pValue) const;
> >+
> >+    HX_RESULT addCCF(CHXListContext* pContext);
> >+    HX_RESULT addClientEngine(CHXListContext* pContext);
> >+    HX_RESULT createContext(BOOL bIsClient);
> >+
> >     IUnknown* m_pContext;
> >     IHXCommonClassFactory* m_pCCF;
> >     SDPMediaDescParser* m_pParser;
> >Index: test/tsdpparse
> >===================================================================
> >RCS file: /cvsroot/protocol/sdp/test/tsdpparse,v
> >retrieving revision 1.2
> >diff -u -r1.2 tsdpparse
> >--- test/tsdpparse      9 Jul 2004 18:41:45 -0000       1.2
> >+++ test/tsdpparse      9 Aug 2004 18:39:43 -0000
> >@@ -67,6 +67,6 @@
> >                           'common/system/pub',
> >                           'protocol/sdp/pub')
> >
> >-project.AddSources('tsdpparse.cpp', 'sdpparse_test.cpp')
> >+project.AddSources('tsdpparse.cpp', 'sdpparse_test.cpp', 
> >'testclnteng.cpp')
> >
> > ProgramTarget('tsdpparse')
> >Index: test/tsdpparse.cpp
> >===================================================================
> >RCS file: /cvsroot/protocol/sdp/test/tsdpparse.cpp,v
> >retrieving revision 1.3
> >diff -u -r1.3 tsdpparse.cpp
> >--- test/tsdpparse.cpp  21 Jul 2004 19:53:18 -0000      1.3
> >+++ test/tsdpparse.cpp  9 Aug 2004 18:39:43 -0000
> >@@ -53,6 +53,7 @@
> > #include "hx_cmd_parser.h"
> > #include "./sdpparse_test.h"
> >
> >+#include "hxcore.h"
> > #include "hxpiids.h"
> >
> > HLXUnitTest* BuildTest()
> >Index: test/tsdpparse.in
> >===================================================================
> >RCS file: /cvsroot/protocol/sdp/test/tsdpparse.in,v
> >retrieving revision 1.9
> >diff -u -r1.9 tsdpparse.in
> >--- test/tsdpparse.in   6 Aug 2004 17:09:48 -0000       1.9
> >+++ test/tsdpparse.in   9 Aug 2004 18:39:43 -0000
> >@@ -7,6 +7,9 @@
> > # GetString <value index> <field name> <expected value>
> > # GetBuffer <value index> <field name> <expected value>
> >
> >+# Start testing with a Server context
> >+SetClientContext 0
> >+
> > Init 123456
> > Parse 0x00000000 1 ""
> > IntCount 0 0
> >@@ -1685,3 +1688,109 @@
> > ListItrBegin
> > ListItrGetBuffer "0000000100000003"
> > ListItrNext 0
> >+
> >+# Test Preroll override cases
> >+# (ActualPreroll field present & running on the Server)
> >+SetClientContext 0
> >+Init 123456
> >+Parse 0x00000000 2 "v=0\r\nm=video 42 RTP/AVP 
> >34\r\na=Preroll:integer;7000\r\na=ActualPreroll:integer;2500"
> >+IntCount 0 2
> >+GetInt 0 LiveStream 1
> >+GetInt 0 StreamCount 1
> >+StringCount 0 0
> >+BufferCount 0 0
> >+IntCount 1 10
> >+GetInt 1 AvgBitRate 0
> >+GetInt 1 Channels 0
> >+GetInt 1 HXTimestampConversionFactor 1
> >+GetInt 1 Port 42
> >+GetInt 1 RTPPayloadType 34
> >+GetInt 1 RTPTimestampConversionFactor 90
> >+GetInt 1 SamplesPerSecond 90000
> >+GetInt 1 StreamNumber 0
> >+GetInt 1 Preroll 7000
> >+GetInt 1 ActualPreroll 2500
> >+StringCount 1 2
> >+GetString 1 ASMRuleBook 
> >"marker=0,timestampdelivery=1;marker=1,timestampdelivery=1;"
> >+GetString 1 MimeType "video/H263"
> >+BufferCount 1 0
> >+
> >+# Test Preroll override cases
> >+# (ActualPreroll field present & running on the Client)
> >+SetClientContext 1
> >+Init 123456
> >+Parse 0x00000000 2 "v=0\r\nm=video 42 RTP/AVP 
> >34\r\na=Preroll:integer;7000\r\na=ActualPreroll:integer;2500"
> >+IntCount 0 2
> >+GetInt 0 LiveStream 1
> >+GetInt 0 StreamCount 1
> >+StringCount 0 0
> >+BufferCount 0 0
> >+IntCount 1 10
> >+GetInt 1 AvgBitRate 0
> >+GetInt 1 Channels 0
> >+GetInt 1 HXTimestampConversionFactor 1
> >+GetInt 1 Port 42
> >+GetInt 1 RTPPayloadType 34
> >+GetInt 1 RTPTimestampConversionFactor 90
> >+GetInt 1 SamplesPerSecond 90000
> >+GetInt 1 StreamNumber 0
> >+GetInt 1 Preroll 2500
> >+GetInt 1 ActualPreroll 2500
> >+StringCount 1 2
> >+GetString 1 ASMRuleBook 
> >"marker=0,timestampdelivery=1;marker=1,timestampdelivery=1;"
> >+GetString 1 MimeType "video/H263"
> >+BufferCount 1 0
> >+
> >+# Test Preroll override cases
> >+# (x-initpredecbufperiod field present & running on the Server)
> >+SetClientContext 0
> >+Init 123456
> >+Parse 0x00000000 2 "v=0\r\nm=video 42 RTP/AVP 
> >34\r\na=Preroll:integer;7000\r\na=x-initpredecbufperiod:45000"
> >+IntCount 0 2
> >+GetInt 0 LiveStream 1
> >+GetInt 0 StreamCount 1
> >+StringCount 0 0
> >+BufferCount 0 0
> >+IntCount 1 11
> >+GetInt 1 AvgBitRate 0
> >+GetInt 1 Channels 0
> >+GetInt 1 HXTimestampConversionFactor 1
> >+GetInt 1 Port 42
> >+GetInt 1 RTPPayloadType 34
> >+GetInt 1 RTPTimestampConversionFactor 90
> >+GetInt 1 SamplesPerSecond 90000
> >+GetInt 1 StreamNumber 0
> >+GetInt 1 Preroll 7000
> >+GetInt 1 x-initpredecbufperiod 45000
> >+GetInt 1 x-predecbufsize 51200
> >+StringCount 1 2
> >+GetString 1 ASMRuleBook 
> >"marker=0,timestampdelivery=1;marker=1,timestampdelivery=1;"
> >+GetString 1 MimeType "video/H263"
> >+BufferCount 1 0
> >+
> >+# Test Preroll override cases
> >+# (x-initpredecbufperiod field present & running on the Client)
> >+SetClientContext 1
> >+Init 123456
> >+Parse 0x00000000 2 "v=0\r\nm=video 42 RTP/AVP 
> >34\r\na=Preroll:integer;7000\r\na=x-initpredecbufperiod:45000"
> >+IntCount 0 2
> >+GetInt 0 LiveStream 1
> >+GetInt 0 StreamCount 1
> >+StringCount 0 0
> >+BufferCount 0 0
> >+IntCount 1 11
> >+GetInt 1 AvgBitRate 0
> >+GetInt 1 Channels 0
> >+GetInt 1 HXTimestampConversionFactor 1
> >+GetInt 1 Port 42
> >+GetInt 1 RTPPayloadType 34
> >+GetInt 1 RTPTimestampConversionFactor 90
> >+GetInt 1 SamplesPerSecond 90000
> >+GetInt 1 StreamNumber 0
> >+GetInt 1 Preroll 500
> >+GetInt 1 x-initpredecbufperiod 45000
> >+GetInt 1 x-predecbufsize 51200
> >+StringCount 1 2
> >+GetString 1 ASMRuleBook 
> >"marker=0,timestampdelivery=1;marker=1,timestampdelivery=1;"
> >+GetString 1 MimeType "video/H263"
> >+BufferCount 1 0
> >
> >
> >Index: test/altgrpselect_test.cpp
> >===================================================================
> >RCS file: /cvsroot/protocol/common/util/test/altgrpselect_test.cpp,v
> >retrieving revision 1.2
> >diff -u -r1.2 altgrpselect_test.cpp
> >--- test/altgrpselect_test.cpp  4 Aug 2004 16:45:30 -0000       1.2
> >+++ test/altgrpselect_test.cpp  9 Aug 2004 18:39:55 -0000
> >@@ -53,7 +53,7 @@
> > #include "ut_param_util.h"
> >
> > #include "chxminiccf.h"
> >-#include "testctx.h"
> >+#include "chxlistctx.h"
> >
> > #include "maxbwaltfilt.h"
> > #include "highbwaltfilt.h"
> >@@ -70,7 +70,7 @@
> >     m_pList(0),
> >     m_pListItr(0)
> > {
> >-    CHXTestContext* pContext = new CHXTestContext;
> >+    CHXListContext* pContext = new CHXListContext;
> >
> >     if (pContext)
> >     {
> >Index: test/taltgrpselect
> >===================================================================
> >RCS file: /cvsroot/protocol/common/util/test/taltgrpselect,v
> >retrieving revision 1.2
> >diff -u -r1.2 taltgrpselect
> >--- test/taltgrpselect  4 Aug 2004 16:45:30 -0000       1.2
> >+++ test/taltgrpselect  9 Aug 2004 18:39:55 -0000
> >@@ -68,6 +68,6 @@
> >                           'protocol/sdp/pub')
> >
> > project.AddSources('taltgrpselect.cpp', 'altgrpselect_test.cpp',
> >-                   'alttesthlpr.cpp', 'testctx.cpp', 'testplgnhdlr.cpp')
> >+                   'alttesthlpr.cpp', 'testplgnhdlr.cpp')
> >
> > ProgramTarget('taltgrpselect')
> >Index: test/taltgrpselect.cpp
> >===================================================================
> >RCS file: /cvsroot/protocol/common/util/test/taltgrpselect.cpp,v
> >retrieving revision 1.1
> >diff -u -r1.1 taltgrpselect.cpp
> >--- test/taltgrpselect.cpp      29 Jul 2004 00:27:20 -0000      1.1
> >+++ test/taltgrpselect.cpp      9 Aug 2004 18:39:55 -0000
> >@@ -53,6 +53,7 @@
> > #include "hx_cmd_parser.h"
> > #include "./altgrpselect_test.h"
> >
> >+#include "hxcore.h"
> > #include "hxpiids.h"
> >
> > HLXUnitTest* BuildTest()
> >
> >Index: Umakefil
> >===================================================================
> >RCS file: /cvsroot/common/util/Umakefil,v
> >retrieving revision 1.27
> >diff -u -r1.27 Umakefil
> >--- Umakefil    5 Aug 2004 13:22:47 -0000       1.27
> >+++ Umakefil    9 Aug 2004 18:40:11 -0000
> >@@ -130,6 +130,7 @@
> >                    "hxsrcbufstats.cpp",
> >                    "hxval2util.cpp",
> >                    "clone_values.cpp",
> >+                   "chxlistctx.cpp",
> >                    "smoothtime.cpp")
> >
> >
> >
> >
> >
> >
> >_______________________________________________
> >Common-dev mailing list
> >Common-dev at lists.helixcommunity.org
> >http://lists.helixcommunity.org/mailman/listinfo/common-dev
> 
> ======================================
> M. Eric Hyche (ehyche at real.com)
> Core Technologies
> RealNetworks, Inc.
> 
> 



More information about the Common-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.