diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2013-08-27 22:44:14 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2013-08-28 17:54:47 +0300 |
commit | cb8f70c96e14c1b4824ef23d21d78d10fc5a4b93 (patch) | |
tree | 8fec8fcd82c39eceafb1b5c478c25ceaa8e4943c /libavfilter | |
parent | 48f2e53ad0c8586369c3ce88712f0b9cec5a4c47 (diff) | |
download | ffmpeg-cb8f70c96e14c1b4824ef23d21d78d10fc5a4b93.tar.gz |
vf_fps: use double constants for default/min/max for start_time
When using AV_NOPTS_VALUE (which expands to INT64_C(0x8000000000000000))
as union initializer for a double field, the c99 converter needs to
interpret this constant when filling the union initializer, and it is
interpreted as a positive value.
When converting AV_NOPTS_VALUE to a double, MSVC 2010 ends up with
the same positive value as the c99 converter, while MSVC 2012 gets
a negative value.
This results in an infite loop in various FATE tests on MSVC 2012.
Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavfilter')
-rw-r--r-- | libavfilter/vf_fps.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/libavfilter/vf_fps.c b/libavfilter/vf_fps.c index 4583c89b3b..5b2818529a 100644 --- a/libavfilter/vf_fps.c +++ b/libavfilter/vf_fps.c @@ -21,6 +21,8 @@ * a filter enforcing given constant framerate */ +#include <float.h> + #include "libavutil/common.h" #include "libavutil/fifo.h" #include "libavutil/mathematics.h" @@ -56,7 +58,7 @@ typedef struct FPSContext { #define V AV_OPT_FLAG_VIDEO_PARAM static const AVOption options[] = { { "fps", "A string describing desired output framerate", OFFSET(fps), AV_OPT_TYPE_STRING, { .str = "25" }, .flags = V }, - { "start_time", "Assume the first PTS should be this value.", OFFSET(start_time), AV_OPT_TYPE_DOUBLE, { .dbl = AV_NOPTS_VALUE}, INT64_MIN, INT64_MAX, V }, + { "start_time", "Assume the first PTS should be this value.", OFFSET(start_time), AV_OPT_TYPE_DOUBLE, { .dbl = DBL_MAX}, -DBL_MAX, DBL_MAX, V }, { NULL }, }; @@ -181,7 +183,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *buf) if (ret < 0) return ret; - if (s->start_time != AV_NOPTS_VALUE) { + if (s->start_time != DBL_MAX) { double first_pts = s->start_time * AV_TIME_BASE; first_pts = FFMIN(FFMAX(first_pts, INT64_MIN), INT64_MAX); s->first_pts = s->pts = av_rescale_q(first_pts, AV_TIME_BASE_Q, |