diff options
author | James Almer <jamrial@gmail.com> | 2022-02-15 09:44:21 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2022-02-28 12:11:24 -0300 |
commit | d75e7a9a83b2774900bcb5c58236c108d11af041 (patch) | |
tree | 02f12f0864eeb70be4615a700e5b554aeed34577 /fftools/ffmpeg.c | |
parent | afe485ee6b3bbcd4b0e106eb9fc4dcf4846db1b8 (diff) | |
download | ffmpeg-d75e7a9a83b2774900bcb5c58236c108d11af041.tar.gz |
ffmpeg: ensure a keyframe was not seen before skipping packets
A keyframe could be buffered in the bsf and not be output until more packets
had been fed to it.
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'fftools/ffmpeg.c')
-rw-r--r-- | fftools/ffmpeg.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 66e5ec8c8e..d5cd010a9c 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -889,6 +889,8 @@ static void output_packet(OutputFile *of, AVPacket *pkt, /* apply the output bitstream filters */ if (ost->bsf_ctx) { + if (pkt->flags & AV_PKT_FLAG_KEY) + ost->seen_kf = 1; ret = av_bsf_send_packet(ost->bsf_ctx, eof ? NULL : pkt); if (ret < 0) goto finish; @@ -2026,7 +2028,7 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p } if ((!ost->frame_number && !(pkt->flags & AV_PKT_FLAG_KEY)) && - !ost->copy_initial_nonkeyframes) + !ost->copy_initial_nonkeyframes && !ost->seen_kf) return; if (!ost->frame_number && !ost->copy_prior_start) { |