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:
Michael Niedermayer
2014-02-02 00:11:16 +01:00
parent c6a4083c29
commit 51231fa6f6

View File

@@ -495,6 +495,7 @@ static int init_convert_timestamp(AVFormatContext *ctx, int64_t ts)
return 0;
}
#if HAVE_CLOCK_GETTIME && defined(CLOCK_MONOTONIC)
if (ctx->streams[0]->codec->time_base.den) {
now = av_gettime_monotonic();
if (s->ts_mode == V4L_TS_MONO2ABS ||
(ts <= now + 1 * AV_TIME_BASE && ts >= now - 10 * AV_TIME_BASE)) {
@@ -506,6 +507,7 @@ static int init_convert_timestamp(AVFormatContext *ctx, int64_t ts)
s->ts_mode = V4L_TS_CONVERT_READY;
return 0;
}
}
#endif
av_log(ctx, AV_LOG_ERROR, "Unknown timestamps\n");
return AVERROR(EIO);
@@ -892,6 +894,7 @@ static int v4l2_read_header(AVFormatContext *s1)
st->codec->codec_tag = MKTAG('Y', 'V', '1', '2');
st->codec->width = s->width;
st->codec->height = s->height;
if (st->codec->time_base.num)
st->codec->bit_rate = s->frame_size * 1/av_q2d(st->codec->time_base) * 8;
out: