[vlc-devel] [PATCH 5/7] video_output: read the user crop values before creating the display

Steve Lhomme robux4 at ycbcr.xyz
Tue Sep 1 13:08:05 CEST 2020


On 2020-09-01 12:44, Thomas Guillem wrote:
> 
> 
> On Tue, Sep 1, 2020, at 12:06, Steve Lhomme wrote:
>> ---
>>   src/video_output/video_output.c  | 28 ++++++++++++++++++++++++++++
>>   src/video_output/vout_internal.h |  4 ++++
>>   src/video_output/vout_intf.c     |  2 +-
>>   3 files changed, 33 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/video_output/video_output.c
>> b/src/video_output/video_output.c
>> index 78e17cda742..383130a7287 100644
>> --- a/src/video_output/video_output.c
>> +++ b/src/video_output/video_output.c
>> @@ -2216,6 +2216,34 @@ int vout_Request(const vout_configuration_t
>> *cfg, vlc_video_context *vctx, input
>>       }
>>   
>>       vlc_mutex_lock(&sys->window_lock);
>> +    char *psz_crop = var_InheritString(&vout->obj, "crop");
>> +    if (psz_crop) {
>> +        unsigned num, den;
>> +        unsigned y, x;
>> +        unsigned width, height;
>> +        enum vout_crop_mode mode;
>> +
>> +        if (GetCropMode(psz_crop, &mode, &num, &den,
>> +                        &x, &y, &width, &height))
>> +        {
>> +            switch (mode)
>> +            {
>> +            case VOUT_CROP_RATIO:
>> +                ChangeCropRatio(sys, num, den);
>> +                break;
>> +            case VOUT_CROP_WINDOW:
>> +                ChangeCropWindow(sys, x, y, width, height);
>> +                break;
>> +            case VOUT_CROP_BORDER:
>> +                ChangeCropBorder(sys, x, y, width, height);
>> +                break;
>> +            case VOUT_CROP_NONE:
>> +                break;
>> +            }
>> +        }
>> +        free(psz_crop);
>> +    }
>> +
> 
> Is it possible to put this initialisation into VoutGetDisplayCfg() like it is already done for other properties?

I don't have a strong feeling about the location. And yes it could be 
there. But the VoutGetDisplayCfg() (which is really an InitDisplayCfg) 
is mostly about filling the vout_display_cfg_t. Here we initialize the 
vout_thread_sys_t.source structure.

>>       if (EnableWindowLocked(vout, &original) != 0)
>>       {
>>           /* the window was not enabled, nor the display started */
>> diff --git a/src/video_output/vout_internal.h
>> b/src/video_output/vout_internal.h
>> index ef6625c1eea..54eb4a7c0a0 100644
>> --- a/src/video_output/vout_internal.h
>> +++ b/src/video_output/vout_internal.h
>> @@ -104,6 +104,10 @@ int vout_ChangeSource( vout_thread_t *p_vout,
>> const video_format_t *fmt );
>>   enum vout_crop_mode {
>>       VOUT_CROP_NONE, VOUT_CROP_RATIO, VOUT_CROP_WINDOW,
>> VOUT_CROP_BORDER,
>>   };
>> +bool GetCropMode(const char *crop_str, enum vout_crop_mode *mode,
>> +                        unsigned *num, unsigned *den,
>> +                        unsigned *x, unsigned *y,
>> +                        unsigned *width, unsigned *height );
>>   
>>   /* TODO to move them to vlc_vout.h */
>>   void vout_ChangeFullscreen(vout_thread_t *, const char *id);
>> diff --git a/src/video_output/vout_intf.c b/src/video_output/vout_intf.c
>> index 534f783a456..630961125b7 100644
>> --- a/src/video_output/vout_intf.c
>> +++ b/src/video_output/vout_intf.c
>> @@ -450,7 +450,7 @@ exit:
>>       free( psz_path );
>>   }
>>   
>> -static bool GetCropMode(const char *crop_str, enum vout_crop_mode *mode,
>> +bool GetCropMode(const char *crop_str, enum vout_crop_mode *mode,
>>                           unsigned *num, unsigned *den,
>>                           unsigned *x, unsigned *y,
>>                           unsigned *width, unsigned *height )
>> -- 
>> 2.26.2
>>
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
> _______________________________________________
> 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