mirror of
https://code.videolan.org/videolan/vlc
synced 2024-09-04 09:11:33 +02:00
Patch by Richard Hosking: Allow users specified width and height of v4l2 source.
This commit is contained in:
parent
0d38084be8
commit
78a05dbc4c
@ -81,6 +81,12 @@ static void Close( vlc_object_t * );
|
||||
#define IOMETHOD_TEXT N_( "IO Method" )
|
||||
#define IOMETHOD_LONGTEXT N_( \
|
||||
"IO Method (READ, MMAP, USERPTR)." )
|
||||
#define WIDTH_TEXT N_( "Width" )
|
||||
#define WIDTH_LONGTEXT N_( \
|
||||
"Force width (-1 for autodetect)." )
|
||||
#define HEIGHT_TEXT N_( "Height" )
|
||||
#define HEIGHT_LONGTEXT N_( \
|
||||
"Force height (-1 for autodetect)." )
|
||||
#define FPS_TEXT N_( "Framerate" )
|
||||
#define FPS_LONGTEXT N_( "Framerate to capture, if applicable " \
|
||||
"(-1 for autodetect)." )
|
||||
@ -129,8 +135,12 @@ vlc_module_begin();
|
||||
add_integer( "v4l2-input", 0, NULL, INPUT_TEXT, INPUT_LONGTEXT,
|
||||
VLC_TRUE );
|
||||
add_integer( "v4l2-io", IO_METHOD_MMAP, NULL, IOMETHOD_TEXT,
|
||||
IOMETHOD_LONGTEXT, VLC_FALSE );
|
||||
IOMETHOD_LONGTEXT, VLC_TRUE );
|
||||
change_integer_list( i_iomethod_list, psz_iomethod_list_text, 0 );
|
||||
add_integer( "v4l2-width", 0, NULL, WIDTH_TEXT,
|
||||
WIDTH_LONGTEXT, VLC_TRUE );
|
||||
add_integer( "v4l2-height", 0, NULL, HEIGHT_TEXT,
|
||||
HEIGHT_LONGTEXT, VLC_TRUE );
|
||||
add_float( "v4l2-fps", 0, NULL, FPS_TEXT, FPS_LONGTEXT, VLC_TRUE );
|
||||
add_bool( "v4l2-stereo", VLC_TRUE, NULL, STEREO_TEXT, STEREO_LONGTEXT,
|
||||
VLC_TRUE );
|
||||
@ -289,6 +299,9 @@ static int Open( vlc_object_t *p_this )
|
||||
|
||||
p_sys->io = var_CreateGetInteger( p_demux, "v4l2-io" );
|
||||
|
||||
p_sys->i_width = var_CreateGetInteger( p_demux, "v4l2-width" );
|
||||
p_sys->i_height = var_CreateGetInteger( p_demux, "v4l2-height" );
|
||||
|
||||
var_Create( p_demux, "v4l2-fps", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT );
|
||||
var_Get( p_demux, "v4l2-fps", &val );
|
||||
p_sys->f_fps = val.f_float;
|
||||
@ -527,6 +540,20 @@ static void ParseMRL( demux_t *p_demux )
|
||||
p_sys->io = strtol( psz_parser, &psz_parser, 0 );
|
||||
}
|
||||
}
|
||||
else if( !strncmp( psz_parser, "width=",
|
||||
strlen( "width=" ) ) )
|
||||
{
|
||||
p_sys->i_width =
|
||||
strtol( psz_parser + strlen( "width=" ),
|
||||
&psz_parser, 0 );
|
||||
}
|
||||
else if( !strncmp( psz_parser, "height=",
|
||||
strlen( "height=" ) ) )
|
||||
{
|
||||
p_sys->i_height =
|
||||
strtol( psz_parser + strlen( "height=" ),
|
||||
&psz_parser, 0 );
|
||||
}
|
||||
else if( !strncmp( psz_parser, "samplerate=",
|
||||
strlen( "samplerate=" ) ) )
|
||||
{
|
||||
@ -1185,11 +1212,11 @@ int OpenVideoDev( demux_t *p_demux, char *psz_device )
|
||||
}
|
||||
|
||||
/* Try and find default resolution if not specified */
|
||||
if( !p_sys->i_width && !p_sys->i_height )
|
||||
{
|
||||
memset( &fmt, 0, sizeof(fmt) );
|
||||
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
memset( &fmt, 0, sizeof(fmt) );
|
||||
fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
||||
if( p_sys->i_width <= 0 || p_sys->i_height <= 0 )
|
||||
{
|
||||
if( ioctl( i_fd, VIDIOC_G_FMT, &fmt ) < 0 )
|
||||
{
|
||||
msg_Err( p_demux, "Cannot get default width and height." );
|
||||
@ -1204,6 +1231,10 @@ int OpenVideoDev( demux_t *p_demux, char *psz_device )
|
||||
p_sys->i_height = p_sys->i_height * 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
msg_Dbg( p_demux, "trying specified size %dx%d", p_sys->i_width, p_sys->i_height );
|
||||
}
|
||||
|
||||
fmt.fmt.pix.width = p_sys->i_width;
|
||||
fmt.fmt.pix.height = p_sys->i_height;
|
||||
|
Loading…
Reference in New Issue
Block a user