]> git.sesse.net Git - vlc/commitdiff
Don't send blocks from qtcapture Demux that we have already sent before. Avoid excess...
authorDerk-Jan Hartman <hartman@videolan.org>
Wed, 16 Jul 2008 15:14:22 +0000 (17:14 +0200)
committerDerk-Jan Hartman <hartman@videolan.org>
Wed, 16 Jul 2008 15:14:22 +0000 (17:14 +0200)
modules/access/qtcapture.m

index dd850dc51b2267758859008fd2007980c3ece6a1..fba2fbe7afa09c073eaf8663399e5ca2f3c22180 100644 (file)
@@ -68,6 +68,7 @@ vlc_module_end();
 {
     CVImageBufferRef currentImageBuffer;
     mtime_t currentPts;
+    mtime_t previousPts;
 }
 - (id)init;
 - (void)outputVideoFrame:(CVImageBufferRef)videoFrame withSampleBuffer:(QTSampleBuffer *)sampleBuffer fromConnection:(QTCaptureConnection *)connection;
@@ -82,6 +83,7 @@ vlc_module_end();
     {
         currentImageBuffer = nil;
         currentPts = 0;
+        previousPts = 0;
     }
     return self;
 }
@@ -117,13 +119,13 @@ vlc_module_end();
     CVImageBufferRef imageBuffer;
     mtime_t pts;
 
-    if(!currentImageBuffer)
+    if(!currentImageBuffer || currentPts == previousPts )
         return 0;
 
     @synchronized (self)
     {
         imageBuffer = CVBufferRetain(currentImageBuffer);
-        pts = currentPts;
+        pts = previousPts = currentPts;
 
         CVPixelBufferLockBaseAddress(imageBuffer, 0);
         void * pixels = CVPixelBufferGetBaseAddress(imageBuffer);
@@ -353,6 +355,7 @@ static int Demux( demux_t *p_demux )
         /* Nothing to display yet, just forget */
         block_Release( p_block );
         [pool release];
+        msleep( 10000 );
         return 1;
     }