[vlc-devel] [vlc-commits] vout: add still frame state

Thomas Guillem thomas at gllm.fr
Fri Nov 16 10:32:04 CET 2018



On Fri, Nov 16, 2018, at 09:27, Francois Cartegnie wrote:
> vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Thu Nov 
> 15 22:03:39 2018 +0100| [1ec1fb37f3a50ab4376aa5fbae18e417ea895ce4] | 
> committer: Francois Cartegnie
> 
> vout: add still frame state
> 
> still frames after a discontinuity must not
> be revoked by previously sent pts
> 
> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1ec1fb37f3a50ab4376aa5fbae18e417ea895ce4
> ---
> 
>  include/vlc_picture.h         | 1 +
>  modules/codec/avcodec/video.c | 2 ++
>  src/input/decoder.c           | 5 +++++
>  src/misc/picture.c            | 2 ++
>  4 files changed, 10 insertions(+)
> 
> diff --git a/include/vlc_picture.h b/include/vlc_picture.h
> index 6aca13bca0..0f34cbb7d4 100644
> --- a/include/vlc_picture.h
> +++ b/include/vlc_picture.h
> @@ -91,6 +91,7 @@ struct picture_t
>      /**@{*/
>      vlc_tick_t      date;                                  /**< display date */
>      bool            b_force;
> +    bool            b_still;
>      /**@}*/
>  
>      /** \name Picture dynamic properties
> diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/
> video.c
> index 4f5fde5e5f..50cae13171 100644
> --- a/modules/codec/avcodec/video.c
> +++ b/modules/codec/avcodec/video.c
> @@ -1305,6 +1305,8 @@ static int DecodeBlock( decoder_t *p_dec, block_t 
> **pp_block )
>          /* Send decoded frame to vout */
>          if (i_pts != VLC_TICK_INVALID)
>          {
> +            if(p_frame_info->b_eos)
> +                p_pic->b_still = true;
>              p_sys->b_first_frame = false;
>              decoder_QueueVideo( p_dec, p_pic );
>          }

The avcodec module change should have been in a separate commit.

> diff --git a/src/input/decoder.c b/src/input/decoder.c
> index 5ce154678e..da83cf1b9f 100644
> --- a/src/input/decoder.c
> +++ b/src/input/decoder.c
> @@ -1151,6 +1151,11 @@ static void DecoderPlayVideo( decoder_t *p_dec, 
> picture_t *p_picture,
>              vout_Flush( p_vout, p_picture->date );
>              p_owner->i_last_rate = i_rate;
>          }
> +        else if( p_picture->b_still )
> +        {
> +            /* Ensure no earlier higher pts breaks still state */
> +            vout_Flush( p_vout, p_picture->date );
> +        }
>          vout_PutPicture( p_vout, p_picture );
>      }
>      else
> diff --git a/src/misc/picture.c b/src/misc/picture.c
> index 90c6bd7c8d..7da1a07035 100644
> --- a/src/misc/picture.c
> +++ b/src/misc/picture.c
> @@ -93,6 +93,7 @@ void picture_Reset( picture_t *p_picture )
>      /* */
>      p_picture->date = VLC_TICK_INVALID;
>      p_picture->b_force = false;
> +    p_picture->b_still = false;
>      p_picture->b_progressive = false;
>      p_picture->i_nb_fields = 2;
>      p_picture->b_top_field_first = false;
> @@ -387,6 +388,7 @@ void picture_CopyProperties( picture_t *p_dst, const 
> picture_t *p_src )
>  {
>      p_dst->date = p_src->date;
>      p_dst->b_force = p_src->b_force;
> +    p_dst->b_still = p_src->b_still;
>  
>      p_dst->b_progressive = p_src->b_progressive;
>      p_dst->i_nb_fields = p_src->i_nb_fields;
> 
> _______________________________________________
> vlc-commits mailing list
> vlc-commits at videolan.org
> https://mailman.videolan.org/listinfo/vlc-commits


More information about the vlc-devel mailing list