summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-08-17 00:08:51 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-08-18 19:19:47 +0200
commit28ff17fa9761706ec5f07c07ce9ff04816536749 (patch)
treefaeb4c0ae793125d1a4786da99d23ccf14aa4bf0 /libavformat
parent92b8c9d89e7ae86bffa05393bb230d5a165b0148 (diff)
lavf: add use_wallclock_as_timestamps
This may fix Ticket730 Reviewed-by: Nicolas George <nicolas.george@normalesup.org> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/avformat.h8
-rw-r--r--libavformat/options_table.h1
-rw-r--r--libavformat/utils.c3
3 files changed, 12 insertions, 0 deletions
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 05b4fc74cf..b635ae7cf3 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -1100,6 +1100,14 @@ typedef struct AVFormatContext {
*/
int max_chunk_size;
+ /**
+ * forces the use of wallclock timestamps as pts/dts of packets
+ * This has undefined results in the presence of B frames.
+ * - encoding: unused
+ * - decoding: Set by user via AVOptions (NO direct access)
+ */
+ int use_wallclock_as_timestamps;
+
/*****************************************************************
* All fields below this line are not part of the public API. They
* may not be used outside of libavformat and can be changed and
diff --git a/libavformat/options_table.h b/libavformat/options_table.h
index 9bc0329c00..fd55df82ff 100644
--- a/libavformat/options_table.h
+++ b/libavformat/options_table.h
@@ -70,6 +70,7 @@ static const AVOption options[]={
{"careful", "consider things that violate the spec and have not been seen in the wild as errors", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_CAREFUL }, INT_MIN, INT_MAX, D, "err_detect"},
{"compliant", "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_COMPLIANT }, INT_MIN, INT_MAX, D, "err_detect"},
{"aggressive", "consider things that a sane encoder shouldnt do as an error", 0, AV_OPT_TYPE_CONST, {.dbl = AV_EF_AGGRESSIVE }, INT_MIN, INT_MAX, D, "err_detect"},
+{"use_wallclock_as_timestamps", "use wallclock as timestamps", OFFSET(use_wallclock_as_timestamps), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX-1, D},
{NULL},
};
diff --git a/libavformat/utils.c b/libavformat/utils.c
index d166d083dd..af1c2819e8 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -776,6 +776,9 @@ int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
if(s->subtitle_codec_id)st->codec->codec_id= s->subtitle_codec_id;
break;
}
+ /* TODO: audio: time filter; video: frame reordering (pts != dts) */
+ if (s->use_wallclock_as_timestamps)
+ pkt->dts = pkt->pts = av_rescale_q(av_gettime(), AV_TIME_BASE_Q, st->time_base);
if(!pktl && st->request_probe <= 0)
return ret;