[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