Commit 4363f75a authored by Laurent Aimar's avatar Laurent Aimar
Browse files

* v4l: added fps option to reduce the frame rate.

 Untested -> please report success or faillure.
parent c4c17554
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* v4l.c : Video4Linux input module for vlc * v4l.c : Video4Linux input module for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2002 VideoLAN * Copyright (C) 2002 VideoLAN
* $Id: v4l.c,v 1.26 2003/10/25 00:49:13 sam Exp $ * $Id: v4l.c,v 1.27 2003/10/25 20:19:19 fenrir Exp $
* *
* Author: Laurent Aimar <fenrir@via.ecp.fr> * Author: Laurent Aimar <fenrir@via.ecp.fr>
* Paul Forgey <paulf at aphrodite dot com> * Paul Forgey <paulf at aphrodite dot com>
...@@ -119,6 +119,9 @@ struct access_sys_t ...@@ -119,6 +119,9 @@ struct access_sys_t
int i_width; int i_width;
int i_height; int i_height;
float f_fps; /* <= 0.0 mean to grab at full rate */
mtime_t i_video_pts; /* only used when f_fps > 0 */
vlc_bool_t b_mjpeg; vlc_bool_t b_mjpeg;
int i_decimation; int i_decimation;
int i_quality; int i_quality;
...@@ -225,6 +228,9 @@ static int AccessOpen( vlc_object_t *p_this ) ...@@ -225,6 +228,9 @@ static int AccessOpen( vlc_object_t *p_this )
p_sys->i_width = 0; p_sys->i_width = 0;
p_sys->i_height = 0; p_sys->i_height = 0;
p_sys->f_fps = -1.0;
p_sys->i_video_pts = -1;
p_sys->b_mjpeg = VLC_FALSE; p_sys->b_mjpeg = VLC_FALSE;
p_sys->i_decimation = 1; p_sys->i_decimation = 1;
p_sys->i_quality = 100; p_sys->i_quality = 100;
...@@ -413,6 +419,11 @@ static int AccessOpen( vlc_object_t *p_this ) ...@@ -413,6 +419,11 @@ static int AccessOpen( vlc_object_t *p_this )
strtol( psz_parser + strlen( "quality=" ), strtol( psz_parser + strlen( "quality=" ),
&psz_parser, 0 ); &psz_parser, 0 );
} }
else if( !strncmp( psz_parser, "fps=", strlen( "fps=" ) ) )
{
p_sys->f_fps = strtof( psz_parser + strlen( "fps=" ),
&psz_parser );
}
else else
{ {
msg_Warn( p_input, "unknown option" ); msg_Warn( p_input, "unknown option" );
...@@ -1159,7 +1170,21 @@ static int GrabVideo( input_thread_t * p_input, ...@@ -1159,7 +1170,21 @@ static int GrabVideo( input_thread_t * p_input,
mtime_t *pi_pts ) mtime_t *pi_pts )
{ {
access_sys_t *p_sys = p_input->p_access_data; access_sys_t *p_sys = p_input->p_access_data;
uint8_t *p_frame; uint8_t *p_frame;
if( p_sys->f_fps >= 0.1 && p_sys->i_video_pts > 0 )
{
mtime_t i_dur = (mtime_t)((double)1000000 / (double)p_sys->f_fps);
/* have we wait enought ? */
if( p_sys->i_video_pts + i_dur > mdate() )
{
/* no, msleep needed to consume all the cpu, 10ms seem a good value (100fps)*/
msleep( 10000 );
return VLC_EGENERIC;
}
}
if( p_sys->b_mjpeg ) if( p_sys->b_mjpeg )
p_frame = GrabMJPEG( p_input ); p_frame = GrabMJPEG( p_input );
...@@ -1167,13 +1192,15 @@ static int GrabVideo( input_thread_t * p_input, ...@@ -1167,13 +1192,15 @@ static int GrabVideo( input_thread_t * p_input,
p_frame = GrabCapture( p_input ); p_frame = GrabCapture( p_input );
if( !p_frame ) if( !p_frame )
return -1; return VLC_EGENERIC;
p_sys->i_video_pts = mdate();
p_sys->p_video_frame = p_frame; p_sys->p_video_frame = p_frame;
*pp_data = p_sys->p_video_frame; *pp_data = p_sys->p_video_frame;
*pi_data = p_sys->i_video_frame_size; *pi_data = p_sys->i_video_frame_size;
*pi_pts = mdate(); *pi_pts = p_sys->i_video_pts;
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