[vlc-devel] [PATCH] libvlc: rename the aspect ratio setter/getter and use a fraction
Steve Lhomme
robux4 at ycbcr.xyz
Wed May 29 16:16:00 CEST 2019
Using sample in the name is more accurate than just an "aspect ratio", even
though that's probably the one most people know.
---
how do we document APIs that are removed ?
---
include/vlc/libvlc_media_player.h | 16 ++++++++++++----
lib/libvlc.sym | 4 ++--
lib/media_player.c | 2 +-
lib/video.c | 28 +++++++++++++++++++++-------
4 files changed, 36 insertions(+), 14 deletions(-)
diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h
index 10e302529d..179597e80f 100644
--- a/include/vlc/libvlc_media_player.h
+++ b/include/vlc/libvlc_media_player.h
@@ -1486,23 +1486,31 @@ LIBVLC_API float libvlc_video_get_scale( libvlc_media_player_t *p_mi );
*/
LIBVLC_API void libvlc_video_set_scale( libvlc_media_player_t *p_mi, float f_factor );
+typedef struct libvlc_aspect_ratio_t
+{
+ int numerator; /**< aspect ratio numerator */
+ int denominator; /**< aspect ratio denominator, 0 if the source default is used */
+} libvlc_aspect_ratio_t;
+
/**
* Get current video aspect ratio.
*
* \param p_mi the media player
- * \return the video aspect ratio or NULL if unspecified
+ * \param out the video aspect ratio
* (the result must be released with free() or libvlc_free()).
*/
-LIBVLC_API char *libvlc_video_get_aspect_ratio( libvlc_media_player_t *p_mi );
+LIBVLC_API void libvlc_video_get_sample_aspect_ratio( libvlc_media_player_t *p_mi,
+ libvlc_aspect_ratio_t *out );
/**
* Set new video aspect ratio.
*
* \param p_mi the media player
- * \param psz_aspect new video aspect-ratio or NULL to reset to default
+ * \param aspect new video aspect-ratio or NULL to reset to default
* \note Invalid aspect ratios are ignored.
*/
-LIBVLC_API void libvlc_video_set_aspect_ratio( libvlc_media_player_t *p_mi, const char *psz_aspect );
+LIBVLC_API void libvlc_video_set_sample_aspect_ratio( libvlc_media_player_t *p_mi,
+ const libvlc_aspect_ratio_t *aspect );
/**
* Create a video viewpoint structure.
diff --git a/lib/libvlc.sym b/lib/libvlc.sym
index 67b8efcba0..1ae26de315 100644
--- a/lib/libvlc.sym
+++ b/lib/libvlc.sym
@@ -218,7 +218,7 @@ libvlc_toggle_fullscreen
libvlc_track_description_list_release
libvlc_video_get_adjust_float
libvlc_video_get_adjust_int
-libvlc_video_get_aspect_ratio
+libvlc_video_get_sample_aspect_ratio
libvlc_video_get_crop_geometry
libvlc_video_get_size
libvlc_video_get_cursor
@@ -236,7 +236,7 @@ libvlc_video_get_track_count
libvlc_video_get_track_description
libvlc_video_set_adjust_float
libvlc_video_set_adjust_int
-libvlc_video_set_aspect_ratio
+libvlc_video_set_sample_aspect_ratio
libvlc_video_set_callbacks
libvlc_video_set_crop_geometry
libvlc_video_set_deinterlace
diff --git a/lib/media_player.c b/lib/media_player.c
index fd085c3793..ee7ff2e050 100644
--- a/lib/media_player.c
+++ b/lib/media_player.c
@@ -618,7 +618,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, "zoom", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT);
- var_Create (mp, "aspect-ratio", VLC_VAR_STRING);
+ var_Create (mp, "aspect-ratio", VLC_VAR_COORDS);
var_Create (mp, "crop", VLC_VAR_STRING);
var_Create (mp, "deinterlace", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
var_Create (mp, "deinterlace-mode", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
diff --git a/lib/video.c b/lib/video.c
index a318df0098..278c75eb9f 100644
--- a/lib/video.c
+++ b/lib/video.c
@@ -229,18 +229,31 @@ void libvlc_video_set_scale( libvlc_media_player_t *p_mp, float f_scale )
free (pp_vouts);
}
-char *libvlc_video_get_aspect_ratio( libvlc_media_player_t *p_mi )
+void libvlc_video_get_sample_aspect_ratio( libvlc_media_player_t *p_mi,
+ libvlc_aspect_ratio_t *out )
{
- return var_GetNonEmptyString (p_mi, "aspect-ratio");
+ int32_t num,den;
+ var_GetCoords(p_mi, "aspect-ratio", &num, &den);
+ out->numerator = num;
+ out->denominator = den;
}
-void libvlc_video_set_aspect_ratio( libvlc_media_player_t *p_mi,
- const char *psz_aspect )
+void libvlc_video_set_sample_aspect_ratio( libvlc_media_player_t *p_mi,
+ const libvlc_aspect_ratio_t *aspect )
{
- if (psz_aspect == NULL)
- psz_aspect = "";
- var_SetString (p_mi, "aspect-ratio", psz_aspect);
+ char *psz_aspect;
+ if (aspect == NULL)
+ {
+ var_SetCoords(p_mi, "aspect-ratio", 0, 0);
+ psz_aspect = "";
+ }
+ else
+ {
+ if (asprintf(&psz_aspect, "%d:%d", aspect->numerator, aspect->denominator) == -1 )
+ return;
+ var_SetCoords(p_mi, "aspect-ratio", aspect->numerator, aspect->denominator);
+ }
size_t n;
vout_thread_t **pp_vouts = GetVouts (p_mi, &n);
for (size_t i = 0; i < n; i++)
@@ -251,6 +264,7 @@ void libvlc_video_set_aspect_ratio( libvlc_media_player_t *p_mi,
vout_Release(p_vout);
}
free (pp_vouts);
+ free(psz_aspect);
}
libvlc_video_viewpoint_t *libvlc_video_new_viewpoint(void)
--
2.17.1
More information about the vlc-devel
mailing list