From b442ca69d9d3cc50f00b43a25b200631cfb1e9ec Mon Sep 17 00:00:00 2001 From: Nicolas George Date: Thu, 30 Jun 2011 19:45:22 +0200 Subject: [PATCH] lavf: add an API to get output timestamps. --- libavformat/avformat.h | 21 +++++++++++++++++++++ libavformat/utils.c | 9 +++++++++ 2 files changed, 30 insertions(+) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 1734649a95..6069f19950 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -316,6 +316,9 @@ typedef struct AVOutputFormat { const AVClass *priv_class; ///< AVClass for the private context + void (*get_output_timestamp)(struct AVFormatContext *s, int stream, + int64_t *dts, int64_t *wall); + /* private fields */ struct AVOutputFormat *next; } AVOutputFormat; @@ -1518,6 +1521,24 @@ int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, */ int av_write_trailer(AVFormatContext *s); +/** + * Get timing information for the data currently output. + * The exact meaning of "currently output" depends on the format. + * It is mostly relevant for devices that have an internal buffer and/or + * work in real time. + * @param s media file handle + * @param stream stream in the media file + * @param dts[out] DTS of the last packet output for the stream, in stream + * time_base units + * @param wall[out] absolute time when that packet whas output, + * in microsecond + * @return 0 if OK, AVERROR(ENOSYS) if the format does not support it + * Note: some formats or devices may not allow to measure dts and wall + * atomically. + */ +int av_get_output_timestamp(struct AVFormatContext *s, int stream, + int64_t *dts, int64_t *wall); + #if FF_API_DUMP_FORMAT /** * @deprecated Deprecated in favor of av_dump_format(). diff --git a/libavformat/utils.c b/libavformat/utils.c index b3f0e12a65..da240f68e8 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -3285,6 +3285,15 @@ fail: return ret; } +int av_get_output_timestamp(struct AVFormatContext *s, int stream, + int64_t *dts, int64_t *wall) +{ + if (!s->oformat || !s->oformat->get_output_timestamp) + return AVERROR(ENOSYS); + s->oformat->get_output_timestamp(s, stream, dts, wall); + return 0; +} + void ff_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx) { int i, j;