[vlc-devel] [PATCH 2/4] libvlc: provide a callback to the host that it can call when its size changes

Steve Lhomme robux4 at ycbcr.xyz
Mon May 27 10:32:52 CEST 2019


On 2019-05-26 19:55, Rémi Denis-Courmont wrote:
> Le perjantaina 24. toukokuuta 2019, 17.31.44 EEST Steve Lhomme a écrit :
>> ---
>>   include/vlc/libvlc_media_player.h       | 8 ++++++++
>>   lib/media_player.c                      | 2 +-
>>   modules/video_output/win32/direct3d11.c | 5 ++++-
>>   modules/video_output/win32/direct3d9.c  | 5 ++++-
>>   4 files changed, 17 insertions(+), 3 deletions(-)
>>
>> diff --git a/include/vlc/libvlc_media_player.h
>> b/include/vlc/libvlc_media_player.h index 89b29b1afb..4c467b0658 100644
>> --- a/include/vlc/libvlc_media_player.h
>> +++ b/include/vlc/libvlc_media_player.h
>> @@ -611,6 +611,14 @@ typedef enum libvlc_video_direct3d_engine_t {
>>   typedef struct
>>   {
>>       bool hardware_decoding; /** set if D3D11_CREATE_DEVICE_VIDEO_SUPPORT is
>> needed for D3D11 */ +
>> +    /** Callback to call when the size of the host changes
>> +     *
>> +     * \note This may be called from any thread as long as it's not after
>> +     *    \ref libvlc_video_direct3d_device_cleanup_cb has been called.
>> +     */
>> +    void (*repot_size_change)(void *report_opaque, unsigned width, unsigned
>> height);
> 
> What does repot mean?

A Typo.

>> +    void *report_opaque;
>>   } libvlc_video_direct3d_device_cfg_t;
>>
>>   typedef struct
>> diff --git a/lib/media_player.c b/lib/media_player.c
>> index fd085c3793..ab5b5d43c7 100644
>> --- a/lib/media_player.c
>> +++ b/lib/media_player.c
>> @@ -1073,7 +1073,7 @@ bool
>> libvlc_video_direct3d_set_callbacks(libvlc_media_player_t *mp,
>> libvlc_video_direct3d_select_plane_cb select_plane_cb, void *opaque)
>>   {
>> -    var_SetString( mp, "window", "wdummy");
>> +    var_SetString( mp, "window", "wextern");
>>
>>       if ( engine == libvlc_video_direct3d_engine_d3d11 )
>>       {
>> diff --git a/modules/video_output/win32/direct3d11.c
>> b/modules/video_output/win32/direct3d11.c index e057f20fbd..b0cd73f151
>> 100644
>> --- a/modules/video_output/win32/direct3d11.c
>> +++ b/modules/video_output/win32/direct3d11.c
>> @@ -1372,7 +1372,10 @@ static int Direct3D11Open(vout_display_t *vd,
>> video_format_t *fmtp) HRESULT hr = E_FAIL;
>>
>>       libvlc_video_direct3d_device_cfg_t cfg = {
>> -        .hardware_decoding = is_d3d11_opaque( vd->source.i_chroma )
>> +        .hardware_decoding = is_d3d11_opaque( vd->source.i_chroma ),
>> +        /* bypass the size handling as the window doesn't handle the size
>> */
>> +        .repot_size_change = vd->cfg->window->ops->resize ? NULL:
>> vout_window_ReportSize,
>> +        .report_opaque     =
>> vd->cfg->window->ops->resize ? NULL: vd->cfg->window, };
> 
> This seems to assume that window->ops is a constant (after the activation
> callback returned). Currently, there is no such constraint. It should be
> documented if it's added.

OK. That's currently how it's used and even if a window module could 
decide to change how it handles things, it can do it internally with the 
same callback.

>>       libvlc_video_direct3d_device_setup_t out;
>>       ID3D11DeviceContext *d3d11_ctx = NULL;
>> diff --git a/modules/video_output/win32/direct3d9.c
>> b/modules/video_output/win32/direct3d9.c index 3f1381c3fe..d344534052
>> 100644
>> --- a/modules/video_output/win32/direct3d9.c
>> +++ b/modules/video_output/win32/direct3d9.c
>> @@ -1711,7 +1711,10 @@ static int Open(vout_display_t *vd, const
>> vout_display_cfg_t *cfg, }
>>
>>       libvlc_video_direct3d_device_cfg_t surface_cfg = {
>> -        .hardware_decoding = is_d3d9_opaque( vd->source.i_chroma )
>> +        .hardware_decoding = is_d3d9_opaque( vd->source.i_chroma ),
>> +        /* bypass the size handling as the window doesn't handle the size
>> */ +        .repot_size_change = vd->cfg->window->ops->resize ? NULL:
>> vout_window_ReportSize, +        .report_opaque     =
>> vd->cfg->window->ops->resize ? NULL: vd->cfg->window, };
>>       libvlc_video_direct3d_device_setup_t device_setup;
>>       IDirect3DDevice9 *d3d9_device = NULL;
> 
> 
> -- 
> 雷米‧德尼-库尔蒙
> 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