aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas George <nicolas.george@normalesup.org>2011-06-30 19:45:22 +0200
committerNicolas George <nicolas.george@normalesup.org>2011-07-01 09:49:27 +0200
commitb442ca69d9d3cc50f00b43a25b200631cfb1e9ec (patch)
tree1d8afaadda50785a4580a35678892f6c28a20b9f
parentd1b029dec97cd740943eb0222a519a571e3349c5 (diff)
downloadffmpeg-b442ca69d9d3cc50f00b43a25b200631cfb1e9ec.tar.gz
lavf: add an API to get output timestamps.
-rw-r--r--libavformat/avformat.h21
-rw-r--r--libavformat/utils.c9
2 files changed, 30 insertions, 0 deletions
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;