diff mbox series

[FFmpeg-devel,1/2] fftools/ffprobe: Flush decoder after draining

Message ID AM7PR03MB666023E94052C66D504A94A68F389@AM7PR03MB6660.eurprd03.prod.outlook.com
State Accepted
Commit 26cce232d7eb6bb07e6fb2883d4c52c9edf3e3d9
Headers show
Series [FFmpeg-devel,1/2] fftools/ffprobe: Flush decoder after draining | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished

Commit Message

Andreas Rheinhardt Feb. 19, 2022, 3:08 p.m. UTC
This is a prerequisite to continue using the decoder at all
to decode the next interval (if any).
This fixes a regression introduced in commit
2a88ebd096f3c748a2d99ed1b60b22879b3c567c and reported in ticket #8657.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
I wonder whether it would not be simpler to let users reuse a decoder
after draining simply by sending new packets (without flushing).

 fftools/ffprobe.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Andreas Rheinhardt Feb. 22, 2022, 10:49 p.m. UTC | #1
Andreas Rheinhardt:
> This is a prerequisite to continue using the decoder at all
> to decode the next interval (if any).
> This fixes a regression introduced in commit
> 2a88ebd096f3c748a2d99ed1b60b22879b3c567c and reported in ticket #8657.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---
> I wonder whether it would not be simpler to let users reuse a decoder
> after draining simply by sending new packets (without flushing).
> 
>  fftools/ffprobe.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
> index 8a8e3de540..4205ddedda 100644
> --- a/fftools/ffprobe.c
> +++ b/fftools/ffprobe.c
> @@ -2730,8 +2730,11 @@ static int read_interval_packets(WriterContext *w, InputFile *ifile,
>      //Flush remaining frames that are cached in the decoder
>      for (i = 0; i < fmt_ctx->nb_streams; i++) {
>          pkt->stream_index = i;
> -        if (do_read_frames)
> +        if (do_read_frames) {
>              while (process_frame(w, ifile, frame, pkt, &(int){1}) > 0);
> +            if (ifile->streams[i].dec_ctx)
> +                avcodec_flush_buffers(ifile->streams[i].dec_ctx);
> +        }
>      }
>  
>  end:

Will apply tomorrow unless there are objections.

- Andreas
diff mbox series

Patch

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index 8a8e3de540..4205ddedda 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -2730,8 +2730,11 @@  static int read_interval_packets(WriterContext *w, InputFile *ifile,
     //Flush remaining frames that are cached in the decoder
     for (i = 0; i < fmt_ctx->nb_streams; i++) {
         pkt->stream_index = i;
-        if (do_read_frames)
+        if (do_read_frames) {
             while (process_frame(w, ifile, frame, pkt, &(int){1}) > 0);
+            if (ifile->streams[i].dec_ctx)
+                avcodec_flush_buffers(ifile->streams[i].dec_ctx);
+        }
     }
 
 end: