[vlc-devel] [PATCH] libvlc: rename the aspect ratio setter/getter and use a fraction

Steve Lhomme robux4 at ycbcr.xyz
Wed May 29 16:35:37 CEST 2019


On 2019-05-29 16:24, Rémi Denis-Courmont wrote:
> Le keskiviikkona 29. toukokuuta 2019, 17.16.00 EEST Steve Lhomme a écrit :
>> 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;
> 
> AFAIK, denominator is unsigned, and structure seems overkill when there could
> just as well be two parameters.

Looking at the AR presets, it seems negative values are not supported. 
I'd rather use unsigned for both.

>> +
>>   /**
>>    * 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 );
> 
> How do you communicate unset A/R here?

denominator /**< aspect ratio denominator, 0 if the source default is 
used */

>>
>>   /**
>>    * 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)
> 
> 
> -- 
> Реми Дёни-Курмон
> http://www.remlab.net/
> 
> 
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
> 


More information about the vlc-devel mailing list