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

List:       helix-datatype-cvs
Subject:    [Datatype-cvs] mp3/fileformat mp3ff.cpp,1.58.2.20,1.58.2.21
From:       xzhao () helixcommunity ! org
Date:       2012-02-22 7:27:08
[Download RAW message or body]

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

Modified Files:
      Tag: hxclient_3_1_0_atlas
	mp3ff.cpp 
Log Message:
Synopsis: Add continuous timestamp mode for AAC and MP3 fileformat

Overview:
In this mode, after seek, the packet time stamp will not jump to some position after \
seek point, instead it will continue growing from current position. For example, \
current packet ts is 3s, after seek to 10s, next packet ts will be 3.021s, not \
10.021s. This mode is useful when seek table is not available, while some proxy FF \
know exactly the packet ts detail. So leave this decision to the upper proxy FF.  
 Files Modified:
 datatype/mp3/fileformat/mp3ff.cpp
 datatype/mp3/fileformat/pub/mp3ff.h
 datatype/aac/fileformat/aacff.cpp
 datatype/aac/fileformat/pub/aacff.h


Index: mp3ff.cpp
===================================================================
RCS file: /cvsroot/datatype/mp3/fileformat/mp3ff.cpp,v
retrieving revision 1.58.2.20
retrieving revision 1.58.2.21
diff -u -d -r1.58.2.20 -r1.58.2.21
--- mp3ff.cpp	26 Oct 2010 22:51:01 -0000	1.58.2.20
+++ mp3ff.cpp	22 Feb 2012 07:27:04 -0000	1.58.2.21
@@ -233,6 +233,7 @@
       m_bFileDurationChanged(FALSE),
       m_bValidateMP3Required(TRUE),
       m_pCreatePacketFunction(NULL),
+      m_bUseContinuousDTSAfterSeek(FALSE),
       m_ulNewReadSize(0)
 {
     memset(&m_ReadBuf, 0, sizeof(m_ReadBuf));
@@ -571,6 +572,21 @@
     if (m_pStatus != NULL)
         m_pStatus->AddRef();
 
+    if (pRequest)
+    {
+        IHXValues* pRequestHeaders = NULL;
+        if (SUCCEEDED(pRequest->GetRequestHeaders(pRequestHeaders)) &&
+            pRequestHeaders)
+        {
+            ULONG32 ulVal = 0;
+            if (SUCCEEDED(pRequestHeaders->GetPropertyULONG32("UseContinuousDTSAfterSeek", \
ulVal))) +            {
+                m_bUseContinuousDTSAfterSeek = ((ulVal == 0) ? FALSE : TRUE);
+            }
+            HX_RELEASE(pRequestHeaders);
+        }
+    }
+
 #if defined(HELIX_FEATURE_MP3FF_ONDEMANDMETAINFO)
     // See if meta info has been requested
     HXBOOL bAcceptMetaInfo = m_bAcceptMetaInfo;
@@ -1993,12 +2009,16 @@
     }
 
     HXLOGL3(HXLOG_MP3X,"Seek(%lu)", requestedTime);
-    // Find nearest packet to the requested time
-    UINT32 ulPacketNo = (UINT32)(requestedTime / m_Info.dTimePerFrame);
-    UINT32 ulPacketStart = (UINT32)(ulPacketNo * m_Info.dPacketSize + \
m_ulFileOffset); +    UINT32 ulPacketStart = 0;
+    if (!m_bUseContinuousDTSAfterSeek)
+    {
+        // Find nearest packet to the requested time
+        UINT32 ulPacketNo = (UINT32)(requestedTime / m_Info.dTimePerFrame);
+        ulPacketStart = (UINT32)(ulPacketNo * m_Info.dPacketSize + m_ulFileOffset);
 
-    m_dNextPts = ulPacketNo * m_Info.dTimePerFrame;
-    m_ulNextPacketDeliveryTime = (UINT32)(m_dNextPts);
+        m_dNextPts = ulPacketNo * m_Info.dTimePerFrame;
+        m_ulNextPacketDeliveryTime = (UINT32)(m_dNextPts);
+    }
 
     // Note state, since Seek() is asynchronous
     m_State = SeekSeekPending;


_______________________________________________
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