diff options
author | Ivan Schreter <schreter@gmx.net> | 2009-02-19 23:35:59 +0000 |
---|---|---|
committer | Carl Eugen Hoyos <cehoyos@rainbow.studorg.tuwien.ac.at> | 2009-02-19 23:35:59 +0000 |
commit | b1fa4942056e8f09b5d19d913f7353245875b7a9 (patch) | |
tree | 9c421af62cc1f9f44b08d10fac08dff6f59c3d9b | |
parent | e9259f8d183c9b4d413acccdc8705acba6a656cb (diff) | |
download | ffmpeg-b1fa4942056e8f09b5d19d913f7353245875b7a9.tar.gz |
Add convergence_duration to AVCodecParserContext.
Patch by Ivan Schreter, schreter gmx net
Originally committed as revision 17468 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/avcodec.h | 19 | ||||
-rw-r--r-- | libavcodec/parser.c | 1 | ||||
-rw-r--r-- | libavformat/avformat.h | 2 | ||||
-rw-r--r-- | libavformat/utils.c | 2 |
4 files changed, 22 insertions, 2 deletions
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index e4f1831c85..b0ec18a49c 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 17 +#define LIBAVCODEC_VERSION_MINOR 18 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ @@ -3033,6 +3033,23 @@ typedef struct AVCodecParserContext { * will be used. */ int key_frame; + + /** + * Time difference in stream time base units from the pts of this + * packet to the point at which the output from the decoder has converged + * independent from the availability of previous frames. That is, the + * frames are virtually identical no matter if decoding started from + * the very first frame or from this keyframe. + * Is AV_NOPTS_VALUE if unknown. + * This field is not the display duration of the current frame. + * + * The purpose of this field is to allow seeking in streams that have no + * keyframes in the conventional sense. It corresponds to the + * recovery point SEI in H.264 and match_time_delta in NUT. It is also + * essential for some types of subtitle streams to ensure that all + * subtitles are correctly displayed after seeking. + */ + int64_t convergence_duration; } AVCodecParserContext; typedef struct AVCodecParser { diff --git a/libavcodec/parser.c b/libavcodec/parser.c index db9b2363fe..a0d604dabe 100644 --- a/libavcodec/parser.c +++ b/libavcodec/parser.c @@ -74,6 +74,7 @@ AVCodecParserContext *av_parser_init(int codec_id) s->fetch_timestamp=1; s->pict_type = FF_I_TYPE; s->key_frame = -1; + s->convergence_duration = AV_NOPTS_VALUE; return s; } diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 561e367a31..2427f84077 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 1 +#define LIBAVFORMAT_VERSION_MICRO 2 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ LIBAVFORMAT_VERSION_MINOR, \ diff --git a/libavformat/utils.c b/libavformat/utils.c index 2d66dced35..6fcca6ffbf 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -909,6 +909,8 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st, else if (pc->key_frame == -1 && pc->pict_type == FF_I_TYPE) pkt->flags |= PKT_FLAG_KEY; } + if (pc) + pkt->convergence_duration = pc->convergence_duration; } void av_destruct_packet_nofree(AVPacket *pkt) |