[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