#include <stdlib.h> /* free() */
#include <string.h>
-
-#ifdef HAVE_SYS_TIMES_H
-# include <sys/times.h>
-#endif
-
#include <vlc_vout.h>
#include <vlc_filter.h>
static int video_filter_buffer_allocation_init( filter_t *p_filter, void *p_data )
{
- p_filter->pf_vout_buffer_new = video_new_buffer_filter;
- p_filter->pf_vout_buffer_del = video_del_buffer_filter;
+ p_filter->pf_video_buffer_new = video_new_buffer_filter;
+ p_filter->pf_video_buffer_del = video_del_buffer_filter;
p_filter->p_owner = p_data; /* p_vout */
return VLC_SUCCESS;
}
+#undef vout_Request
/*****************************************************************************
* vout_Request: find a video output thread, create one, or destroy one.
*****************************************************************************
* This function looks for a video output thread matching the current
* properties. If not found, it spawns a new one.
*****************************************************************************/
-vout_thread_t *__vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
- video_format_t *p_fmt )
+vout_thread_t *vout_Request( vlc_object_t *p_this, vout_thread_t *p_vout,
+ video_format_t *p_fmt )
{
if( !p_fmt )
{
return p_vout;
}
+#undef vout_Create
/*****************************************************************************
* vout_Create: creates a new video output thread
*****************************************************************************
* This function creates a new video output thread, and returns a pointer
* to its description. On error, it returns NULL.
*****************************************************************************/
-vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
+vout_thread_t * vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
{
vout_thread_t * p_vout; /* thread descriptor */
int i_index; /* loop variable */
* will be initialized later in InitThread */
for( i_index = 0; i_index < 2 * VOUT_MAX_PICTURES + 1; i_index++)
{
- p_vout->p_picture[i_index].pf_lock = NULL;
- p_vout->p_picture[i_index].pf_unlock = NULL;
p_vout->p_picture[i_index].i_status = FREE_PICTURE;
p_vout->p_picture[i_index].i_type = EMPTY_PICTURE;
p_vout->p_picture[i_index].b_slow = 0;
vlc_mutex_init( &p_vout->p->vfilter_lock );
/* Mouse coordinates */
- var_Create( p_vout, "mouse-x", VLC_VAR_INTEGER );
- var_Create( p_vout, "mouse-y", VLC_VAR_INTEGER );
var_Create( p_vout, "mouse-button-down", VLC_VAR_INTEGER );
- var_Create( p_vout, "mouse-moved", VLC_VAR_BOOL );
- var_Create( p_vout, "mouse-clicked", VLC_VAR_BOOL );
-
- /* Initialize subpicture unit */
- p_vout->p_spu = spu_Create( p_vout );
+ var_Create( p_vout, "mouse-moved", VLC_VAR_COORDS );
+ var_Create( p_vout, "mouse-clicked", VLC_VAR_COORDS );
+ /* Mouse object (area of interest in a video filter) */
+ var_Create( p_vout, "mouse-object", VLC_VAR_BOOL );
/* Attach the new object now so we can use var inheritance below */
vlc_object_attach( p_vout, p_parent );
+ /* Initialize subpicture unit */
+ p_vout->p_spu = spu_Create( p_vout );
+
/* */
spu_Init( p_vout->p_spu );
/* Choose the video output module */
if( !p_vout->p->psz_filter_chain || !*p_vout->p->psz_filter_chain )
{
- psz_parser = var_CreateGetString( p_vout, "vout" );
+ psz_parser = NULL;
}
else
{
}
/* Create the vout thread */
- char* psz_tmp = config_ChainCreate( &psz_name, &p_cfg, psz_parser );
+ char *psz_tmp = config_ChainCreate( &psz_name, &p_cfg, psz_parser );
free( psz_parser );
free( psz_tmp );
p_vout->p_cfg = p_cfg;
DeinterlaceEnable( p_vout );
if( p_vout->p->psz_filter_chain && *p_vout->p->psz_filter_chain )
- p_vout->p->psz_module_type = "video filter";
- else
- p_vout->p->psz_module_type = "video output";
+ {
+ char *psz_tmp;
+ if( asprintf( &psz_tmp, "%s,none", psz_name ) < 0 )
+ psz_tmp = strdup( "" );
+ free( psz_name );
+ psz_name = psz_tmp;
+ }
p_vout->p->psz_module_name = psz_name;
p_vout->p_module = NULL;
vout_thread_t *p_vout = (vout_thread_t *)p_this;
/* Make sure the vout was stopped first */
- assert( !p_vout->p_module );
+ //assert( !p_vout->p_module );
free( p_vout->p->psz_module_name );
{
assert( psz_title );
- if( !config_GetInt( p_vout, "osd" ) )
+ if( !var_InheritBool( p_vout, "osd" ) )
return;
vlc_mutex_lock( &p_vout->change_lock );
static void* RunThread( void *p_this )
{
vout_thread_t *p_vout = p_this;
+ bool b_has_wrapper;
int i_idle_loops = 0; /* loops without displaying a picture */
int i_picture_qtype_last = QTYPE_NONE;
bool b_picture_interlaced_last = false;
/*
* Initialize thread
*/
- p_vout->p_module = module_need( p_vout,
- p_vout->p->psz_module_type,
- p_vout->p->psz_module_name,
- !strcmp(p_vout->p->psz_module_type, "video filter") );
+ b_has_wrapper = !vout_OpenWrapper( p_vout, p_vout->p->psz_module_name );
vlc_mutex_lock( &p_vout->change_lock );
- if( p_vout->p_module )
+ if( b_has_wrapper )
p_vout->b_error = InitThread( p_vout );
else
p_vout->b_error = true;
p_filtered_picture = NULL;
if( p_picture )
+ {
+ vlc_mutex_lock( &p_vout->p->vfilter_lock );
p_filtered_picture = filter_chain_VideoFilter( p_vout->p->p_vf2_chain,
p_picture );
+ vlc_mutex_unlock( &p_vout->p->vfilter_lock );
+ }
const bool b_snapshot = vout_snapshot_IsRequested( &p_vout->p->snapshot );
EndThread( p_vout );
vlc_mutex_unlock( &p_vout->change_lock );
- if( p_vout->p_module )
- module_unneed( p_vout, p_vout->p_module );
- p_vout->p_module = NULL;
+ if( b_has_wrapper )
+ vout_CloseWrapper( p_vout );
return NULL;
}
*****************************************************************************/
static void EndThread( vout_thread_t *p_vout )
{
-#ifdef STATS
- {
- struct tms cpu_usage;
- times( &cpu_usage );
-
- msg_Dbg( p_vout, "cpu usage (user: %d, system: %d)",
- cpu_usage.tms_utime, cpu_usage.tms_stime );
- }
-#endif
-
/* FIXME does that function *really* need to be called inside the thread ? */
/* Detach subpicture unit from both input and vout */
return VLC_EGENERIC;
}
- p_chroma->pf_vout_buffer_new = ChromaGetPicture;
+ p_chroma->pf_video_buffer_new = ChromaGetPicture;
return VLC_SUCCESS;
}