[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