[vlc-devel] [PATCH] picture: fix missing video_format_t attributes from the picture
Steve Lhomme
robux4 at ycbcr.xyz
Mon Oct 1 13:40:05 CEST 2018
On 28/09/2018 14:04, Filip Roséen wrote:
>
> Hi,
>
> On 2018-09-28 12:26, Steve Lhomme wrote:
>
> |regression introduced by 2054d46ba29d7986d8403656170ff9445ab18efc
> --- src/misc/picture.c | 1 + 1 file changed, 1 insertion(+) diff
> --git a/src/misc/picture.c b/src/misc/picture.c index
> f8059a603e3..f61e0a3d0ef 100644 --- a/src/misc/picture.c +++
> b/src/misc/picture.c @@ -189,6 +189,7 @@ static picture_priv_t
> *picture_NewPrivate(const video_format_t *restrict p_fmt) memset(
> p_picture, 0, sizeof( *p_picture ) ); + p_picture->format = *p_fmt;|
>
> LGTM, as long as we are sure that we will not (once again) step into
> life-time issues related to the ownership of
> |video_format_t.p_palette| (but as it worked before, well.. it at
> least wouldn’t get worse than what we had previously).
>
> |/* Make sure the real dimensions are a multiple of 16 */ if(
> picture_Setup( p_picture, p_fmt ) ) {|
>
> This regression was noticed as part of a conversation between me and
> |haasn| on |#videolan| (as |haasn| was confused about what caused his
> previously working code to all of a sudden behave weird).
>
> I started digging in the commit-log, and found that |picture_t.format|
> a long time in the past had a different type than |video_format_t|,
> but later a |typedef| was introduced to make |video_frame_format_t| an
> alias for |video_format_t|.
>
> * 1a67448183a: … include/vlc_video.h: extended video_frame_format_t
> <http://git.videolan.org/?p=vlc.git;a=commit;h=1a67448183a9c5ab7b5b427fb80d2d1a2e34ff8d>
>
> |haasn| is working on |video_output/vulcan|. As the information he is
> after is available in |vout_display_t.fmt| he simply modified his
> patch to use that instead of the format associated with a single
> |picture_t|.
>
> So, my question is (ignoring the obvious breakage of current modules
> relying on |picture_t.format| having all its fields populated and not
> only those from |src/misc/picture.c:picture_Setup|): should we go back
> to the previous behavior where a smaller distinct type,
> |video_frame_format_t|, is used for each |picture_t|?
>
> We of course have the issue where a /format-change/ mid-stream will
> result in weird behavior due to the async nature of changing the
> associated format, and the |picture_t|-processing not matching the
> update (applying the format to too many or too few frames). After a
> very quick conversation with |tguillem| this is something we can and
> will address at the /vout-workshop/, though I would like to plant this
> seed (regarding change of type and things that might need changing)
> here on |vlc-devel| to get as many opinions as possible prior to said
> workshop.
>
IMO the picture_t.format is the one to use, precisely because it can
change between each picture. Right now the changes have to be populated
in the pool that creates/provides these pictures and it's a mess. Apart
from pixels/sizes needed by the decoder everything else if probably fine
being dynamic (in the picture). So yes, we need to clean that and come
up with basic rules.
> Any opinions about this that might be worth sharing prior to any
> extensive /workshop/ on the matter?
>
> Best Regards,
> Filip
>
>
>
> _______________________________________________
> 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