X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fvideo_output%2Fvideo_output.c;h=45b6edfde0cfa8c3d98b11c42b489259e7644107;hb=0c9117de56d95e4b26c3bfd1de284a3d983a9a57;hp=2c2909fffb0093578616ae058c10b12f17b8563f;hpb=3a6b3918c3b8c2ef6b0bc0c2a8216f846b2dc176;p=vlc diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c index 2c2909fffb..45b6edfde0 100644 --- a/src/video_output/video_output.c +++ b/src/video_output/video_output.c @@ -308,6 +308,7 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt ) /* Initialize locks */ vlc_mutex_init( p_vout, &p_vout->picture_lock ); vlc_mutex_init( p_vout, &p_vout->change_lock ); + vlc_mutex_init( p_vout, &p_vout->vfilter_lock ); /* Mouse coordinates */ var_Create( p_vout, "mouse-x", VLC_VAR_INTEGER ); @@ -401,19 +402,19 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt ) var_Create( p_vout, "deinterlace", VLC_VAR_STRING | VLC_VAR_HASCHOICE ); text.psz_string = _("Deinterlace"); var_Change( p_vout, "deinterlace", VLC_VAR_SETTEXT, &text, NULL ); - val.psz_string = ""; text.psz_string = _("Disable"); + val.psz_string = (char *)""; text.psz_string = _("Disable"); var_Change( p_vout, "deinterlace", VLC_VAR_ADDCHOICE, &val, &text ); - val.psz_string = "discard"; text.psz_string = _("Discard"); + val.psz_string = (char *)"discard"; text.psz_string = _("Discard"); var_Change( p_vout, "deinterlace", VLC_VAR_ADDCHOICE, &val, &text ); - val.psz_string = "blend"; text.psz_string = _("Blend"); + val.psz_string = (char *)"blend"; text.psz_string = _("Blend"); var_Change( p_vout, "deinterlace", VLC_VAR_ADDCHOICE, &val, &text ); - val.psz_string = "mean"; text.psz_string = _("Mean"); + val.psz_string = (char *)"mean"; text.psz_string = _("Mean"); var_Change( p_vout, "deinterlace", VLC_VAR_ADDCHOICE, &val, &text ); - val.psz_string = "bob"; text.psz_string = _("Bob"); + val.psz_string = (char *)"bob"; text.psz_string = _("Bob"); var_Change( p_vout, "deinterlace", VLC_VAR_ADDCHOICE, &val, &text ); - val.psz_string = "linear"; text.psz_string = _("Linear"); + val.psz_string = (char *)"linear"; text.psz_string = _("Linear"); var_Change( p_vout, "deinterlace", VLC_VAR_ADDCHOICE, &val, &text ); - val.psz_string = "x"; text.psz_string = "X"; + val.psz_string = (char *)"x"; text.psz_string = (char *)"X"; var_Change( p_vout, "deinterlace", VLC_VAR_ADDCHOICE, &val, &text ); if( var_Get( p_vout, "deinterlace-mode", &val ) == VLC_SUCCESS ) @@ -942,6 +943,7 @@ static void RunThread( vout_thread_t *p_vout) if( p_vout->b_vfilter_change == VLC_TRUE ) { int i; + vlc_mutex_lock( &p_vout->vfilter_lock ); RemoveVideoFilters2( p_vout ); for( i = 0; i < p_vout->i_vfilters_cfg; i++ ) { @@ -988,6 +990,7 @@ static void RunThread( vout_thread_t *p_vout) } } p_vout->b_vfilter_change = VLC_FALSE; + vlc_mutex_unlock( &p_vout->vfilter_lock ); } if( p_picture ) @@ -1284,6 +1287,7 @@ static void DestroyThread( vout_thread_t *p_vout ) /* Destroy the locks */ vlc_mutex_destroy( &p_vout->picture_lock ); vlc_mutex_destroy( &p_vout->change_lock ); + vlc_mutex_destroy( &p_vout->vfilter_lock ); /* Release the module */ if( p_vout && p_vout->p_module ) @@ -1549,7 +1553,11 @@ static int ParseVideoFilter2Chain( vout_thread_t *p_vout, char *psz_vfilters ) struct config_chain_t *p_cfg = p_vout->p_vfilters_cfg[p_vout->i_vfilters_cfg]; config_ChainDestroy( p_cfg ); - free( p_vout->psz_vfilters[p_vout->i_vfilters_cfg] ); + if( p_vout->psz_vfilters[p_vout->i_vfilters_cfg] ) + { + free( p_vout->psz_vfilters[p_vout->i_vfilters_cfg] ); + p_vout->psz_vfilters[p_vout->i_vfilters_cfg] = NULL; + } } p_vout->i_vfilters_cfg = 0; if( psz_vfilters && *psz_vfilters ) @@ -1565,7 +1573,7 @@ static int ParseVideoFilter2Chain( vout_thread_t *p_vout, char *psz_vfilters ) msg_Dbg( p_vout, "adding vfilter: %s", p_vout->psz_vfilters[p_vout->i_vfilters_cfg] ); p_vout->i_vfilters_cfg++; - if( psz_parser && psz_parser ) + if( psz_parser && *psz_parser ) { if( p_vout->i_vfilters_cfg == MAX_VFILTERS ) { @@ -1585,8 +1593,10 @@ static int VideoFilter2Callback( vlc_object_t *p_this, char const *psz_cmd, { vout_thread_t *p_vout = (vout_thread_t *)p_this; + vlc_mutex_lock( &p_vout->vfilter_lock ); ParseVideoFilter2Chain( p_vout, newval.psz_string ); p_vout->b_vfilter_change = VLC_TRUE; + vlc_mutex_unlock( &p_vout->vfilter_lock ); return VLC_SUCCESS; }