X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Faccess%2Fv4l2.c;h=a20b79dc9f82b8089c8a03bf581a2ba412d21387;hb=13f11c9667f8799c7c4939f7f1353d4eacb22a02;hp=e59f3da851adff1c69026b8f213a86b1f92e0ff6;hpb=7e45ab1b284217f191c35c5c2916742b4fbe39ee;p=vlc diff --git a/modules/access/v4l2.c b/modules/access/v4l2.c index e59f3da851..a20b79dc9f 100644 --- a/modules/access/v4l2.c +++ b/modules/access/v4l2.c @@ -51,7 +51,13 @@ #include #include -#include +#if defined(HAVE_LINUX_VIDEODEV2_H) +# include +#elif defined(HAVE_SYS_VIDEOIO_H) +# include +#else +# error "No Video4Linux2 headers found." +#endif #include @@ -375,8 +381,7 @@ vlc_module_begin () set_callbacks( DemuxOpen, DemuxClose ) add_submodule () - add_shortcut( "v4l2" ) - add_shortcut( "v4l2c" ) + add_shortcut( "v4l2", "v4l2c" ) set_description( N_("Video4Linux2 Compressed A/V") ) set_capability( "access", 0 ) /* use these when open as access_demux fails; VLC will use another demux */ @@ -676,10 +681,10 @@ static int DemuxOpen( vlc_object_t *p_this ) GetV4L2Params(p_sys, (vlc_object_t *) p_demux); - ParseMRL( p_sys, p_demux->psz_path, (vlc_object_t *) p_demux ); + ParseMRL( p_sys, p_demux->psz_location, (vlc_object_t *) p_demux ); #ifdef HAVE_LIBV4L2 - if( !var_InheritInteger( p_this, CFG_PREFIX "use-libv4l2" ) ) + if( !var_InheritBool( p_this, CFG_PREFIX "use-libv4l2" ) ) { msg_Dbg( p_this, "Trying direct kernel v4l2" ); use_kernel_v4l2( p_sys ); @@ -1131,10 +1136,10 @@ static int AccessOpen( vlc_object_t * p_this ) GetV4L2Params( p_sys, (vlc_object_t *) p_access ); - ParseMRL( p_sys, p_access->psz_path, (vlc_object_t *) p_access ); + ParseMRL( p_sys, p_access->psz_location, (vlc_object_t *) p_access ); #ifdef HAVE_LIBV4L2 - if( !var_InheritInteger( p_this, CFG_PREFIX "use-libv4l2" ) ) + if( !var_InheritBool( p_this, CFG_PREFIX "use-libv4l2" ) ) { msg_Dbg( p_this, "Trying direct kernel v4l2" ); use_kernel_v4l2( p_sys ); @@ -1352,7 +1357,8 @@ static block_t* GrabVideo( vlc_object_t *p_demux, demux_sys_t *p_sys ) mtime_t i_dur = (mtime_t)((double)1000000 / (double)p_sys->f_fps); /* Did we wait long enough ? (frame rate reduction) */ - if( p_sys->i_video_pts + i_dur > mdate() ) return 0; + if( p_sys->i_video_pts + i_dur > mdate() ) + return NULL; } /* Grab Video Frame */ @@ -1365,7 +1371,7 @@ static block_t* GrabVideo( vlc_object_t *p_demux, demux_sys_t *p_sys ) switch( errno ) { case EAGAIN: - return 0; + return NULL; case EIO: /* Could ignore EIO, see spec. */ /* fall through */ @@ -1376,7 +1382,8 @@ static block_t* GrabVideo( vlc_object_t *p_demux, demux_sys_t *p_sys ) } p_block = ProcessVideoFrame( p_demux, (uint8_t*)p_sys->p_buffers[0].start, i_ret ); - if( !p_block ) return 0; + if( !p_block ) + return NULL; break; @@ -1391,30 +1398,31 @@ static block_t* GrabVideo( vlc_object_t *p_demux, demux_sys_t *p_sys ) switch( errno ) { case EAGAIN: - return 0; + return NULL; case EIO: /* Could ignore EIO, see spec. */ /* fall through */ default: msg_Err( p_demux, "Failed to wait (VIDIOC_DQBUF)" ); - return 0; + return NULL; } } if( buf.index >= p_sys->i_nbuffers ) { msg_Err( p_demux, "Failed capturing new frame as i>=nbuffers" ); - return 0; + return NULL; } p_block = ProcessVideoFrame( p_demux, p_sys->p_buffers[buf.index].start, buf.bytesused ); - if( !p_block ) return 0; + if( !p_block ) + return NULL; /* Unlock */ if( v4l2_ioctl( p_sys->i_fd, VIDIOC_QBUF, &buf ) < 0 ) { msg_Err( p_demux, "Failed to unlock (VIDIOC_QBUF)" ); block_Release( p_block ); - return 0; + return NULL; } break; @@ -1430,13 +1438,13 @@ static block_t* GrabVideo( vlc_object_t *p_demux, demux_sys_t *p_sys ) switch( errno ) { case EAGAIN: - return 0; + return NULL; case EIO: /* Could ignore EIO, see spec. */ /* fall through */ default: msg_Err( p_demux, "Failed to wait (VIDIOC_DQBUF)" ); - return 0; + return NULL; } } @@ -1451,18 +1459,19 @@ static block_t* GrabVideo( vlc_object_t *p_demux, demux_sys_t *p_sys ) if( i >= p_sys->i_nbuffers ) { msg_Err( p_demux, "Failed capturing new frame as i>=nbuffers" ); - return 0; + return NULL; } p_block = ProcessVideoFrame( p_demux, (uint8_t*)buf.m.userptr, buf.bytesused ); - if( !p_block ) return 0; + if( !p_block ) + return NULL; /* Unlock */ if( v4l2_ioctl( p_sys->i_fd, VIDIOC_QBUF, &buf ) < 0 ) { msg_Err( p_demux, "Failed to unlock (VIDIOC_QBUF)" ); block_Release( p_block ); - return 0; + return NULL; } break; @@ -1486,13 +1495,13 @@ static block_t* ProcessVideoFrame( vlc_object_t *p_demux, uint8_t *p_frame, size { block_t *p_block; - if( !p_frame ) return 0; + if( !p_frame ) return NULL; /* New block */ if( !( p_block = block_New( p_demux, i_size ) ) ) { msg_Warn( p_demux, "Cannot get new block" ); - return 0; + return NULL; } /* Copy frame */ @@ -2466,10 +2475,10 @@ static bool ProbeVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, msg_Dbg( p_obj, "device supports hardware frequency seeking" ); #endif if( p_sys->dev_cap.capabilities & V4L2_CAP_VBI_CAPTURE ) - msg_Dbg( p_obj, "device support raw VBI capture" ); + msg_Dbg( p_obj, "device supports raw VBI capture" ); if( p_sys->dev_cap.capabilities & V4L2_CAP_SLICED_VBI_CAPTURE ) - msg_Dbg( p_obj, "device support sliced VBI capture" ); + msg_Dbg( p_obj, "device supports sliced VBI capture" ); /* Now, enumerate all the video inputs. This is useless at the moment since we have no way to present that info to the user except with