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

List:       helix-datatype-cvs
Subject:    [Datatype-cvs] mpeg2ts/demuxer tsdemuxer.cpp,1.5.4.11,1.5.4.12
From:       qluo () helixcommunity ! org
Date:       2011-04-29 16:33:07
Message-ID: 201104291632.p3TGWvTu002613 () mailer ! progressive-comp ! com
[Download RAW message or body]

Update of /cvsroot/datatype/mpeg2ts/demuxer
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv1411/demuxer

Modified Files:
      Tag: hxclient_3_1_0_atlas
	tsdemuxer.cpp 
Log Message:
merge demuxer fix to branch.


Index: tsdemuxer.cpp
===================================================================
RCS file: /cvsroot/datatype/mpeg2ts/demuxer/tsdemuxer.cpp,v
retrieving revision 1.5.4.11
retrieving revision 1.5.4.12
diff -u -d -r1.5.4.11 -r1.5.4.12
--- tsdemuxer.cpp	12 Apr 2011 15:11:02 -0000	1.5.4.11
+++ tsdemuxer.cpp	29 Apr 2011 16:33:04 -0000	1.5.4.12
@@ -639,23 +639,39 @@
 HX_RESULT
 CTSDemuxer::OnEOF(void)
 {
-   HX_RESULT retVal = HXR_OK;
-   // if we are in RawMode, create a packet for the last partial AU if there is any
-   if (m_bRawMode)
-   {
-       for (int i = 0; i < m_pCurrentProgram->ulStreamCount && SUCCEEDED(retVal); \
                i++)
-       {
-         TSStreamInfo* pESStream = m_pCurrentProgram->ppESStreams[i];
-         if (pESStream->ulBufferOffset)
-         {
-           pESStream->ulNewAUOffset = pESStream->ulBufferOffset;
-           pESStream->u64PreviousDTS = pESStream->u64DTS;
-           pESStream->u64PreviousPTS = pESStream->u64PTS;
-           retVal = CompletePreviousPacket(i);
-         }
-       }
-   }
-   return retVal;
+    HX_RESULT retVal = HXR_OK;
+
+    // there can be 2 frames for each stream to be packetized
+    for (int i = 0; i < m_pCurrentProgram->ulStreamCount && SUCCEEDED(retVal); i++)
+    {
+        TSStreamInfo* pESStream = m_pCurrentProgram->ppESStreams[i];
+        if (pESStream->ulBufferOffset)
+        {
+            // previous packet
+            if (pESStream->bNewAU)
+            {
+                BYTE* pNewAU = pESStream->pPayloadHandler->FindAU(pESStream->pESData \
+ pESStream->ulCurrentPESOffset,  +                                                   \
pESStream->ulBufferOffset - pESStream->ulCurrentPESOffset); +                if \
(pNewAU) +                {
+                    pESStream->ulNewAUOffset = pNewAU - pESStream->pESData;
+                    if (pESStream->ulNewAUOffset > 0)
+                    {
+                        retVal = CompletePreviousPacket(i);
+                    }
+                }
+            }
+            pESStream->ulCurrentPESOffset = pESStream->ulBufferOffset;
+
+            // last (partial) packet
+            pESStream->ulNewAUOffset = pESStream->ulBufferOffset;
+            pESStream->u64PreviousDTS = pESStream->u64DTS;
+            pESStream->u64PreviousPTS = pESStream->u64PTS;
+            retVal = CompletePreviousPacket(i);
+        }
+    }
+
+    return retVal;
 }
 
 UINT32
@@ -1273,25 +1289,14 @@
     TSStreamInfo* pESStream = m_pCurrentProgram->ppESStreams[usStreamNumber];
     BYTE* pInBuf = pESStream->pESData;
 
+    HXBOOL bAudio = (pESStream->nStreamID >= 0xC0) &&  (pESStream->nStreamID <= \
0xDF); +
     // skip packets before the DTS of the first vodeo with decoder setup info
-    if (m_pCurrentProgram->bHasVideoStream)
+    if (m_pCurrentProgram->bHasVideoStream && !bAudio)
     {
         if ( m_pCurrentProgram->bFirstVideoDTSSet == FALSE || \
pESStream->u64PreviousDTS < m_u64FirstDTSBaseOffset)  {
             return HXR_OK;
-        }  
-
-        if(m_pCurrentProgram->bFirstVideoDTSSet == TRUE && \
                (m_pCurrentProgram->bFirstAudioDTSSet == FALSE) && 
-          (pESStream->nStreamID >= 0xC0) &&  (pESStream->nStreamID <= 0xDF))
-        {
-             if(pESStream->u64PreviousDTS >= m_pCurrentProgram->u64FirstVideoDTS)
-             {
-                 m_pCurrentProgram->bFirstAudioDTSSet = TRUE; 
-             }
-             if(m_pCurrentProgram->bFirstAudioDTSSet != TRUE)
-             {
-                 return HXR_OK;                
-             }
         }
     }
 
@@ -1340,7 +1345,7 @@
         // Set both HX_ASM_SWITCH_ON and HX_ASM_SWITCH_OFF if
         // this is an audio packet or a video keyframe packet.
         BYTE ucASMFlags = HX_ASM_SWITCH_OFF;
-        if ((pESStream->nStreamID >= 0xC0) && (pESStream->nStreamID <= 0xDF))
+        if (bAudio)
         {
             // audio
             ucASMFlags |= HX_ASM_SWITCH_ON;


_______________________________________________
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