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

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


The API didn't have two pictures but it was still possible to hack and 
pass 2 as done in this patch:
https://patches.videolan.org/patch/21637/

Now that vout_display_Prepare() returns a picture it's trickier or we'd 
have to tell the prepare which eye(s) the prepare is for.

But it seems it's only used by the splitter so we could assume it 
doesn't support 3D for now (although it may be good to "split" the two 
eyes on different displays).

On 14/01/2019 10:17, Rémi Denis-Courmont wrote:
> What "new" restriction? Prepare and display callbacks have been 
> strictly paired ever since they were introduced ten years ago.
>
> Le 14 janvier 2019 11:12:21 GMT+02:00, Steve Lhomme <robux4 at ycbcr.xyz> 
> a écrit :
>
>     The question is "Why this change ?" not "Why is this documented ?".
>
>     I want to know why this new restriction and if it will make 3D
>     impossible with this new architecture.
>
>     On 14/01/2019 10:03, Rémi Denis-Courmont wrote:
>
>         Look, you don't have to write documentation if you don't want
>         to, but please don't ask me why I write some. Le 14 janvier
>         2019 09:12:16 GMT+02:00, Steve Lhomme <robux4 at ycbcr.xyz> a
>         écrit : 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
>         ------------------------------------------------------------------------
>         vlc-devel mailing list To unsubscribe or modify your
>         subscription options:
>         https://mailman.videolan.org/listinfo/vlc-devel -- Envoyé de
>         mon appareil Android avec Courriel K-9 Mail. Veuillez excuser
>         ma brièveté.
>         ------------------------------------------------------------------------
>         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
>
>
> -- 
> Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez 
> excuser ma brièveté.
>
> _______________________________________________
> 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