avdevice/v4l2: only use average frame rate if set
It might be unset on some platforms with some drivers and some input
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 0997c2504b
)
Conflicts:
libavdevice/v4l2.c
This commit is contained in:
@@ -495,16 +495,18 @@ static int init_convert_timestamp(AVFormatContext *ctx, int64_t ts)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#if HAVE_CLOCK_GETTIME && defined(CLOCK_MONOTONIC)
|
#if HAVE_CLOCK_GETTIME && defined(CLOCK_MONOTONIC)
|
||||||
now = av_gettime_monotonic();
|
if (ctx->streams[0]->codec->time_base.den) {
|
||||||
if (s->ts_mode == V4L_TS_MONO2ABS ||
|
now = av_gettime_monotonic();
|
||||||
(ts <= now + 1 * AV_TIME_BASE && ts >= now - 10 * AV_TIME_BASE)) {
|
if (s->ts_mode == V4L_TS_MONO2ABS ||
|
||||||
int64_t period = av_rescale_q(1, ctx->streams[0]->codec->time_base,
|
(ts <= now + 1 * AV_TIME_BASE && ts >= now - 10 * AV_TIME_BASE)) {
|
||||||
AV_TIME_BASE_Q);
|
int64_t period = av_rescale_q(1, ctx->streams[0]->codec->time_base,
|
||||||
av_log(ctx, AV_LOG_INFO, "Detected monotonic timestamps, converting\n");
|
AV_TIME_BASE_Q);
|
||||||
/* microseconds instead of seconds, MHz instead of Hz */
|
av_log(ctx, AV_LOG_INFO, "Detected monotonic timestamps, converting\n");
|
||||||
s->timefilter = ff_timefilter_new(1, period, 1.0E-6);
|
/* microseconds instead of seconds, MHz instead of Hz */
|
||||||
s->ts_mode = V4L_TS_CONVERT_READY;
|
s->timefilter = ff_timefilter_new(1, period, 1.0E-6);
|
||||||
return 0;
|
s->ts_mode = V4L_TS_CONVERT_READY;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
av_log(ctx, AV_LOG_ERROR, "Unknown timestamps\n");
|
av_log(ctx, AV_LOG_ERROR, "Unknown timestamps\n");
|
||||||
@@ -892,7 +894,8 @@ static int v4l2_read_header(AVFormatContext *s1)
|
|||||||
st->codec->codec_tag = MKTAG('Y', 'V', '1', '2');
|
st->codec->codec_tag = MKTAG('Y', 'V', '1', '2');
|
||||||
st->codec->width = s->width;
|
st->codec->width = s->width;
|
||||||
st->codec->height = s->height;
|
st->codec->height = s->height;
|
||||||
st->codec->bit_rate = s->frame_size * 1/av_q2d(st->codec->time_base) * 8;
|
if (st->codec->time_base.num)
|
||||||
|
st->codec->bit_rate = s->frame_size * 1/av_q2d(st->codec->time_base) * 8;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
return res;
|
return res;
|
||||||
|
Reference in New Issue
Block a user