[vlc-devel] [PATCH v4 1/7] libvlc: allow selecting the video hardware acceleration

Steve Lhomme robux4 at ycbcr.xyz
Fri Mar 13 13:35:54 CET 2020


This time it's a string.

There's still no way to actually force NVDEC though. The nvdec decoder 
has lower priority than lavc and therefore is never selected. The only 
way to use it is to force --codec=nvdec.

Maybe we could give it a higher priority than lavc. After all if the 
decoder device fails to load or if another one is used, it won't be used 
and will fall back to lavc. And hardware decoders already have higher 
priority than software decoders in lavc, so long as the decoder device 
matches.

On 2020-03-13 13:28, Steve Lhomme wrote:
> Pass a string matching one of the decoder device strings.
> ---
>   include/vlc/libvlc_media_player.h | 30 ++++++++++++++++++++++++++++++
>   lib/libvlc.sym                    |  1 +
>   lib/media_player.c                |  6 ++++++
>   3 files changed, 37 insertions(+)
> 
> diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h
> index 5e0255a10ac..1d66858d28f 100644
> --- a/include/vlc/libvlc_media_player.h
> +++ b/include/vlc/libvlc_media_player.h
> @@ -503,6 +503,36 @@ void libvlc_video_set_format_callbacks( libvlc_media_player_t *mp,
>                                           libvlc_video_cleanup_cb cleanup );
>   
>   
> +/**
> + * Enumeration of the Video hardware processing acceleration to be used.
> + * can be passed to @a libvlc_video_set_hw_acceleration
> + */
> +typedef enum libvlc_video_acceleration_t {
> +    /** Pick the best hardware decoder/processor for the source material */
> +    libvlc_video_acceleration_default,
> +
> +    /** Only software processing of video */
> +    libvlc_video_acceleration_disable,
> +} libvlc_video_acceleration_t;
> +
> +/**
> + * Set the hardware acceleration system to use to decode videos.
> + *
> + * Not all videos might be decoded through the selected mode depending on the
> + * hardware and the source material.
> + *
> + * Selecting an unsupported mode for the platform or video source will result
> + * in the video being decoded/processing in software.
> + *
> + * \param mode hardware acceleration system to use like "any", "none", "dxva2",
> + *             "d3d11", "nvdec", "vdpau", etc.
> + *
> + * \version LibVLC 4.0.0 or later
> + */
> +LIBVLC_API
> +void libvlc_video_set_hw_acceleration( libvlc_media_player_t *mp,
> +                                       const char * mode );
> +
>   typedef struct
>   {
>       bool hardware_decoding; /** set if D3D11_CREATE_DEVICE_VIDEO_SUPPORT is needed for D3D11 */
> diff --git a/lib/libvlc.sym b/lib/libvlc.sym
> index 67e4dcf7482..159c67f7693 100644
> --- a/lib/libvlc.sym
> +++ b/lib/libvlc.sym
> @@ -239,6 +239,7 @@ libvlc_video_set_deinterlace
>   libvlc_video_set_format
>   libvlc_video_set_format_callbacks
>   libvlc_video_set_output_callbacks
> +libvlc_video_set_hw_acceleration
>   libvlc_video_set_key_input
>   libvlc_video_set_logo_int
>   libvlc_video_set_logo_string
> diff --git a/lib/media_player.c b/lib/media_player.c
> index 96af310c340..50d49336403 100644
> --- a/lib/media_player.c
> +++ b/lib/media_player.c
> @@ -1033,6 +1033,12 @@ void libvlc_video_set_format( libvlc_media_player_t *mp, const char *chroma,
>       var_SetInteger( mp, "vmem-pitch", pitch );
>   }
>   
> +void libvlc_video_set_hw_acceleration( libvlc_media_player_t *mp,
> +                                       const char * mode )
> +{
> +    var_SetString ( mp, "dec-dev", mode );
> +}
> +
>   bool libvlc_video_set_output_callbacks(libvlc_media_player_t *mp,
>                                          libvlc_video_engine_t engine,
>                                          libvlc_video_output_setup_cb setup_cb,
> -- 
> 2.17.1
> 
> _______________________________________________
> 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