[FFmpeg-devel] [PATCH v2 4/4] avformat/mux: Set AV_PKT_FLAG_KEY for is_intra_only packet
lance.lmwang at gmail.com
lance.lmwang at gmail.com
Tue Apr 21 07:48:55 EEST 2020
From: Limin Wang <lance.lmwang at gmail.com>
delete the previous change of ffmpeg.c and movenc.c as mux.c will be
in charge of setting AV_PKT_FLAG_KEY.
Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
---
fftools/ffmpeg.c | 1 -
libavformat/internal.h | 2 ++
libavformat/mux.c | 7 ++++++-
libavformat/tests/movenc.c | 1 -
4 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c
index 293561a8b1..d896b14a14 100644
--- a/fftools/ffmpeg.c
+++ b/fftools/ffmpeg.c
@@ -1056,7 +1056,6 @@ static void do_subtitle_out(OutputFile *of,
else
pkt.pts += av_rescale_q(sub->end_display_time, (AVRational){ 1, 1000 }, ost->mux_timebase);
}
- pkt.flags |= AV_PKT_FLAG_KEY;
pkt.dts = pkt.pts;
output_packet(of, &pkt, ost, 0);
}
diff --git a/libavformat/internal.h b/libavformat/internal.h
index 716e42cc3e..c4fac5cc76 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -189,6 +189,8 @@ struct AVStreamInternal {
*/
int need_context_update;
+ int is_intra_only;
+
FFFrac *priv_pts;
};
diff --git a/libavformat/mux.c b/libavformat/mux.c
index a6253f5430..ea6524f579 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -357,6 +357,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
if (desc && desc->props & AV_CODEC_PROP_REORDER)
st->internal->reorder = 1;
+ st->internal->is_intra_only = ff_is_intra_only(par->codec_id);
+
if (of->codec_tag) {
if ( par->codec_tag
&& par->codec_id == AV_CODEC_ID_RAWVIDEO
@@ -773,6 +775,7 @@ static int check_packet(AVFormatContext *s, AVPacket *pkt)
static int prepare_input_packet(AVFormatContext *s, AVPacket *pkt)
{
int ret;
+ AVStream *st = s->streams[pkt->stream_index];
ret = check_packet(s, pkt);
if (ret < 0)
@@ -781,7 +784,6 @@ static int prepare_input_packet(AVFormatContext *s, AVPacket *pkt)
#if !FF_API_COMPUTE_PKT_FIELDS2 || !FF_API_LAVF_AVCTX
/* sanitize the timestamps */
if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) {
- AVStream *st = s->streams[pkt->stream_index];
/* when there is no reordering (so dts is equal to pts), but
* only one of them is set, set the other as well */
@@ -818,6 +820,9 @@ static int prepare_input_packet(AVFormatContext *s, AVPacket *pkt)
}
}
#endif
+ /* update flags */
+ if (st->internal->is_intra_only)
+ pkt->flags |= AV_PKT_FLAG_KEY;
return 0;
}
diff --git a/libavformat/tests/movenc.c b/libavformat/tests/movenc.c
index 0ff87da7d6..1d15d97ad9 100644
--- a/libavformat/tests/movenc.c
+++ b/libavformat/tests/movenc.c
@@ -256,7 +256,6 @@ static void mux_frames(int n, int c)
pkt.dts = pkt.pts = audio_dts;
pkt.stream_index = 1;
pkt.duration = audio_duration;
- pkt.flags |= AV_PKT_FLAG_KEY;
audio_dts += audio_duration;
} else {
if (frames == end_frames)
--
2.21.0
More information about the ffmpeg-devel
mailing list