[vlc-devel] [vlc-commits] display: convert picture in vout_display_Prepare()

Steve Lhomme robux4 at ycbcr.xyz
Mon Jan 14 08:12:16 CET 2019


Hi,

On 12/01/2019 14:43, Rémi Denis-Courmont wrote:
> vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Wed Jan  2 14:59:31 2019 +0200| [353ec59c3f7864b3cb5e4dc166eebea6f8924c27] | committer: Rémi Denis-Courmont
>
> display: convert picture in vout_display_Prepare()
>
> This allows non-core vout display usage without assuming DR.
>
>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=353ec59c3f7864b3cb5e4dc166eebea6f8924c27
> ---
>
>   include/vlc_vout_display.h      | 27 +++++++++++++++++++++------
>   src/libvlccore.sym              |  1 +
>   src/video_output/display.c      | 19 ++++++++++++++-----
>   src/video_output/video_output.c |  4 ++--
>   4 files changed, 38 insertions(+), 13 deletions(-)
>
> diff --git a/include/vlc_vout_display.h b/include/vlc_vout_display.h
> index 9c343fbcb6..04dc010e3b 100644
> --- a/include/vlc_vout_display.h
> +++ b/include/vlc_vout_display.h
> @@ -312,13 +312,28 @@ VLC_API void vout_display_Delete(vout_display_t *);
>   
>   /**
>    * Prepares a picture for display.
> + *
> + * This renders a picture for subsequent display, with vout_display_Display().
> + *
> + * \note A reference to the input picture is consumed by the function, which
> + * returns a reference to an output picture for display. The input and output
> + * picture may or may not be equal depending on the underlying display setup.
> + *
> + * \bug Currently, only one picture can be prepared at a time. It must be

This is going to break 3D branches (which are bound to be merged in 
4.0). Why this change ?

> + * displayed with vout_display_Display() before any picture is prepared or
> + * before the display is destroyd with vout_display_Delete().
> + *
> + \ bug Rendering subpictures is not supported with this function yet.
> + * \c subpic must be @c NULL .
> + *
> + * \param vd display to prepare the picture for
> + * \param picture picure to be prepared

typo

> + * \param subpic reserved, must be NULL
> + * \param date intended time to show the picture
> + * \return The prepared picture is returned, NULL on error.
>    */
> -static inline void vout_display_Prepare(vout_display_t *vd, picture_t *picture,
> -                                        subpicture_t *subpic, vlc_tick_t date)
> -{
> -    if (vd->prepare != NULL)
> -        vd->prepare(vd, picture, subpic, date);
> -}
> +VLC_API picture_t *vout_display_Prepare(vout_display_t *vd, picture_t *picture,
> +                                        subpicture_t *subpic, vlc_tick_t date);
>   
>   /**
>    * Displays a picture.
> diff --git a/src/libvlccore.sym b/src/libvlccore.sym
> index 87a656f62d..4551406515 100644
> --- a/src/libvlccore.sym
> +++ b/src/libvlccore.sym
> @@ -752,6 +752,7 @@ vout_display_SendEventPicturesInvalid
>   vout_display_SendMouseMovedDisplayCoordinates
>   vout_display_New
>   vout_display_Delete
> +vout_display_Prepare
>   xml_Create
>   text_style_Copy
>   text_style_Create
> diff --git a/src/video_output/display.c b/src/video_output/display.c
> index d47aa826eb..56c16c1398 100644
> --- a/src/video_output/display.c
> +++ b/src/video_output/display.c
> @@ -453,6 +453,17 @@ picture_t *vout_FilterDisplay(vout_display_t *vd, picture_t *picture)
>       return picture;
>   }
>   
> +picture_t *vout_display_Prepare(vout_display_t *vd, picture_t *picture,
> +                                subpicture_t *subpic, vlc_tick_t date)
> +{
> +    assert(subpic == NULL); /* TODO */
> +    picture = vout_FilterDisplay(vd, picture);
> +
> +    if (picture != NULL && vd->prepare != NULL)
> +        vd->prepare(vd, picture, subpic, date);
> +    return picture;
> +}
> +
>   void vout_FilterFlush(vout_display_t *vd)
>   {
>       vout_display_priv_t *osys = container_of(vd, vout_display_priv_t, display);
> @@ -860,11 +871,9 @@ static void SplitterPrepare(vout_display_t *vd,
>           return;
>       }
>   
> -    for (int i = 0; i < sys->count; i++) {
> -        sys->picture[i] = vout_FilterDisplay(sys->display[i], sys->picture[i]);
> -        if (sys->picture[i])
> -            vout_display_Prepare(sys->display[i], sys->picture[i], NULL, date);
> -    }
> +    for (int i = 0; i < sys->count; i++)
> +        sys->picture[i] = vout_display_Prepare(sys->display[i],
> +                                               sys->picture[i], NULL, date);
>   }
>   static void SplitterDisplay(vout_display_t *vd, picture_t *picture)
>   {
> diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
> index 41daa5cf51..314e06004f 100644
> --- a/src/video_output/video_output.c
> +++ b/src/video_output/video_output.c
> @@ -1154,8 +1154,8 @@ static int ThreadDisplayRenderPicture(vout_thread_t *vout, bool is_forced)
>       if (!do_dr_spu && sys->spu_blend != NULL && subpic != NULL)
>           picture_BlendSubpicture(todisplay, sys->spu_blend, subpic);
>   
> -    vout_display_Prepare(vd, todisplay, do_dr_spu ? subpic : NULL,
> -                         todisplay->date);
> +    if (vd->prepare != NULL)
> +        vd->prepare(vd, todisplay, do_dr_spu ? subpic : NULL, todisplay->date);
>   
>       vout_chrono_Stop(&sys->render);
>   #if 0
>
> _______________________________________________
> vlc-commits mailing list
> vlc-commits at videolan.org
> https://mailman.videolan.org/listinfo/vlc-commits



More information about the vlc-devel mailing list