|
|
@@ -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, |
|
|
|