#include <vlc_interface.h>
#include <vlc_block.h>
#include <vlc_playlist.h>
+#include <vlc_modules.h>
#include <vlc_vout.h>
#include <vlc_image.h>
vlc_value_t, vlc_value_t, void * );
static int SnapshotCallback( vlc_object_t *, char const *,
vlc_value_t, vlc_value_t, void * );
-
+static int VideoFilterCallback( vlc_object_t *, char const *,
+ vlc_value_t, vlc_value_t, void * );
+static int VideoSplitterCallback( vlc_object_t *, char const *,
+ vlc_value_t, vlc_value_t, void * );
+static int SubFilterCallback( vlc_object_t *, char const *,
+ vlc_value_t, vlc_value_t, void * );
+static int SubMarginCallback( vlc_object_t *, char const *,
+ vlc_value_t, vlc_value_t, void * );
static int TitleShowCallback( vlc_object_t *, char const *,
vlc_value_t, vlc_value_t, void * );
static int TitleTimeoutCallback( vlc_object_t *, char const *,
var_Change( p_vout, "video-snapshot", VLC_VAR_SETTEXT, &text, NULL );
var_AddCallback( p_vout, "video-snapshot", SnapshotCallback, NULL );
+ /* Add a video-filter variable */
+ var_Create( p_vout, "video-filter",
+ VLC_VAR_STRING | VLC_VAR_DOINHERIT | VLC_VAR_ISCOMMAND );
+ var_AddCallback( p_vout, "video-filter", VideoFilterCallback, NULL );
+ var_TriggerCallback( p_vout, "video-filter" );
+
+ /* Add a video-splitter variable
+ * TODO rename vout-filter into vout-splitter */
+ var_Create( p_vout, "vout-filter",
+ VLC_VAR_STRING | VLC_VAR_DOINHERIT | VLC_VAR_ISCOMMAND );
+ text.psz_string = _("Video splitter");
+ var_Change( p_vout, "vout-filter", VLC_VAR_SETTEXT, &text, NULL );
+ var_AddCallback( p_vout, "vout-filter", VideoSplitterCallback, NULL );
+
+ /* Add a sub-filter variable */
+ var_Create( p_vout, "sub-filter",
+ VLC_VAR_STRING | VLC_VAR_DOINHERIT | VLC_VAR_ISCOMMAND );
+ var_AddCallback( p_vout, "sub-filter", SubFilterCallback, NULL );
+ var_TriggerCallback( p_vout, "sub-filter" );
+
+ /* Add sub-margin variable */
+ var_Create( p_vout, "sub-margin",
+ VLC_VAR_INTEGER | VLC_VAR_DOINHERIT | VLC_VAR_ISCOMMAND );
+ var_AddCallback( p_vout, "sub-margin", SubMarginCallback, NULL );
+ var_TriggerCallback( p_vout, "sub-margin" );
+
/* Mouse coordinates */
var_Create( p_vout, "mouse-button-down", VLC_VAR_INTEGER );
var_Create( p_vout, "mouse-moved", VLC_VAR_COORDS );
p_subpic->i_original_picture_width *= 4;
p_subpic->i_original_picture_height *= 4;
- spu_DisplaySubpicture( vout_GetSpu( p_vout ), p_subpic );
+ vout_PutSubpicture( p_vout, p_subpic );
return VLC_SUCCESS;
}
}
module_release( p_obj );
- if( !strcmp( psz_filter_type, "sub-filter") )
- psz_string = var_GetString( vout_GetSpu( p_vout ), psz_filter_type );
- else
- psz_string = var_GetString( p_vout, psz_filter_type );
+ psz_string = var_GetString( p_vout, psz_filter_type );
/* Todo : Use some generic chain manipulation functions */
if( !psz_string ) psz_string = strdup("");
if( b_setconfig )
{
- if( !strcmp( psz_filter_type, "sub-filter") )
- config_PutPsz( vout_GetSpu( p_vout ), psz_filter_type, psz_string );
- else
- config_PutPsz( p_vout, psz_filter_type, psz_string );
+ config_PutPsz( p_vout, psz_filter_type, psz_string );
}
- if( !strcmp( psz_filter_type, "sub-filter") )
- var_SetString( vout_GetSpu( p_vout ), psz_filter_type, psz_string );
- else
- var_SetString( p_vout, psz_filter_type, psz_string );
+ var_SetString( p_vout, psz_filter_type, psz_string );
free( psz_string );
}
return VLC_SUCCESS;
}
+static int VideoFilterCallback( vlc_object_t *p_this, char const *psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval, void *p_data)
+{
+ vout_thread_t *p_vout = (vout_thread_t *)p_this;
+ VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval); VLC_UNUSED(p_data);
+
+ vout_ControlChangeFilters( p_vout, newval.psz_string );
+ return VLC_SUCCESS;
+}
+
+static int VideoSplitterCallback( vlc_object_t *p_this, char const *psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval, void *p_data )
+{
+ vout_thread_t *p_vout = (vout_thread_t *)p_this;
+ input_thread_t *p_input;
+ (void)psz_cmd; (void)oldval; (void)p_data;
+
+ p_input = (input_thread_t *)vlc_object_find( p_this, VLC_OBJECT_INPUT,
+ FIND_PARENT );
+ if (!p_input)
+ {
+ msg_Err( p_vout, "Input not found" );
+ return VLC_EGENERIC;
+ }
+
+ /* Modify input as well because the vout might have to be restarted */
+ var_Create( p_input, "vout-filter", VLC_VAR_STRING );
+ var_SetString( p_input, "vout-filter", newval.psz_string );
+
+ /* Now restart current video stream */
+ input_Control( p_input, INPUT_RESTART_ES, -VIDEO_ES );
+ vlc_object_release( p_input );
+
+ return VLC_SUCCESS;
+}
+
+static int SubFilterCallback( vlc_object_t *p_this, char const *psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval, void *p_data)
+{
+ vout_thread_t *p_vout = (vout_thread_t *)p_this;
+ VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval); VLC_UNUSED(p_data);
+
+ vout_ControlChangeSubFilters( p_vout, newval.psz_string );
+ return VLC_SUCCESS;
+}
+
+static int SubMarginCallback( vlc_object_t *p_this, char const *psz_cmd,
+ vlc_value_t oldval, vlc_value_t newval, void *p_data)
+{
+ vout_thread_t *p_vout = (vout_thread_t *)p_this;
+ VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval); VLC_UNUSED(p_data);
+
+ vout_ControlChangeSubMargin( p_vout, newval.i_int );
+ return VLC_SUCCESS;
+}
+
static int TitleShowCallback( vlc_object_t *p_this, char const *psz_cmd,
vlc_value_t oldval, vlc_value_t newval, void *p_data )
{