X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fvideo_output%2Fvout_intf.c;h=d008606ffe6a1c920d65a0276f5769f9807e57d6;hb=7b84cea421f71b3c2885ae721511f465629ef21b;hp=0f837ff24485005b104d72c5b8ab957fa4288171;hpb=67daaa16e0ce6cea8878f48b44fb9b19f5e66d12;p=vlc diff --git a/src/video_output/vout_intf.c b/src/video_output/vout_intf.c index 0f837ff244..d008606ffe 100644 --- a/src/video_output/vout_intf.c +++ b/src/video_output/vout_intf.c @@ -65,6 +65,8 @@ static int CropCallback( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * ); static int AspectCallback( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * ); +static int ScalingCallback( vlc_object_t *, char const *, + vlc_value_t, vlc_value_t, void * ); static int OnTopCallback( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * ); static int FullscreenCallback( vlc_object_t *, char const *, @@ -397,6 +399,15 @@ void vout_IntfInit( vout_thread_t *p_vout ) var_TriggerCallback( p_vout, "aspect-ratio" ); free( old_val.psz_string ); + /* Add a variable to indicate if scaling video is activated or not */ + var_Create( p_vout, "scaling", VLC_VAR_BOOL | VLC_VAR_DOINHERIT + | VLC_VAR_ISCOMMAND ); + text.psz_string = _("Scaling video"); + var_Change( p_vout, "scaling", VLC_VAR_SETTEXT, &text, NULL ); + var_AddCallback( p_vout, "scaling", ScalingCallback, NULL ); + var_Get( p_vout, "scaling", &val ); + p_vout->b_scale = val.b_bool; + /* Initialize the dimensions of the video window */ InitWindowSize( p_vout, &p_vout->i_window_width, &p_vout->i_window_height ); @@ -638,13 +649,12 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic ) */ if( b_embedded_snapshot ) { - vlc_object_t* p_dest = p_obj; block_t *p_block; - snapshot_t *p_snapshot; + snapshot_t *p_snapshot = p_obj; size_t i_size; - vlc_object_lock( p_dest ); - p_dest->p_private = NULL; + vlc_mutex_lock( &p_snapshot->p_mutex ); + p_snapshot->p_data = NULL; /* Save the snapshot to a memory zone */ p_block = image_Write( p_image, p_pic, &fmt_in, &fmt_out ); @@ -652,23 +662,11 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic ) { msg_Err( p_vout, "Could not get snapshot" ); image_HandlerDelete( p_image ); - vlc_object_signal_unlocked( p_dest ); - vlc_object_unlock( p_dest ); + vlc_cond_signal( &p_snapshot->p_condvar ); + vlc_mutex_unlock( &p_snapshot->p_mutex ); return VLC_EGENERIC; } - /* Copy the p_block data to a snapshot structure */ - /* FIXME: get the timestamp */ - p_snapshot = malloc( sizeof( snapshot_t ) ); - if( !p_snapshot ) - { - block_Release( p_block ); - image_HandlerDelete( p_image ); - vlc_object_signal_unlocked( p_dest ); - vlc_object_unlock( p_dest ); - return VLC_ENOMEM; - } - i_size = p_block->i_buffer; p_snapshot->i_width = fmt_out.i_width; @@ -679,21 +677,18 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic ) if( !p_snapshot->p_data ) { block_Release( p_block ); - free( p_snapshot ); image_HandlerDelete( p_image ); - vlc_object_signal_unlocked( p_dest ); - vlc_object_unlock( p_dest ); + vlc_cond_signal( &p_snapshot->p_condvar ); + vlc_mutex_unlock( &p_snapshot->p_mutex ); return VLC_ENOMEM; } memcpy( p_snapshot->p_data, p_block->p_buffer, p_block->i_buffer ); - p_dest->p_private = p_snapshot; - block_Release( p_block ); /* Unlock the object */ - vlc_object_signal_unlocked( p_dest ); - vlc_object_unlock( p_dest ); + vlc_cond_signal( &p_snapshot->p_condvar ); + vlc_mutex_unlock( &p_snapshot->p_mutex ); image_HandlerDelete( p_image ); return VLC_SUCCESS; @@ -1215,6 +1210,19 @@ static int AspectCallback( vlc_object_t *p_this, char const *psz_cmd, return i_ret; } +static int ScalingCallback( 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_mutex_lock( &p_vout->change_lock ); + + p_vout->b_scale = newval.b_bool; + p_vout->i_changes |= VOUT_SIZE_CHANGE; + + vlc_mutex_unlock( &p_vout->change_lock ); +} + static int OnTopCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ) {