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

List:       helix-datatype-cvs
Subject:    [Datatype-cvs] qcelp/fileformat qcpplin.cpp,1.1,1.1.4.1
From:       umakantg () helixcommunity ! org
Date:       2009-07-31 17:38:26
Message-ID: 200907311846.n6VIk6PO019015 () mailer ! progressive-comp ! com
[Download RAW message or body]

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

Modified Files:
      Tag: ospreygold
	qcpplin.cpp 
Log Message:
Modifications to fix the seeking problem CR: ehyche@real.com



Index: qcpplin.cpp
===================================================================
RCS file: /cvsroot/datatype/qcelp/fileformat/qcpplin.cpp,v
retrieving revision 1.1
retrieving revision 1.1.4.1
diff -u -d -r1.1 -r1.1.4.1
--- qcpplin.cpp	28 Jul 2009 21:23:19 -0000	1.1
+++ qcpplin.cpp	31 Jul 2009 17:38:24 -0000	1.1.4.1
@@ -136,19 +136,21 @@
     m_bHeaderSent(FALSE),
     m_ulPacketSize(0),
     m_ulAvgBitRate(0),
-        m_ulBlockSize(0),
-        m_ulSamplingRate(0),
-        m_ulSampleSize(0),
+    m_ulBlockSize(0),
+    m_ulSamplingRate(0),
+    m_ulSampleSize(0),
     m_ulDuration(0),
     m_ulBytesSent(0),
     m_ulLastPacketEndTime(0),
     m_state(AS_Ready),
-        m_pFormatBuffer(NULL),
-        m_ulRateOctet(0),
-        m_ulNumOfRates(0),
-        m_pRateMapTable(NULL),
-        m_pOpaqueData(NULL),
-        m_Codec(Codec_NULL)
+    m_pFormatBuffer(NULL),
+    m_ulRateOctet(0),
+    m_ulNumOfRates(0),
+    m_pRateMapTable(NULL),
+    m_pOpaqueData(NULL),
+    m_Codec(Codec_NULL),
+    m_ulVariableSeekOffset(0),
+    m_ulSizeInPackets(0)
 {
 }
 
@@ -408,19 +410,6 @@
     return HXR_OK;
 }
 
-STDMETHODIMP
-QCPFileFormat::GetStatus(REF(UINT16) uStatusCode,
-              REF(IHXBuffer*)pStatusDesc,
-              REF(UINT16) ulPercentDone)
-{
-    HX_RESULT hResult = HXR_OK;
-    uStatusCode = HX_STATUS_READY;
-    pStatusDesc = NULL;
-    ulPercentDone = 0;
-
-    return hResult;
-}
-
 // CRIFFResponse methods
 STDMETHODIMP
 QCPFileFormat::RIFFOpenDone(HX_RESULT status)
@@ -471,7 +460,7 @@
     IHXValues* pHeader = NULL;
     IHXBuffer* pMimeType = NULL;
     IHXBuffer* pOpaqueData = NULL;
-
+    UINT32 tempOffset = 0;
     switch(m_state)
     {
     case AS_FindRIFFChunkPending:
@@ -656,19 +645,38 @@
         break;
 
     case AS_SeekFindChunkPending:
-         m_state = AS_SeekPending;
-        // Bitrate is always divisible by 8
+         
+       
+         // Bitrate is always divisible by 8
         ulByteRate     = m_ulAvgBitRate >> 3;
         m_ulBytesSent  = (ulByteRate / 1000) * m_ulSeekOffset;
         m_ulBytesSent += (ulByteRate % 1000) * m_ulSeekOffset / 1000;
-	    //We don't want to start on an odd byte or we end up with
-	    // distorted sound:
-	    if(m_ulBytesSent & 0x1)
-	    {
-		m_ulBytesSent++;
-	    }
-	    m_pRiffReader->Seek(m_ulBytesSent, TRUE);
-	    break;
+	//We don't want to start on an odd byte or we end up with
+	// distorted sound:
+	if(m_ulBytesSent & 0x1)
+	{
+	    m_ulBytesSent++;
+	}
+	
+        tempOffset = 0;
+        m_ulSizeInPackets = 0;
+        if(m_ulVarRateFlag == 0)
+        {
+            //if fixed size data
+            UINT32 packetsSent = m_ulBytesSent/m_ulPacketSize;
+            tempOffset = (packetsSent+1) * m_ulPacketSize;
+            m_ulSizeInPackets += packetsSent+1;
+            m_state = AS_SeekPending;
+            m_pRiffReader->Seek(tempOffset, TRUE);
+        }
+        else
+        {
+            m_state = AS_SeekForVarPending;
+            m_pRiffReader->Read(1);
+        }
+
+        
+     	break;
         
     default:
         m_state = AS_Ready;
@@ -702,14 +710,14 @@
 STDMETHODIMP
 QCPFileFormat::RIFFReadDone(HX_RESULT status, IHXBuffer* pBuffer)
 {
-    UCHAR* buf;
+    UCHAR* buf = NULL;
     UINT32 len;
     IHXRTPPacket* pPacket;
     UINT32 uiDCLen = 0;
     UINT32 totalsize = 0;
     UCHAR* pOrigPos = NULL; 
     UINT32 k=0;
-    
+
     if(status == HXR_OK && pBuffer!=NULL)
     {
         pBuffer->Get(buf, len);
@@ -952,6 +960,24 @@
             return HXR_OK;
         }
 
+        if(buf)
+        {
+            for(k=0;k<m_ulNumOfRates;k++)
+            {
+                if( (UINT16)buf[0] == m_pRateMapTable[k][1] )
+                {
+                    m_ulPacketSize = (UINT32)m_pRateMapTable[k][0];
+                    break;
+                }
+            }
+        }
+
+        m_state = AS_SeekToVarPkt;
+        m_pRiffReader->Seek(-1,TRUE);
+        break;
+    
+    case AS_SeekForVarPending:
+
         for(k=0;k<m_ulNumOfRates;k++)
         {
             if( (UINT16)buf[0] == m_pRateMapTable[k][1] )
@@ -960,11 +986,12 @@
                 break;
             }
         }
-        
-        m_state = AS_SeekToVarPkt;
-        m_pRiffReader->Seek(-1,TRUE);
+        m_ulVariableSeekOffset += (m_ulPacketSize + 1);
+        m_ulSizeInPackets++;
+        m_state = (m_ulVariableSeekOffset > m_ulBytesSent ? AS_SeekPending : AS_StillSeekingForVar);
+        m_pRiffReader->Seek(m_ulVariableSeekOffset, FALSE);
         break;
-    
+
     default:
         m_state = AS_Ready;
         return HXR_UNEXPECTED;
@@ -981,6 +1008,7 @@
         {
         case AS_SeekPending:
             m_state = AS_Ready;
+            m_ulVariableSeekOffset = 0;
             m_pFFResponse->SeekDone(HXR_OK);
             return HXR_OK;
             break;
@@ -990,6 +1018,11 @@
             m_ulPacketSize += 1;
             m_pRiffReader->Read(m_ulPacketSize);
             break;
+
+        case AS_StillSeekingForVar:
+            m_state = AS_SeekForVarPending;
+            m_pRiffReader->Read(1);
+            break;
         default: 
             m_state = AS_Ready;
             return HXR_UNEXPECTED;


_______________________________________________
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