[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