[prev in list] [next in list] [prev in thread] [next in thread]
List: helix-datatype-cvs
Subject: [Datatype-cvs]
From: ehyche () helixcommunity ! org
Date: 2009-02-26 5:26:06
Message-ID: 200902260530.n1Q5UvYg006591 () mailer ! progressive-comp ! com
[Download RAW message or body]
Update of /cvsroot/datatype/tools/dtdriver/decoder/video
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv13226
Modified Files:
Tag: hxclient_3_1_0_atlas
vdecoder.cpp
Log Message:
Merge to 310Atlas.
Description
------------------------------------------------
Right now in dtdriver video decoding we take the first renderer that claims the mime \
type we are interested in. But if that renderer fails the call to \
IHXRenderer::OnHeader(), then the decoding will fail. However, there may be multiple \
renderers which claim the mime type. If the first renderer fails OnHeader(), then we \
would like to fallback to the second renderer. This change allows that fallback to \
occur.
Files Modified
------------------------------------------------
datatype/tools/dtdriver/decoder/video/vdecoder.cpp
datatype/tools/dtdriver/decoder/video/pub/vdecoder.h
Branches
------------------------------------------------
HEAD, 310Atlas, 204Cay
Index: vdecoder.cpp
===================================================================
RCS file: /cvsroot/datatype/tools/dtdriver/decoder/video/vdecoder.cpp,v
retrieving revision 1.16.2.14
retrieving revision 1.16.2.15
diff -u -d -r1.16.2.14 -r1.16.2.15
--- vdecoder.cpp 20 Feb 2009 22:24:36 -0000 1.16.2.14
+++ vdecoder.cpp 26 Feb 2009 05:26:03 -0000 1.16.2.15
@@ -332,9 +332,6 @@
if (SUCCEEDED(retVal))
{
- // Init the renderer
- retVal = InitRenderer(m_pRenderer, m_pStreamHeaderIn);
-
// Associate a site with the renderer
if( SUCCEEDED(retVal) && !m_bProcessHeadersOnly)
{
@@ -1239,9 +1236,21 @@
if (SUCCEEDED(retVal))
{
// QI for IHXRenderer
+ IHXRenderer* pRenderer = NULL;
+ retVal = pUnk->QueryInterface(IID_IHXRenderer, (void**) \
&pRenderer); + if (SUCCEEDED(retVal))
+ {
+ // Try to Init the renderer
+ retVal = InitRenderer(pRenderer, pStreamHeader, \
FALSE); + if (SUCCEEDED(retVal))
+ {
+ // Save the out parameter
HX_RELEASE(rpRenderer);
- retVal = pUnk->QueryInterface(IID_IHXRenderer,
- (void**) &rpRenderer);
+ rpRenderer = pRenderer;
+ rpRenderer->AddRef();
+ }
+ }
+ HX_RELEASE(pRenderer);
}
}
HX_RELEASE(pPlugin);
@@ -1359,18 +1368,31 @@
if (SUCCEEDED(retVal) && pPlugin)
{
// QI for IHXRenderer
- HX_RELEASE(rpRenderer);
- retVal = pUnk->QueryInterface(IID_IHXRenderer,
- (void**) &rpRenderer);
+ IHXRenderer* pRenderer = NULL;
+ retVal = pUnk->QueryInterface(IID_IHXRenderer, (void**) \
&pRenderer); + if (SUCCEEDED(retVal))
+ {
// find Untimed interface
IHXUntimedRenderer* pUntimed = NULL;
- retVal = rpRenderer->QueryInterface( IID_IHXUntimedRenderer, (void**)&pUntimed );
+ retVal = pRenderer->QueryInterface(IID_IHXUntimedRenderer, \
(void**)&pUntimed); + if (SUCCEEDED(retVal))
+ {
+ // Try to Initialize the renderer
+ retVal = InitRenderer(pRenderer, pStreamHeader, \
TRUE); if( SUCCEEDED( retVal ) )
{
+ // Set the flag saying we found an untimed \
renderer which properly initialized foundUntimedRenderer = TRUE;
+ // Save the out parameter
+ HX_RELEASE(rpRenderer);
+ rpRenderer = pRenderer;
+ rpRenderer->AddRef();
+ }
}
HX_RELEASE( pUntimed );
}
+ HX_RELEASE(pRenderer);
+ }
HX_RELEASE(pPlugin);
}
HX_RELEASE(pUnk);
@@ -1415,7 +1437,8 @@
}
HX_RESULT CVideoSourceHandler::InitRenderer(IHXRenderer* pRenderer,
- IHXValues* pStreamHeader)
+ IHXValues* pStreamHeader,
+ HXBOOL bRequireUntimed)
{
HX_RESULT retVal = HXR_OK;
@@ -1450,11 +1473,20 @@
}
else
{
- ::ReportError(
- m_pContext,
- HXR_NOINTERFACE,
- "Video renderer for %s Stream Mime-Type not supporting untimed decode",
- m_pMimeTypeStr ? ((char*) m_pMimeTypeStr->GetBuffer()) : "unknown");
+ if (bRequireUntimed)
+ {
+#ifndef HELIX_CONFIG_DTDR_DISABLE_LOGGING
+ ::ReportError(m_pContext,
+ HXR_NOINTERFACE,
+ "Video renderer for %s Stream Mime-Type not \
supporting untimed decode", + m_pMimeTypeStr ? \
((char*) m_pMimeTypeStr->GetBuffer()) : "unknown"); +#endif
+ }
+ else
+ {
+ // Supporting IHXUntimedRenderer is not required, so clear the \
return value + retVal = HXR_OK;
+ }
}
}
@@ -1469,8 +1501,7 @@
m_pVideoPlayer->AddRef();
// Get the IHXPlayer interface
IHXPlayer* pPlayer = NULL;
- retVal = m_pVideoPlayer->QueryInterface(IID_IHXPlayer,
- (void**) &pPlayer);
+ retVal = m_pVideoPlayer->QueryInterface(IID_IHXPlayer, (void**) &pPlayer);
if (SUCCEEDED(retVal))
{
// Get the "SourceURL" CString property from
@@ -1489,8 +1520,7 @@
m_pStream->AddRef();
// Get the IHXStream interface
IHXStream* pStream = NULL;
- retVal = m_pStream->QueryInterface(IID_IHXStream,
- (void**) &pStream);
+ retVal = m_pStream->QueryInterface(IID_IHXStream, (void**) &pStream);
if (SUCCEEDED(retVal))
{
// Call StartStream() on the renderer
@@ -1534,6 +1564,7 @@
}
}
}
+
return retVal;
}
_______________________________________________
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