[vlc-devel] [PATCH 05/39] decoder: move the display creation in a separate function

Thomas Guillem thomas at gllm.fr
Mon Oct 7 09:45:07 CEST 2019


On Mon, Oct 7, 2019, at 09:43, Steve Lhomme wrote:
> On 2019-10-06 20:45, Alexandre Janniaux wrote:
> > Hi,
> > 
> > Comments inline,
> > 
> > On Wed, Oct 02, 2019 at 04:23:20PM +0200, Steve Lhomme wrote:
> >> To create the vout and decoder device we don't need to know the DPB.
> >>
> >> For now the display still holds the picture pool so the display still needs the
> >> DBP size.
> >> ---
> >>   src/input/decoder.c | 52 ++++++++++++++++++++++++++++-----------------
> >>   1 file changed, 32 insertions(+), 20 deletions(-)
> >>
> >> diff --git a/src/input/decoder.c b/src/input/decoder.c
> >> index cfa3fd237eb..c058779deb0 100644
> >> --- a/src/input/decoder.c
> >> +++ b/src/input/decoder.c
> >> @@ -459,11 +459,10 @@ static void FixDisplayFormat(decoder_t *p_dec, video_format_t *fmt)
> >>       video_format_AdjustColorSpace( fmt );
> >>   }
> >>
> >> -static int ModuleThread_UpdateVideoFormat( decoder_t *p_dec )
> >> +static int CreateVoutIfNeeded(struct decoder_owner *p_owner)
> >>   {
> >> -    struct decoder_owner *p_owner = dec_get_owner( p_dec );
> >> +    decoder_t *p_dec = &p_owner->dec;
> >>       bool need_vout = false;
> >> -    bool need_format_update = false;
> >>
> >>       if( p_owner->p_vout == NULL )
> >>       {
> >> @@ -506,22 +505,6 @@ static int ModuleThread_UpdateVideoFormat( decoder_t *p_dec )
> >>           need_vout = true;
> >>       }
> >>
> >> -    if ( memcmp( &p_dec->fmt_out.video.mastering,
> >> -                 &p_owner->fmt.video.mastering,
> >> -                 sizeof(p_owner->fmt.video.mastering)) )
> >> -    {
> >> -        msg_Dbg(p_dec, "vout update: mastering data");
> >> -        need_format_update = true;
> >> -    }
> >> -    if ( p_dec->fmt_out.video.lighting.MaxCLL !=
> >> -         p_owner->fmt.video.lighting.MaxCLL ||
> >> -         p_dec->fmt_out.video.lighting.MaxFALL !=
> >> -         p_owner->fmt.video.lighting.MaxFALL )
> >> -    {
> >> -        msg_Dbg(p_dec, "vout update: lighting data");
> >> -        need_format_update = true;
> >> -    }
> >> -
> >>       if( need_vout )
> >>       {
> >>           vout_thread_t *p_vout;
> >> @@ -591,8 +574,37 @@ static int ModuleThread_UpdateVideoFormat( decoder_t *p_dec )
> >>           vlc_fifo_Lock( p_owner->p_fifo );
> >>           p_owner->reset_out_state = true;
> >>           vlc_fifo_Unlock( p_owner->p_fifo );
> >> +
> >> +        return 1; // new vout was created
> >>       }
> >> -    else
> >> +    return 0; // vout unchanged
> >> +}
> >> +
> >> +static int ModuleThread_UpdateVideoFormat( decoder_t *p_dec )
> >> +{
> >> +    struct decoder_owner *p_owner = dec_get_owner( p_dec );
> >> +
> >> +    int created_vout = CreateVoutIfNeeded(p_owner);
> >> +    if (created_vout != 0)
> >> +        return created_vout == -1 ? -1 : 0; // error or new vout was created
> > 
> > To be honest with myself, this is becoming a bit hard to parse
> > and understand without reading both functions, as
> > `0 == VLC_SUCCESS` everywhere else in the code base so it looks
> > like an error checking, but that's also coming from the usual -1
> > or 0 return value convention issue.
> > 
> > I'm not sure of what you could do though, except trying to return
> > VLC_EGENERIC/VLC_SUCCESS here and convert the result back in
> > decoder_UpdateVideoFormat or changing its documentation.
> 
> Again, I'm trying to make the least amount of changes to get to have 
> proper push. The 0/-1 is the usual way of handling things in that file 
> so I keep using that. If I'd change it I would use an enum.

I agree with steve. I generally use the "error return style" of the file/API.

> 
> >> +
> >> +    bool need_format_update = false;
> >> +    if ( memcmp( &p_dec->fmt_out.video.mastering,
> >> +                 &p_owner->fmt.video.mastering,
> >> +                 sizeof(p_owner->fmt.video.mastering)) )
> >> +    {
> >> +        msg_Dbg(p_dec, "vout update: mastering data");
> >> +        need_format_update = true;
> >> +    }
> >> +    if ( p_dec->fmt_out.video.lighting.MaxCLL !=
> >> +         p_owner->fmt.video.lighting.MaxCLL ||
> >> +         p_dec->fmt_out.video.lighting.MaxFALL !=
> >> +         p_owner->fmt.video.lighting.MaxFALL )
> >> +    {
> >> +        msg_Dbg(p_dec, "vout update: lighting data");
> >> +        need_format_update = true;
> >> +    }
> >> +
> >>       if ( need_format_update )
> >>       {
> >>           /* the format has changed but we don't need a new vout */
> >> --
> >> 2.17.1
> >>
> >> _______________________________________________
> >> vlc-devel mailing list
> >> To unsubscribe or modify your subscription options:
> >> https://mailman.videolan.org/listinfo/vlc-devel
> > 
> > Regards,
> > 
> > --
> > Alexandre Janniaux
> > Videolabs
> > _______________________________________________
> > 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