/*****************************************************************************
* screen.c: Screen capture module.
*****************************************************************************
- * Copyright (C) 2004-2008 the VideoLAN team
+ * Copyright (C) 2004-2008 VLC authors and VideoLAN
* $Id$
*
* Authors: Gildas Bazin <gbazin@videolan.org>
* Antoine Cellerier <dionoea at videolan dot org>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
#include <vlc_common.h>
#include <vlc_plugin.h>
+#include <vlc_modules.h> /* module_need for "video blending" */
#include "screen.h"
/*****************************************************************************
* Module descriptor
*****************************************************************************/
-#define CACHING_TEXT N_("Caching value in ms")
-#define CACHING_LONGTEXT N_( \
- "Caching value for screen capture. "\
- "This value should be set in milliseconds." )
#define FPS_TEXT N_("Frame rate")
#define FPS_LONGTEXT N_( \
"Desired frame rate for the capture." )
-#ifdef WIN32
+#ifdef _WIN32
#define FRAGS_TEXT N_("Capture fragment size")
#define FRAGS_LONGTEXT N_( \
"Optimize the capture by fragmenting the screen in chunks " \
"Left coordinate of the subscreen top left corner." )
#define WIDTH_TEXT N_( "Subscreen width" )
-#define WIDTH_LONGTEXT N_( \
- "Subscreen width" )
#define HEIGHT_TEXT N_( "Subscreen height" )
-#define HEIGHT_LONGTEXT N_( \
- "Subscreen height" )
#define FOLLOW_MOUSE_TEXT N_( "Follow the mouse" )
#define FOLLOW_MOUSE_LONGTEXT N_( \
"capture." )
#endif
+#ifdef SCREEN_DISPLAY_ID
+#define DISPLAY_ID_TEXT N_( "Display ID" )
+#define DISPLAY_ID_LONGTEXT N_( \
+ "Display ID. If not specified, main display ID is used. " )
+#define INDEX_TEXT N_( "Screen index" )
+#define INDEX_LONGTEXT N_( \
+ "Index of screen (1, 2, 3, ...). Alternative to Display ID." )
+#endif
+
static int Open ( vlc_object_t * );
static void Close( vlc_object_t * );
-#ifdef WIN32
+#ifdef _WIN32
# define SCREEN_FPS 1
#else
# define SCREEN_FPS 5
set_category( CAT_INPUT )
set_subcategory( SUBCAT_INPUT_ACCESS )
- add_integer( "screen-caching", DEFAULT_PTS_DELAY / 1000, NULL,
- CACHING_TEXT, CACHING_LONGTEXT, true )
- add_float( "screen-fps", SCREEN_FPS, 0, FPS_TEXT, FPS_LONGTEXT, true )
+ add_float( "screen-fps", SCREEN_FPS, FPS_TEXT, FPS_LONGTEXT, false )
#ifdef SCREEN_SUBSCREEN
- add_integer( "screen-top", 0, NULL, TOP_TEXT, TOP_LONGTEXT, true )
- add_integer( "screen-left", 0, NULL, LEFT_TEXT, LEFT_LONGTEXT, true )
- add_integer( "screen-width", 0, NULL, WIDTH_TEXT, WIDTH_LONGTEXT, true )
- add_integer( "screen-height", 0, NULL, HEIGHT_TEXT, HEIGHT_LONGTEXT, true )
- add_bool( "screen-follow-mouse", false, NULL, FOLLOW_MOUSE_TEXT,
- FOLLOW_MOUSE_LONGTEXT, true )
+ add_integer( "screen-top", 0, TOP_TEXT, TOP_LONGTEXT, true )
+ add_integer( "screen-left", 0, LEFT_TEXT, LEFT_LONGTEXT, true )
+ add_integer( "screen-width", 0, WIDTH_TEXT, WIDTH_TEXT, true )
+ add_integer( "screen-height", 0, HEIGHT_TEXT, HEIGHT_TEXT, true )
+
+ add_bool( "screen-follow-mouse", false, FOLLOW_MOUSE_TEXT,
+ FOLLOW_MOUSE_LONGTEXT, false )
#endif
#ifdef SCREEN_MOUSE
- add_file( "screen-mouse-image", "", NULL, MOUSE_TEXT, MOUSE_LONGTEXT,
- true )
+ add_loadfile( "screen-mouse-image", "", MOUSE_TEXT, MOUSE_LONGTEXT, true )
+#endif
+
+#ifdef _WIN32
+ add_integer( "screen-fragment-size", 0, FRAGS_TEXT, FRAGS_LONGTEXT, true )
#endif
-#ifdef WIN32
- add_integer( "screen-fragment-size", 0, NULL, FRAGS_TEXT,
- FRAGS_LONGTEXT, true )
+#ifdef SCREEN_DISPLAY_ID
+ add_integer( "screen-display-id", 0, DISPLAY_ID_TEXT, DISPLAY_ID_LONGTEXT, true )
+ add_integer( "screen-index", 0, INDEX_TEXT, INDEX_LONGTEXT, true )
#endif
set_capability( "access_demux", 0 )
if( !p_sys )
return VLC_ENOMEM;
- /* Update default_pts to a suitable value for screen access */
- var_Create( p_demux, "screen-caching", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
-
p_sys->f_fps = var_CreateGetFloat( p_demux, "screen-fps" );
p_sys->i_incr = 1000000 / p_sys->f_fps;;
p_sys->i_next_date = 0;
p_sys->i_height );
#endif
+#ifdef SCREEN_DISPLAY_ID
+ p_sys->i_display_id = var_CreateGetInteger( p_demux, "screen-display-id" );
+ p_sys->i_screen_index = var_CreateGetInteger( p_demux, "screen-index" );
+#endif
+
if( screen_InitCapture( p_demux ) != VLC_SUCCESS )
{
free( p_sys );
p_sys->fmt.video.i_width = p_sys->i_width;
p_sys->fmt.video.i_visible_height =
p_sys->fmt.video.i_height = p_sys->i_height;
- p_sys->b_follow_mouse = var_CreateGetInteger( p_demux,
+ p_sys->b_follow_mouse = var_CreateGetBool( p_demux,
"screen-follow-mouse" );
if( p_sys->b_follow_mouse )
msg_Dbg( p_demux, "mouse following enabled" );
p_sys->es = es_out_Add( p_demux->out, &p_sys->fmt );
+ p_sys->i_start = mdate();
+
return VLC_SUCCESS;
}
{
bool *pb;
int64_t *pi64;
+ demux_sys_t *p_sys = p_demux->p_sys;
switch( i_query )
{
case DEMUX_GET_PTS_DELAY:
pi64 = (int64_t*)va_arg( args, int64_t * );
- *pi64 = (int64_t)var_GetInteger( p_demux, "screen-caching" ) *1000;
+ *pi64 = INT64_C(1000)
+ * var_InheritInteger( p_demux, "live-caching" );
return VLC_SUCCESS;
case DEMUX_GET_TIME:
pi64 = (int64_t*)va_arg( args, int64_t * );
- *pi64 = mdate();
+ *pi64 = mdate() - p_sys->i_start;
return VLC_SUCCESS;
/* TODO implement others */