[prev in list] [next in list] [prev in thread] [next in thread]
List: helix-datatype-cvs
Subject: [Datatype-cvs] tools/dtdriver/engine csrcsplt.cpp, 1.6.10.6,
From: ehyche () helixcommunity ! org
Date: 2009-05-26 1:41:54
Message-ID: 200905260246.n4Q2kWX1011225 () mailer ! progressive-comp ! com
[Download RAW message or body]
Update of /cvsroot/datatype/tools/dtdriver/engine
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv8621/engine
Modified Files:
Tag: hxclient_3_1_0_atlas
csrcsplt.cpp
Log Message:
Merge to 310Atlas.
Description
----------------------------------------------
This change fixes various issues found with transcoding
H.264 in FLV files and thumbnail generation using the Flash-player-based FLV renderer. Changes include:
- Fix problem in FLV file format where we fail to issue
a StreamDone() on the audio stream when fetching packets
during thumbnail generation. This was causing a dtdrplin hang.
- Call IHXUntimedRenderer::SetUntimedRendering twice when initializing
the renderer in the video decoder in the dtdrive. The reason is that
some renderers need to know whether or not they will be doing
untimed rendering BEFORE receiving the OnHeader() (such as renderers
that can use either software or hardware decoders). However, some
renderers need to receive OnHeader() before knowing how to properly
return the call to SetUntimedRendering (such as the FLV renderer). We
solve this conflict by calling SetUntimedRendering twice - once before
OnHeader() and once after.
- Since we are calling it twice, we move the call to SetUntimedRendering()
and related logic to a common method.
- When we compute the minimum output timestamp in the source splitter
we need to take into account the StartTime.
- In the source splitter, we should allow streams that are blocked to
always send their packets through to the processor. That's because
they are only going to get thrown away anyway, so there's no need
to queue them up at all.
Files Modified
----------------------------------------------
datatype/flash/flv/fileformat/flv_file_format.cpp
datatype/tools/dtdriver/decoder/video/vdecoder.cpp
datatype/tools/dtdriver/decoder/video/pub/vdecoder.h
datatype/tools/dtdriver/engine/csrcsplt.cpp
datatype/tools/dtdriver/engine/pub/csrcsplt.h
Branches
----------------------------------------------
HEAD, 310Atlas, and 204Cay
Index: csrcsplt.cpp
===================================================================
RCS file: /cvsroot/datatype/tools/dtdriver/engine/csrcsplt.cpp,v
retrieving revision 1.6.10.6
retrieving revision 1.6.10.7
diff -u -d -r1.6.10.6 -r1.6.10.7
--- csrcsplt.cpp 1 Apr 2009 03:20:45 -0000 1.6.10.6
+++ csrcsplt.cpp 26 May 2009 01:41:52 -0000 1.6.10.7
@@ -101,6 +101,7 @@
, m_ulNumFileHeadersProcessed(0)
, m_ulNumStreamHeadersProcessed(0)
, m_ulNumTerminationsProcessed(0)
+ , m_ulStartTime(0)
, m_statusTermination(HXR_OK)
, m_pProcessorResponseList(NULL)
, m_ulProcessorResponseListCount(0)
@@ -141,6 +142,15 @@
if (SUCCEEDED(retVal))
{
retVal = CSourceHandler::InitSourceHandler(pSourceSink, pOptions);
+ if (SUCCEEDED(retVal))
+ {
+ // Get the start time from the options
+ UINT32 ulTmp = 0;
+ if (SUCCEEDED(pOptions->GetPropertyULONG32("StartTime", ulTmp)))
+ {
+ m_ulStartTime = ulTmp;
+ }
+ }
}
if (SUCCEEDED(retVal))
@@ -248,10 +258,12 @@
// Sanity check
if (ulStreamNum < m_ulNumStreams)
{
- // Has OnStreamDone() been called for this stream?
- if (!m_pStreamStatusArray[ulStreamNum].m_bOnStreamDonePending)
+ // Is this stream being blocked?
+ if (m_pStreamStatusArray[ulStreamNum].m_eFilterType != CStreamStatus::SFT_BLOCK)
{
- // OnStreamDone() has NOT been called for this stream
+ // This stream is either being passed through or decoded,
+ // so we need to do further checking to see if we should
+ // push this packet through to the processor.
//
// Has this stream given us any output yet?
if (!m_pStreamStatusArray[ulStreamNum].m_bFirstOutputPacket)
@@ -263,8 +275,9 @@
// Get the last output time for this stream. If this
// stream has not produced any output yet, then we
// will use 0 for the last output timestamp.
- UINT32 ulLastOutputTimeStamp = 0;
- if (!m_pStreamStatusArray[i].m_bFirstOutputPacket)
+ UINT32 ulLastOutputTimeStamp = m_ulStartTime;
+ if (!m_pStreamStatusArray[i].m_bFirstOutputPacket &&
+ m_pStreamStatusArray[i].m_ulLastOutputTimeStamp >= m_ulStartTime)
{
ulLastOutputTimeStamp = m_pStreamStatusArray[i].m_ulLastOutputTimeStamp;
}
@@ -311,8 +324,8 @@
}
else
{
- // OnStreamDone() has been called for this stream, so
- // we will process this packet.
+ // This stream is being blocked on output, so we can
+ // pass this stream through.
bRet = TRUE;
}
}
@@ -1435,6 +1448,8 @@
HX_RESULT status,
UINT16 unStreamNumber)
{
+ HXLOGL4(HXLOG_DTDR, "CSourceSplitter[%p]::OnStreamDoneResp(procNum=%lu,status=0x%08x,strm=%u)",
+ this, ulProcessorNumber, status, unStreamNumber);
HX_RESULT retVal = HXR_OK;
if ((!m_pStreamStatusArray) ||
_______________________________________________
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