[vlc-commits] Small code factorization
Rémi Denis-Courmont
git at videolan.org
Mon Sep 5 18:49:45 CEST 2011
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Mon Sep 5 19:22:22 2011 +0300| [6ee39527ef241b3e138c926f3cf827020d9b7bc7] | committer: Rémi Denis-Courmont
Small code factorization
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6ee39527ef241b3e138c926f3cf827020d9b7bc7
---
modules/access/v4l2/video.c | 51 +++++++++++++++++++++++-------------------
1 files changed, 28 insertions(+), 23 deletions(-)
diff --git a/modules/access/v4l2/video.c b/modules/access/v4l2/video.c
index ea01a8f..60be848 100644
--- a/modules/access/v4l2/video.c
+++ b/modules/access/v4l2/video.c
@@ -407,7 +407,7 @@ vlc_module_end ()
*****************************************************************************/
static void CommonClose( vlc_object_t *, demux_sys_t * );
-static char *ParseMRL( vlc_object_t *, const char * );
+static void ParseMRL( vlc_object_t *, const char * );
static int DemuxControl( demux_t *, int, va_list );
static int AccessControl( access_t *, int, va_list );
@@ -419,7 +419,7 @@ static ssize_t AccessReadStream( access_t * p_access, uint8_t * p_buffer, size_t
static block_t* GrabVideo( vlc_object_t *p_demux, demux_sys_t *p_sys );
static block_t* ProcessVideoFrame( vlc_object_t *p_demux, uint8_t *p_frame, size_t );
-static int OpenVideoDev( vlc_object_t *, const char *path, demux_sys_t *, bool );
+static int OpenVideoDev( vlc_object_t *, demux_sys_t *, bool );
static const struct
{
@@ -506,9 +506,7 @@ static int DemuxOpen( vlc_object_t *p_this )
p_demux->p_sys = p_sys = calloc( 1, sizeof( demux_sys_t ) );
if( p_sys == NULL ) return VLC_ENOMEM;
- char *path = ParseMRL( p_this, p_demux->psz_location );
- if( path == NULL )
- path = var_CreateGetNonEmptyString( p_this, CFG_PREFIX"dev" );
+ ParseMRL( p_this, p_demux->psz_location );
#ifdef HAVE_LIBV4L2
p_sys->i_fd = -1;
@@ -517,7 +515,7 @@ static int DemuxOpen( vlc_object_t *p_this )
p_sys->b_libv4l2 = false;
#endif
msg_Dbg( p_this, "Trying direct kernel v4l2" );
- p_sys->i_fd = OpenVideoDev( p_this, path, p_sys, true );
+ p_sys->i_fd = OpenVideoDev( p_this, p_sys, true );
#ifdef HAVE_LIBV4L2
}
@@ -525,10 +523,9 @@ static int DemuxOpen( vlc_object_t *p_this )
{
p_sys->b_libv4l2 = true;
msg_Dbg( p_this, "Trying libv4l2 wrapper" );
- p_sys->i_fd = OpenVideoDev( p_this, path, p_sys, true );
+ p_sys->i_fd = OpenVideoDev( p_this, p_sys, true );
}
#endif
- free( path );
if( p_sys->i_fd == -1 )
{
free( p_sys );
@@ -538,25 +535,31 @@ static int DemuxOpen( vlc_object_t *p_this )
}
/**
- * Parses a V4L2 MRL.
- * \return device node path (use free()) or NULL if not specified
+ * Parses a V4L2 MRL into VLC object variables.
*/
-static char *ParseMRL( vlc_object_t *obj, const char *mrl )
+static void ParseMRL( vlc_object_t *obj, const char *mrl )
{
const char *p = strchr( mrl, ':' );
+ char *dev = NULL;
if( p != NULL )
{
var_LocationParse( obj, p + 1, CFG_PREFIX );
if( p > mrl )
- return strndup( mrl, p - mrl );
+ dev = strndup( mrl, p - mrl );
}
else
{
if( mrl[0] )
- return strdup( mrl );
+ dev = strdup( mrl );
+ }
+
+ if( dev != NULL )
+ {
+ var_Create( obj, CFG_PREFIX"dev", VLC_VAR_STRING );
+ var_SetString( obj, CFG_PREFIX"dev", dev );
+ free( dev );
}
- return NULL;
}
/*****************************************************************************
@@ -668,9 +671,7 @@ static int AccessOpen( vlc_object_t * p_this )
if( !p_sys ) return VLC_ENOMEM;
p_access->p_sys = (access_sys_t*)p_sys;
- char *path = ParseMRL( p_this, p_access->psz_location );
- if( path == NULL )
- path = var_InheritString( p_this, CFG_PREFIX"dev" );
+ ParseMRL( p_this, p_access->psz_location );
#ifdef HAVE_LIBV4L2
p_sys->i_fd = -1;
@@ -679,17 +680,16 @@ static int AccessOpen( vlc_object_t * p_this )
p_sys->b_libv4l2 = false;
#endif
msg_Dbg( p_this, "Trying direct kernel v4l2" );
- p_sys->i_fd = OpenVideoDev( p_this, path, p_sys, false );
+ p_sys->i_fd = OpenVideoDev( p_this, p_sys, false );
#ifdef HAVE_LIBV4L2
}
if( p_sys->i_fd == -1 )
{
p_sys->b_libv4l2 = true;
msg_Dbg( p_this, "Trying libv4l2 wrapper" );
- p_sys->i_fd = OpenVideoDev( p_this, path, p_sys, false );
+ p_sys->i_fd = OpenVideoDev( p_this, p_sys, false );
}
#endif
- free( path );
if( p_sys->i_fd == -1 )
{
free( p_sys );
@@ -1316,8 +1316,7 @@ static void GetMaxDimensions( demux_t *p_demux, int i_fd,
* Opens and sets up a video device
* \return file descriptor or -1 on error
*/
-static int OpenVideoDev( vlc_object_t *p_obj, const char *path,
- demux_sys_t *p_sys, bool b_demux )
+static int OpenVideoDev( vlc_object_t *p_obj, demux_sys_t *p_sys, bool b_demux )
{
struct v4l2_cropcap cropcap;
struct v4l2_crop crop;
@@ -1327,14 +1326,20 @@ static int OpenVideoDev( vlc_object_t *p_obj, const char *path,
es_format_t es_fmt;
struct v4l2_fmtdesc *codecs = NULL;
+ char *path = var_InheritString( p_obj, CFG_PREFIX"dev" );
+ if( unlikely(path == NULL) )
+ return -1; /* probably OOM */
+
msg_Dbg( p_obj, "opening device '%s'", path );
int i_fd = vlc_open( path, O_RDWR );
if( i_fd == -1 )
{
- msg_Err( p_obj, "cannot open device %s: %m", path );
+ msg_Err( p_obj, "cannot open device '%s': %m", path );
+ free( path );
return -1;
}
+ free( path );
#ifdef HAVE_LIBV4L2
/* Note the v4l2_xxx functions are designed so that if they get passed an
More information about the vlc-commits
mailing list