diff --git a/transcode.c b/transcode.c index 175f913ce2409e0159645891a05e435da30163bc..090adcbaa918cd8a05e85f3ea59bfc8a28297e62 100644 --- a/transcode.c +++ b/transcode.c @@ -1,5 +1,6 @@ #include <stdio.h> #include <unistd.h> +#include <time.h> #include <libavutil/opt.h> #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> @@ -244,6 +245,22 @@ void connect_pads(AVFilterInOut **ins, AVFilterInOut **outs) } } +int checktime(time_t min) +{ + static struct timespec prev = {}; + time_t delta; + struct timespec t; + clock_gettime(CLOCK_MONOTONIC, &t); + if (t.tv_sec < prev.tv_sec) + delta = min; + else + delta = t.tv_sec - prev.tv_sec; + if (delta < min) + return 1; + memcpy(&prev, &t, sizeof(prev)); + return 0; +} + int main(int argc, char *argv[]) { int err, i, progress, _progress; @@ -327,7 +344,7 @@ int main(int argc, char *argv[]) { i = pkt.stream_index; _progress = av_rescale_q(pkt.pts, demux->streams[i]->time_base, AV_TIME_BASE_Q)*100/demux->duration; - if (_progress > progress) + if (_progress > progress || !checktime(30)) { ping_job(jobid, "running", "{\"progress\": %i, \"log\": \"%s\"}", _progress, jescape(get_avlogbuf()));