diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 4dfd6d7ce1..62e4e474fe 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -30,7 +30,7 @@ #include "libavutil/avutil.h" #define LIBAVCODEC_VERSION_MAJOR 52 -#define LIBAVCODEC_VERSION_MINOR 15 +#define LIBAVCODEC_VERSION_MINOR 16 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ @@ -3025,6 +3025,14 @@ typedef struct AVCodecParserContext { int64_t offset; ///< byte offset from starting packet start int64_t cur_frame_end[AV_PARSER_PTS_NB]; + + /*! + * Set by parser to 1 for key frames and 0 for non-key frames. + * It is initialized to -1, so if the parser doesn't set this flag, + * old-style fallback using FF_I_TYPE picture type as key frames + * will be used. + */ + int key_frame; } AVCodecParserContext; typedef struct AVCodecParser { diff --git a/libavcodec/parser.c b/libavcodec/parser.c index 6a801ec0da..db9b2363fe 100644 --- a/libavcodec/parser.c +++ b/libavcodec/parser.c @@ -73,6 +73,7 @@ AVCodecParserContext *av_parser_init(int codec_id) } s->fetch_timestamp=1; s->pict_type = FF_I_TYPE; + s->key_frame = -1; return s; } diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 3640808765..561e367a31 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -23,7 +23,7 @@ #define LIBAVFORMAT_VERSION_MAJOR 52 #define LIBAVFORMAT_VERSION_MINOR 29 -#define LIBAVFORMAT_VERSION_MICRO 0 +#define LIBAVFORMAT_VERSION_MICRO 1 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ diff --git a/libavformat/utils.c b/libavformat/utils.c index d2e141a5af..2d66dced35 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -904,8 +904,10 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st, else if (pc) { pkt->flags = 0; /* keyframe computation */ - if (pc->pict_type == FF_I_TYPE) - pkt->flags |= PKT_FLAG_KEY; + if (pc->key_frame == 1) + pkt->flags |= PKT_FLAG_KEY; + else if (pc->key_frame == -1 && pc->pict_type == FF_I_TYPE) + pkt->flags |= PKT_FLAG_KEY; } }