[FFmpeg-devel] [PATCH 2/2] avformat/av1dec: Redo flushing of bsf

James Almer jamrial at gmail.com
Thu Nov 14 16:23:49 EET 2019


On 11/14/2019 11:06 AM, Andreas Rheinhardt wrote:
> The current approach has two different calls to av_bsf_send_packet():
> A normal one, sending a packet; and an extraordinary one just for
> flushing. These can be unified into one by making use of the newly
> documented fact that av_bsf_send_packet() allows to signal flushing via
> empty packets (i.e. packets without data and side-data).
> 
> This also fixes CID 1455685 which resulted from the fact that the call
> for flushing was not checked given that it couldn't fail.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
> Untested as I didn't have an annex b sample.
> 
>  libavformat/av1dec.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/libavformat/av1dec.c b/libavformat/av1dec.c
> index a0cad55668..5e7a057cb7 100644
> --- a/libavformat/av1dec.c
> +++ b/libavformat/av1dec.c
> @@ -193,7 +193,6 @@ retry:
>      if (avio_feof(s->pb)) {
>          if (c->temporal_unit_size || c->frame_unit_size)
>              return AVERROR(EIO);
> -        av_bsf_send_packet(c->bsf, NULL);
>          goto end;
>      }
>  
> @@ -222,6 +221,7 @@ retry:
>      c->temporal_unit_size -= obu_unit_size + len;
>      c->frame_unit_size -= obu_unit_size + len;
>  
> +end:
>      ret = av_bsf_send_packet(c->bsf, pkt);
>      if (ret < 0) {
>          av_log(s, AV_LOG_ERROR, "Failed to send packet to "
> @@ -229,7 +229,6 @@ retry:
>          return ret;
>      }
>  
> -end:
>      ret = av_bsf_receive_packet(c->bsf, pkt);
>      if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF)
>          av_log(s, AV_LOG_ERROR, "av1_frame_merge filter failed to "

Will test and apply. Thanks.


More information about the ffmpeg-devel mailing list