Commit 3e461d28 authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

qtcapture: Tab fixes, plus attempt to get the real PTS. We still really do lag...

qtcapture: Tab fixes, plus attempt to get the real PTS. We still really do lag compared to PhotoBooth...
parent 90d9d6dd
......@@ -66,6 +66,7 @@ vlc_module_end();
@interface VLCDecompressedVideoOutput : QTCaptureDecompressedVideoOutput
{
CVImageBufferRef currentImageBuffer;
mtime_t currentPts;
}
- (id)init;
- (void)outputVideoFrame:(CVImageBufferRef)videoFrame withSampleBuffer:(QTSampleBuffer *)sampleBuffer fromConnection:(QTCaptureConnection *)connection;
......@@ -79,6 +80,7 @@ vlc_module_end();
if( self = [super init] )
{
currentImageBuffer = nil;
currentPts = 0;
}
return self;
}
......@@ -102,17 +104,20 @@ vlc_module_end();
@synchronized (self) {
imageBufferToRelease = currentImageBuffer;
currentImageBuffer = videoFrame;
/* FIXME: is it the right PTS? */
currentPts = [sampleBuffer presentationTime].timeValue * 1000;
}
CVBufferRelease(imageBufferToRelease);
}
- (BOOL)copyCurrentFrameToBuffer:(void *)buffer
- (mtime_t)copyCurrentFrameToBuffer:(void *)buffer
{
CVImageBufferRef imageBuffer;
mtime_t pts;
@synchronized (self) {
if(!currentImageBuffer) return NO;
if(!currentImageBuffer) return 0;
imageBuffer = CVBufferRetain(currentImageBuffer);
pts = currentPts;
}
CVPixelBufferLockBaseAddress(imageBuffer, 0);
......@@ -122,7 +127,7 @@ vlc_module_end();
CVBufferRelease(imageBuffer);
return YES;
return currentPts;
}
@end
......@@ -315,7 +320,9 @@ static int Demux( demux_t *p_demux )
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
if( ![p_sys->output copyCurrentFrameToBuffer: p_block->p_buffer] )
p_block->i_pts = [p_sys->output copyCurrentFrameToBuffer: p_block->p_buffer];
if( !p_block->i_pts )
{
/* Nothing to display yet, just forget */
block_Release( p_block );
......@@ -323,7 +330,7 @@ static int Demux( demux_t *p_demux )
return 1;
}
p_block->i_pts = mdate(); /* FIXME */
p_block->i_pts += mdate();
es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_block->i_pts );
es_out_Send( p_demux->out, p_sys->p_es_video, p_block );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment