diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h index 2301e90f50..979b197829 100644 --- a/include/vlc/libvlc_media_player.h +++ b/include/vlc/libvlc_media_player.h @@ -147,6 +147,17 @@ typedef enum libvlc_position_t { libvlc_position_bottom_right } libvlc_position_t; +/** + * Enumeration of values used to set the video fitting inside the display area. + */ +typedef enum libvlc_video_fit_mode_t { + libvlc_video_fit_none, /**< Explicit zoom set by \ref libvlc_video_set_scale */ + libvlc_video_fit_smaller, /**< Fit inside / to smallest display dimension */ + libvlc_video_fit_larger, /**< Fit outside / to largest display dimension */ + libvlc_video_fit_width, /**< Fit to display width */ + libvlc_video_fit_height, /**< Fit to display height */ +} libvlc_video_fit_mode_t; + /** * Enumeration of teletext keys than can be passed via * libvlc_video_set_teletext() @@ -1881,6 +1892,23 @@ LIBVLC_API char *libvlc_video_get_aspect_ratio( libvlc_media_player_t *p_mi ); */ LIBVLC_API void libvlc_video_set_aspect_ratio( libvlc_media_player_t *p_mi, const char *psz_aspect ); +/** + * Get current video display fit mode. + * + * \param p_mi the media player + * \return the video display fit mode. + */ +LIBVLC_API libvlc_video_fit_mode_t libvlc_video_get_display_fit( libvlc_media_player_t *p_mi ); + +/** + * Set new video display fit. + * + * \param p_mi the media player + * \param fit new display fit mode + * \note Invalid fit mode are ignored. + */ +LIBVLC_API void libvlc_video_set_display_fit( libvlc_media_player_t *p_mi, libvlc_video_fit_mode_t fit ); + /** * Create a video viewpoint structure. * diff --git a/lib/libvlc.sym b/lib/libvlc.sym index ddb32f4a3b..e1f2601f04 100644 --- a/lib/libvlc.sym +++ b/lib/libvlc.sym @@ -251,6 +251,8 @@ libvlc_video_set_callbacks libvlc_video_set_crop_ratio libvlc_video_set_crop_window libvlc_video_set_crop_border +libvlc_video_get_display_fit +libvlc_video_set_display_fit libvlc_video_set_deinterlace libvlc_video_set_format libvlc_video_set_format_callbacks diff --git a/lib/media_player.c b/lib/media_player.c index 749273ea84..f1650a32ff 100644 --- a/lib/media_player.c +++ b/lib/media_player.c @@ -689,6 +689,7 @@ libvlc_media_player_new( libvlc_instance_t *instance ) var_Create (mp, "fullscreen", VLC_VAR_BOOL); var_Create (mp, "autoscale", VLC_VAR_BOOL | VLC_VAR_DOINHERIT); + var_Create (mp, "fit", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT); var_Create (mp, "zoom", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT); var_Create (mp, "aspect-ratio", VLC_VAR_STRING); var_Create (mp, "crop", VLC_VAR_STRING); diff --git a/lib/video.c b/lib/video.c index 089896f0e4..4ce19d56ca 100644 --- a/lib/video.c +++ b/lib/video.c @@ -252,6 +252,28 @@ void libvlc_video_set_aspect_ratio( libvlc_media_player_t *p_mi, free (pp_vouts); } +libvlc_video_fit_mode_t libvlc_video_get_display_fit( libvlc_media_player_t *p_mi ) +{ + return var_GetInteger (p_mi, "fit"); +} + +void libvlc_video_set_display_fit( libvlc_media_player_t *p_mi, libvlc_video_fit_mode_t fit ) +{ + var_SetInteger (p_mi, "fit", fit); + + size_t n; + vout_thread_t **pp_vouts = GetVouts (p_mi, &n); + for (size_t i = 0; i < n; i++) + { + vout_thread_t *p_vout = pp_vouts[i]; + + var_SetInteger (p_vout, "fit", fit); + vout_Release(p_vout); + } + free (pp_vouts); +} + + libvlc_video_viewpoint_t *libvlc_video_new_viewpoint(void) { libvlc_video_viewpoint_t *p_vp = malloc(sizeof *p_vp);