Commit e365f860 authored by Felix Paul Kühne's avatar Felix Paul Kühne

qtcapture: unify and modernize coding style

parent bdb729ea
...@@ -48,22 +48,22 @@ ...@@ -48,22 +48,22 @@
/***************************************************************************** /*****************************************************************************
* Local prototypes * Local prototypes
*****************************************************************************/ *****************************************************************************/
static int Open( vlc_object_t *p_this ); static int Open(vlc_object_t *p_this);
static void Close( vlc_object_t *p_this ); static void Close(vlc_object_t *p_this);
static int Demux( demux_t *p_demux ); static int Demux(demux_t *p_demux);
static int Control( demux_t *, int, va_list ); static int Control(demux_t *, int, va_list);
/***************************************************************************** /*****************************************************************************
* Module descriptor * Module descriptor
*****************************************************************************/ *****************************************************************************/
vlc_module_begin () vlc_module_begin ()
set_shortname( N_("Quicktime Capture") ) set_shortname(N_("Quicktime Capture"))
set_description( N_("Quicktime Capture") ) set_description(N_("Quicktime Capture"))
set_category( CAT_INPUT ) set_category(CAT_INPUT)
set_subcategory( SUBCAT_INPUT_ACCESS ) set_subcategory(SUBCAT_INPUT_ACCESS)
add_shortcut( "qtcapture" ) add_shortcut("qtcapture")
set_capability( "access_demux", 10 ) set_capability("access_demux", 10)
set_callbacks( Open, Close ) set_callbacks(Open, Close)
add_integer("qtcapture-width", 640, QTKIT_WIDTH_TEXT, QTKIT_WIDTH_LONGTEXT, true) add_integer("qtcapture-width", 640, QTKIT_WIDTH_TEXT, QTKIT_WIDTH_LONGTEXT, true)
change_integer_range (80, 1280) change_integer_range (80, 1280)
add_integer("qtcapture-height", 480, QTKIT_HEIGHT_TEXT, QTKIT_HEIGHT_LONGTEXT, true) add_integer("qtcapture-height", 480, QTKIT_HEIGHT_TEXT, QTKIT_HEIGHT_LONGTEXT, true)
...@@ -88,10 +88,10 @@ vlc_module_end () ...@@ -88,10 +88,10 @@ vlc_module_end ()
/* Apple sample code */ /* Apple sample code */
@implementation VLCDecompressedVideoOutput : QTCaptureDecompressedVideoOutput @implementation VLCDecompressedVideoOutput : QTCaptureDecompressedVideoOutput
- (id)init - (id)init
{ {
if( self = [super init] ) if (self = [super init]) {
{
currentImageBuffer = nil; currentImageBuffer = nil;
currentPts = 0; currentPts = 0;
previousPts = 0; previousPts = 0;
...@@ -99,10 +99,10 @@ vlc_module_end () ...@@ -99,10 +99,10 @@ vlc_module_end ()
} }
return self; return self;
} }
- (void)dealloc - (void)dealloc
{ {
@synchronized (self) @synchronized (self) {
{
CVBufferRelease(currentImageBuffer); CVBufferRelease(currentImageBuffer);
currentImageBuffer = nil; currentImageBuffer = nil;
} }
...@@ -122,8 +122,7 @@ vlc_module_end () ...@@ -122,8 +122,7 @@ vlc_module_end ()
CVBufferRetain(videoFrame); CVBufferRetain(videoFrame);
@synchronized (self) @synchronized (self) {
{
imageBufferToRelease = currentImageBuffer; imageBufferToRelease = currentImageBuffer;
currentImageBuffer = videoFrame; currentImageBuffer = videoFrame;
QTTime timeStamp = [sampleBuffer presentationTime]; QTTime timeStamp = [sampleBuffer presentationTime];
...@@ -132,7 +131,7 @@ vlc_module_end () ...@@ -132,7 +131,7 @@ vlc_module_end ()
/* Try to use hosttime of the sample if available, because iSight Pts seems broken */ /* Try to use hosttime of the sample if available, because iSight Pts seems broken */
NSNumber *hosttime = (NSNumber *)[sampleBuffer attributeForKey:QTSampleBufferHostTimeAttribute]; NSNumber *hosttime = (NSNumber *)[sampleBuffer attributeForKey:QTSampleBufferHostTimeAttribute];
if( hosttime ) currentPts = (mtime_t)AudioConvertHostTimeToNanos([hosttime unsignedLongLongValue])/1000; if (hosttime) currentPts = (mtime_t)AudioConvertHostTimeToNanos([hosttime unsignedLongLongValue])/1000;
} }
CVBufferRelease(imageBufferToRelease); CVBufferRelease(imageBufferToRelease);
} }
...@@ -144,25 +143,24 @@ vlc_module_end () ...@@ -144,25 +143,24 @@ vlc_module_end ()
void * pixels; void * pixels;
if(!currentImageBuffer || currentPts == previousPts ) if (!currentImageBuffer || currentPts == previousPts)
return 0; return 0;
@synchronized (self) @synchronized (self) {
{
imageBuffer = CVBufferRetain(currentImageBuffer); imageBuffer = CVBufferRetain(currentImageBuffer);
if(imageBuffer){ if (imageBuffer) {
pts = previousPts = currentPts; pts = previousPts = currentPts;
CVPixelBufferLockBaseAddress(imageBuffer, 0); CVPixelBufferLockBaseAddress(imageBuffer, 0);
pixels = CVPixelBufferGetBaseAddress(imageBuffer); pixels = CVPixelBufferGetBaseAddress(imageBuffer);
if(pixels) if (pixels)
memcpy( buffer, pixels, CVPixelBufferGetBytesPerRow(imageBuffer) * CVPixelBufferGetHeight(imageBuffer)); memcpy(buffer, pixels, CVPixelBufferGetBytesPerRow(imageBuffer) * CVPixelBufferGetHeight(imageBuffer));
CVPixelBufferUnlockBaseAddress(imageBuffer, 0); CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
} }
} }
CVBufferRelease(imageBuffer); CVBufferRelease(imageBuffer);
if(pixels) if (pixels)
return currentPts; return currentPts;
else else
return 0; return 0;
...@@ -188,7 +186,7 @@ struct demux_sys_t { ...@@ -188,7 +186,7 @@ struct demux_sys_t {
/***************************************************************************** /*****************************************************************************
* qtchroma_to_fourcc * qtchroma_to_fourcc
*****************************************************************************/ *****************************************************************************/
static int qtchroma_to_fourcc( int i_qt ) static int qtchroma_to_fourcc(int i_qt)
{ {
static const struct static const struct
{ {
...@@ -202,10 +200,9 @@ static int qtchroma_to_fourcc( int i_qt ) ...@@ -202,10 +200,9 @@ static int qtchroma_to_fourcc( int i_qt )
{ 'yuvs', VLC_CODEC_YUYV }, { 'yuvs', VLC_CODEC_YUYV },
{ 0, 0 } { 0, 0 }
}; };
int i;
for( i = 0; qtchroma_to_fourcc[i].i_qt; i++ ) for (int i = 0; qtchroma_to_fourcc[i].i_qt; i++) {
{ if (qtchroma_to_fourcc[i].i_qt == i_qt)
if( qtchroma_to_fourcc[i].i_qt == i_qt )
return qtchroma_to_fourcc[i].i_fourcc; return qtchroma_to_fourcc[i].i_fourcc;
} }
return 0; return 0;
...@@ -214,7 +211,7 @@ static int qtchroma_to_fourcc( int i_qt ) ...@@ -214,7 +211,7 @@ static int qtchroma_to_fourcc( int i_qt )
/***************************************************************************** /*****************************************************************************
* Open: * Open:
*****************************************************************************/ *****************************************************************************/
static int Open( vlc_object_t *p_this ) static int Open(vlc_object_t *p_this)
{ {
demux_t *p_demux = (demux_t*)p_this; demux_t *p_demux = (demux_t*)p_this;
demux_sys_t *p_sys = NULL; demux_sys_t *p_sys = NULL;
...@@ -225,14 +222,14 @@ static int Open( vlc_object_t *p_this ) ...@@ -225,14 +222,14 @@ static int Open( vlc_object_t *p_this )
char *psz_uid = NULL; char *psz_uid = NULL;
/* Only when selected */ /* Only when selected */
if( *p_demux->psz_access == '\0' ) if (*p_demux->psz_access == '\0')
return VLC_EGENERIC; return VLC_EGENERIC;
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
if( p_demux->psz_location && *p_demux->psz_location ) if (p_demux->psz_location && *p_demux->psz_location)
psz_uid = strdup(p_demux->psz_location); psz_uid = strdup(p_demux->psz_location);
msg_Dbg( p_demux, "qtcapture uid = %s", psz_uid ); msg_Dbg(p_demux, "qtcapture uid = %s", psz_uid);
NSString *qtk_currdevice_uid = [[NSString alloc] initWithFormat:@"%s", psz_uid]; NSString *qtk_currdevice_uid = [[NSString alloc] initWithFormat:@"%s", psz_uid];
/* Set up p_demux */ /* Set up p_demux */
...@@ -242,69 +239,63 @@ static int Open( vlc_object_t *p_this ) ...@@ -242,69 +239,63 @@ static int Open( vlc_object_t *p_this )
p_demux->info.i_title = 0; p_demux->info.i_title = 0;
p_demux->info.i_seekpoint = 0; p_demux->info.i_seekpoint = 0;
p_demux->p_sys = p_sys = calloc( 1, sizeof( demux_sys_t ) ); p_demux->p_sys = p_sys = calloc(1, sizeof(demux_sys_t));
if( !p_sys ) if (!p_sys)
return VLC_ENOMEM; return VLC_ENOMEM;
NSArray *myVideoDevices = [[[QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeVideo] arrayByAddingObjectsFromArray:[QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeMuxed]] retain]; NSArray *myVideoDevices = [[[QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeVideo] arrayByAddingObjectsFromArray:[QTCaptureDevice inputDevicesWithMediaType:QTMediaTypeMuxed]] retain];
if([myVideoDevices count] == 0) if ([myVideoDevices count] == 0) {
{ dialog_FatalWait(p_demux, _("No Input device found"),
dialog_FatalWait( p_demux, _("No Input device found"),
_("Your Mac does not seem to be equipped with a suitable input device. " _("Your Mac does not seem to be equipped with a suitable input device. "
"Please check your connectors and drivers.") ); "Please check your connectors and drivers."));
msg_Err( p_demux, "Can't find any Video device" ); msg_Err(p_demux, "Can't find any Video device");
goto error; goto error;
} }
NSUInteger ivideo; NSUInteger ivideo;
NSUInteger deviceCount = [myVideoDevices count]; NSUInteger deviceCount = [myVideoDevices count];
for(ivideo = 0; ivideo < deviceCount; ivideo++){ for (ivideo = 0; ivideo < deviceCount; ivideo++) {
QTCaptureDevice *qtk_device; QTCaptureDevice *qtk_device;
qtk_device = [myVideoDevices objectAtIndex:ivideo]; qtk_device = [myVideoDevices objectAtIndex:ivideo];
msg_Dbg( p_demux, "qtcapture %lu/%lu %s %s", ivideo, deviceCount, [[qtk_device localizedDisplayName] UTF8String], [[qtk_device uniqueID] UTF8String]); msg_Dbg(p_demux, "qtcapture %lu/%lu %s %s", ivideo, deviceCount, [[qtk_device localizedDisplayName] UTF8String], [[qtk_device uniqueID] UTF8String]);
if([[[qtk_device uniqueID]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] isEqualToString:qtk_currdevice_uid]){ if ([[[qtk_device uniqueID]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] isEqualToString:qtk_currdevice_uid]) {
break; break;
} }
} }
memset( &p_sys->fmt, 0, sizeof( es_format_t ) ); memset(&p_sys->fmt, 0, sizeof(es_format_t));
QTCaptureDeviceInput * input = nil; QTCaptureDeviceInput * input = nil;
NSError *o_returnedError; NSError *o_returnedError;
if( ivideo < [myVideoDevices count] ) if (ivideo < [myVideoDevices count])
p_sys->device = [myVideoDevices objectAtIndex:ivideo]; p_sys->device = [myVideoDevices objectAtIndex:ivideo];
else else {
{
/* cannot found designated device, fall back to open default device */ /* cannot found designated device, fall back to open default device */
msg_Dbg(p_demux, "Cannot find designated uid device as %s, falling back to default.", [qtk_currdevice_uid UTF8String]); msg_Dbg(p_demux, "Cannot find designated uid device as %s, falling back to default.", [qtk_currdevice_uid UTF8String]);
p_sys->device = [QTCaptureDevice defaultInputDeviceWithMediaType: QTMediaTypeVideo]; p_sys->device = [QTCaptureDevice defaultInputDeviceWithMediaType: QTMediaTypeVideo];
} }
if( !p_sys->device ) if (!p_sys->device) {
{ dialog_FatalWait(p_demux, _("No Input device found"),
dialog_FatalWait( p_demux, _("No Input device found"),
_("Your Mac does not seem to be equipped with a suitable input device. " _("Your Mac does not seem to be equipped with a suitable input device. "
"Please check your connectors and drivers.") ); "Please check your connectors and drivers."));
msg_Err( p_demux, "Can't find any Video device" ); msg_Err(p_demux, "Can't find any Video device");
goto error; goto error;
} }
if( ![p_sys->device open: &o_returnedError] ) if (![p_sys->device open: &o_returnedError]) {
{ msg_Err(p_demux, "Unable to open the capture device (%ld)", [o_returnedError code]);
msg_Err( p_demux, "Unable to open the capture device (%ld)", [o_returnedError code] );
goto error; goto error;
} }
if( [p_sys->device isInUseByAnotherApplication] == YES ) if ([p_sys->device isInUseByAnotherApplication] == YES) {
{ msg_Err(p_demux, "default capture device is exclusively in use by another application");
msg_Err( p_demux, "default capture device is exclusively in use by another application" );
goto error; goto error;
} }
input = [[QTCaptureDeviceInput alloc] initWithDevice: p_sys->device]; input = [[QTCaptureDeviceInput alloc] initWithDevice: p_sys->device];
if( !input ) if (!input) {
{ msg_Err(p_demux, "can't create a valid capture input facility");
msg_Err( p_demux, "can't create a valid capture input facility" );
goto error; goto error;
} }
...@@ -314,22 +305,22 @@ static int Open( vlc_object_t *p_this ) ...@@ -314,22 +305,22 @@ static int Open( vlc_object_t *p_this )
NSArray *format_array = [p_sys->device formatDescriptions]; NSArray *format_array = [p_sys->device formatDescriptions];
QTFormatDescription* camera_format = NULL; QTFormatDescription* camera_format = NULL;
NSUInteger formatCount = [format_array count]; NSUInteger formatCount = [format_array count];
for( NSUInteger k = 0; k < formatCount; k++ ) for (NSUInteger k = 0; k < formatCount; k++) {
{
camera_format = [format_array objectAtIndex: k]; camera_format = [format_array objectAtIndex: k];
msg_Dbg(p_demux, "localized Format: %s", [[camera_format localizedFormatSummary] UTF8String] ); msg_Dbg(p_demux, "localized Format: %s", [[camera_format localizedFormatSummary] UTF8String]);
msg_Dbg(p_demux, "format description: %s", [[[camera_format formatDescriptionAttributes] description] UTF8String] ); msg_Dbg(p_demux, "format description: %s", [[[camera_format formatDescriptionAttributes] description] UTF8String]);
} }
if( [format_array count] ) if ([format_array count])
camera_format = [format_array objectAtIndex: 0]; camera_format = [format_array objectAtIndex: 0];
else goto error; else
goto error;
int qtchroma = [camera_format formatType]; int qtchroma = [camera_format formatType];
int chroma = VLC_CODEC_UYVY; int chroma = VLC_CODEC_UYVY;
/* Now we can init */ /* Now we can init */
es_format_Init( &p_sys->fmt, VIDEO_ES, chroma ); es_format_Init(&p_sys->fmt, VIDEO_ES, chroma);
NSSize encoded_size = [[camera_format attributeForKey:QTFormatDescriptionVideoEncodedPixelsSizeAttribute] sizeValue]; NSSize encoded_size = [[camera_format attributeForKey:QTFormatDescriptionVideoEncodedPixelsSizeAttribute] sizeValue];
NSSize display_size = [[camera_format attributeForKey:QTFormatDescriptionVideoCleanApertureDisplaySizeAttribute] sizeValue]; NSSize display_size = [[camera_format attributeForKey:QTFormatDescriptionVideoCleanApertureDisplaySizeAttribute] sizeValue];
...@@ -343,15 +334,14 @@ static int Open( vlc_object_t *p_this ) ...@@ -343,15 +334,14 @@ static int Open( vlc_object_t *p_this )
p_sys->fmt.video.i_width = p_sys->width = encoded_size.width; p_sys->fmt.video.i_width = p_sys->width = encoded_size.width;
p_sys->fmt.video.i_height = p_sys->height = encoded_size.height; p_sys->fmt.video.i_height = p_sys->height = encoded_size.height;
p_sys->fmt.video.i_frame_rate = 25.0; // cave: check with setMinimumVideoFrameInterval (see below) p_sys->fmt.video.i_frame_rate = 25.0; // cave: check with setMinimumVideoFrameInterval (see below)
if( par_size.width != encoded_size.width ) if (par_size.width != encoded_size.width) {
{
p_sys->fmt.video.i_sar_num = (int64_t)encoded_size.height * par_size.width / encoded_size.width; p_sys->fmt.video.i_sar_num = (int64_t)encoded_size.height * par_size.width / encoded_size.width;
p_sys->fmt.video.i_sar_den = encoded_size.width; p_sys->fmt.video.i_sar_den = encoded_size.width;
} }
msg_Dbg(p_demux, "encoded_size %i %i", (int)encoded_size.width, (int)encoded_size.height ); msg_Dbg(p_demux, "encoded_size %i %i", (int)encoded_size.width, (int)encoded_size.height);
msg_Dbg(p_demux, "display_size %i %i", (int)display_size.width, (int)display_size.height ); msg_Dbg(p_demux, "display_size %i %i", (int)display_size.width, (int)display_size.height);
msg_Dbg(p_demux, "PAR size %i %i", (int)par_size.width, (int)par_size.height ); msg_Dbg(p_demux, "PAR size %i %i", (int)par_size.width, (int)par_size.height);
[p_sys->output setPixelBufferAttributes: [NSDictionary dictionaryWithObjectsAndKeys: [p_sys->output setPixelBufferAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithUnsignedInt:kCVPixelFormatType_422YpCbCr8], (id)kCVPixelBufferPixelFormatTypeKey, [NSNumber numberWithUnsignedInt:kCVPixelFormatType_422YpCbCr8], (id)kCVPixelBufferPixelFormatTypeKey,
...@@ -365,16 +355,14 @@ static int Open( vlc_object_t *p_this ) ...@@ -365,16 +355,14 @@ static int Open( vlc_object_t *p_this )
p_sys->session = [[QTCaptureSession alloc] init]; p_sys->session = [[QTCaptureSession alloc] init];
bool ret = [p_sys->session addInput:input error: &o_returnedError]; bool ret = [p_sys->session addInput:input error: &o_returnedError];
if( !ret ) if (!ret) {
{ msg_Err(p_demux, "default video capture device could not be added to capture session (%ld)", [o_returnedError code]);
msg_Err( p_demux, "default video capture device could not be added to capture session (%ld)", [o_returnedError code] );
goto error; goto error;
} }
ret = [p_sys->session addOutput:p_sys->output error: &o_returnedError]; ret = [p_sys->session addOutput:p_sys->output error: &o_returnedError];
if( !ret ) if (!ret) {
{ msg_Err(p_demux, "output could not be added to capture session (%ld)", [o_returnedError code]);
msg_Err( p_demux, "output could not be added to capture session (%ld)", [o_returnedError code] );
goto error; goto error;
} }
...@@ -383,14 +371,14 @@ static int Open( vlc_object_t *p_this ) ...@@ -383,14 +371,14 @@ static int Open( vlc_object_t *p_this )
[input release]; [input release];
[pool release]; [pool release];
msg_Dbg( p_demux, "QTCapture: We have a video device ready!" ); msg_Dbg(p_demux, "QTCapture: We have a video device ready!");
return VLC_SUCCESS; return VLC_SUCCESS;
error: error:
[input release]; [input release];
[pool release]; [pool release];
free( p_sys ); free(p_sys);
return VLC_EGENERIC; return VLC_EGENERIC;
} }
...@@ -398,7 +386,7 @@ error: ...@@ -398,7 +386,7 @@ error:
/***************************************************************************** /*****************************************************************************
* Close: * Close:
*****************************************************************************/ *****************************************************************************/
static void Close( vlc_object_t *p_this ) static void Close(vlc_object_t *p_this)
{ {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
...@@ -408,15 +396,14 @@ static void Close( vlc_object_t *p_this ) ...@@ -408,15 +396,14 @@ static void Close( vlc_object_t *p_this )
/* Hack: if libvlc was killed, main interface thread was, /* Hack: if libvlc was killed, main interface thread was,
* and poor QTKit needs it, so don't tell him. * and poor QTKit needs it, so don't tell him.
* Else we dead lock. */ * Else we dead lock. */
if( vlc_object_alive(p_this->p_libvlc)) if (vlc_object_alive(p_this->p_libvlc)) {
{
// Perform this on main thread, as the framework itself will sometimes try to synchronously // Perform this on main thread, as the framework itself will sometimes try to synchronously
// work on main thread. And this will create a dead lock. // work on main thread. And this will create a dead lock.
[p_sys->session performSelectorOnMainThread:@selector(stopRunning) withObject:nil waitUntilDone:NO]; [p_sys->session performSelectorOnMainThread:@selector(stopRunning) withObject:nil waitUntilDone:NO];
[p_sys->output performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO]; [p_sys->output performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO];
[p_sys->session performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO]; [p_sys->session performSelectorOnMainThread:@selector(release) withObject:nil waitUntilDone:NO];
} }
free( p_sys ); free(p_sys);
[pool release]; [pool release];
} }
...@@ -425,44 +412,39 @@ static void Close( vlc_object_t *p_this ) ...@@ -425,44 +412,39 @@ static void Close( vlc_object_t *p_this )
/***************************************************************************** /*****************************************************************************
* Demux: * Demux:
*****************************************************************************/ *****************************************************************************/
static int Demux( demux_t *p_demux ) static int Demux(demux_t *p_demux)
{ {
demux_sys_t *p_sys = p_demux->p_sys; demux_sys_t *p_sys = p_demux->p_sys;
block_t *p_block; block_t *p_block;
p_block = block_New( p_demux, p_sys->width * p_sys->height * 2 /* FIXME */ ); p_block = block_New(p_demux, p_sys->width * p_sys->height * 2 /* FIXME */);
if( !p_block ) if (!p_block) {
{ msg_Err(p_demux, "cannot get block");
msg_Err( p_demux, "cannot get block" );
return 0; return 0;
} }
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
@synchronized (p_sys->output) @synchronized (p_sys->output) {
{ p_block->i_pts = [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 ) if (!p_block->i_pts) {
{
/* Nothing to display yet, just forget */ /* Nothing to display yet, just forget */
block_Release( p_block ); block_Release(p_block);
[pool release]; [pool release];
msleep( 10000 ); msleep(10000);
return 1; return 1;
} } else if (!p_sys->b_es_setup) {
else if( !p_sys->b_es_setup )
{
p_sys->fmt.video.i_frame_rate_base = [p_sys->output timeScale]; p_sys->fmt.video.i_frame_rate_base = [p_sys->output timeScale];
msg_Dbg( p_demux, "using frame rate base: %i", p_sys->fmt.video.i_frame_rate_base ); msg_Dbg(p_demux, "using frame rate base: %i", p_sys->fmt.video.i_frame_rate_base);
p_sys->p_es_video = es_out_Add( p_demux->out, &p_sys->fmt ); p_sys->p_es_video = es_out_Add(p_demux->out, &p_sys->fmt);
msg_Dbg( p_demux, "added new video es %4.4s %dx%d", (char*)&p_sys->fmt.i_codec, p_sys->fmt.video.i_width, p_sys->fmt.video.i_height ); msg_Dbg(p_demux, "added new video es %4.4s %dx%d", (char*)&p_sys->fmt.i_codec, p_sys->fmt.video.i_width, p_sys->fmt.video.i_height);
p_sys->b_es_setup = YES; p_sys->b_es_setup = YES;
} }
es_out_Control( p_demux->out, ES_OUT_SET_PCR, p_block->i_pts ); 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 ); es_out_Send(p_demux->out, p_sys->p_es_video, p_block);
[pool release]; [pool release];
return 1; return 1;
...@@ -471,29 +453,29 @@ static int Demux( demux_t *p_demux ) ...@@ -471,29 +453,29 @@ static int Demux( demux_t *p_demux )
/***************************************************************************** /*****************************************************************************
* Control: * Control:
*****************************************************************************/ *****************************************************************************/
static int Control( demux_t *p_demux, int i_query, va_list args ) static int Control(demux_t *p_demux, int i_query, va_list args)
{ {
bool *pb; bool *pb;
int64_t *pi64; int64_t *pi64;
switch( i_query ) switch(i_query)
{ {
/* Special for access_demux */ /* Special for access_demux */
case DEMUX_CAN_PAUSE: case DEMUX_CAN_PAUSE:
case DEMUX_CAN_SEEK: case DEMUX_CAN_SEEK:
case DEMUX_SET_PAUSE_STATE: case DEMUX_SET_PAUSE_STATE:
case DEMUX_CAN_CONTROL_PACE: case DEMUX_CAN_CONTROL_PACE:
pb = (bool*)va_arg( args, bool * ); pb = (bool*)va_arg(args, bool *);
*pb = false; *pb = false;
return VLC_SUCCESS; return VLC_SUCCESS;
case DEMUX_GET_PTS_DELAY: case DEMUX_GET_PTS_DELAY:
pi64 = (int64_t*)va_arg( args, int64_t * ); pi64 = (int64_t*)va_arg(args, int64_t *);
*pi64 = INT64_C(1000) * var_InheritInteger( p_demux, "live-caching" ); *pi64 = INT64_C(1000) * var_InheritInteger(p_demux, "live-caching");
return VLC_SUCCESS; return VLC_SUCCESS;
case DEMUX_GET_TIME: case DEMUX_GET_TIME:
pi64 = (int64_t*)va_arg( args, int64_t * ); pi64 = (int64_t*)va_arg(args, int64_t *);
*pi64 = mdate(); *pi64 = mdate();
return VLC_SUCCESS; return VLC_SUCCESS;
......
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