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

List:       helix-datatype-cvs
Subject:    [Datatype-cvs] tools/dtdriver/decoder/video vdecoder.cpp, 1.7.2.3,
From:       ehyche () helixcommunity ! org
Date:       2007-04-25 18:50:26
Message-ID: 200704251850.l3PIoZWY003489 () 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-serv14684

Modified Files:
      Tag: hxclient_1_5_0_cayenne
	vdecoder.cpp 
Log Message:
Description
-------------------------------------------
When transcoding video, dtdrive's current code 
will sometimes miss the last few decoded frames
from the renderer. It was calling ForceRedraw()
in a loop and then calling OnEndofPackets().

It should have been calling OnEndofPackets()
first, and then calling OnTimeSync() in a loop
until the renderer stopped bltting.

Files Modified
-------------------------------------------
datatype/tools/dtdriver/decoder/video/vdecoder.cpp

Branches
-------------------------------------------
HEAD, 150Cay, and 204cay

Testing
-------------------------------------------
Was able to get all the frames out of a decoded
video after this change



Index: vdecoder.cpp
===================================================================
RCS file: /cvsroot/datatype/tools/dtdriver/decoder/video/vdecoder.cpp,v
retrieving revision 1.7.2.3
retrieving revision 1.7.2.4
diff -u -d -r1.7.2.3 -r1.7.2.4
--- vdecoder.cpp	17 Apr 2007 21:03:55 -0000	1.7.2.3
+++ vdecoder.cpp	25 Apr 2007 18:50:24 -0000	1.7.2.4
@@ -393,16 +393,25 @@
     {
         if (m_pRenderer)
         {
-	    // Attempt to flush out the video renderer
-	    UINT32 ulLastBltCount;
+            // Send the renderer an OnEndofPackets()
+            m_pRenderer->OnEndofPackets();
+            // Call OnTimeSync() to the renderer until it
+            // doesn't blt anymore.
+            UINT32 ulLastBltCount = 0;
 	    do
 	    {
+                // Get the current time
+                UINT32 ulCurrentTime = 0;
+                m_pRenderTimeLine->GetTimeLineValue(ulCurrentTime);
+                // Save the current number of blts
 		ulLastBltCount = m_ulBltCount;
-		m_pSite->ForceRedraw();
-	    } while( ulLastBltCount != m_ulBltCount );
+                // Call OnTimeSync with 1 millisecond more than the
+                // current time. If there are any more frames to blt
+                // then this should cause them to be bltted
+                m_pRenderer->OnTimeSync(ulCurrentTime + 1);
 
-            // Send the renderer an OnEndofPackets()
-            m_pRenderer->OnEndofPackets();
+            }
+            while (ulLastBltCount != m_ulBltCount);
         }
     }
     else


_______________________________________________
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