mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-01-29 10:43:15 +00:00
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>
This commit is contained in:
parent
afe485ee6b
commit
d75e7a9a83
@ -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) {
|
||||
|
@ -535,6 +535,7 @@ typedef struct OutputStream {
|
||||
int inputs_done;
|
||||
|
||||
const char *attachment_filename;
|
||||
int seen_kf;
|
||||
int copy_initial_nonkeyframes;
|
||||
int copy_prior_start;
|
||||
char *disposition;
|
||||
|
Loading…
Reference in New Issue
Block a user