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

Thomas Guillem thomas at gllm.fr
Fri Mar 13 16:12:51 CET 2020


And OK with the set.

On Fri, Mar 13, 2020, at 16:11, Thomas Guillem wrote:
> 
> 
> On Fri, Mar 13, 2020, at 13:35, Steve Lhomme wrote:
> > This time it's a string.
> We should also add it for vlc_player_t. The QT preferences will need it too.
> 
> > 
> > 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.
> OK with that.
> > 
> > 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
> > > 
> > _______________________________________________
> > 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