aboutsummaryrefslogtreecommitdiffstats
path: root/libavdevice/v4l2.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-02-02 00:11:16 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-02-02 00:15:11 +0100
commit0997c2504b25cbc2856800fc063395dcd40b2bf7 (patch)
treeba082da8ec8f9bd12b23ef313c6e928c59929a1e /libavdevice/v4l2.c
parent4aa4533ee8b51a1e6bdc4fbffaf90aa2b14e2c9f (diff)
downloadffmpeg-0997c2504b25cbc2856800fc063395dcd40b2bf7.tar.gz
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>
Diffstat (limited to 'libavdevice/v4l2.c')
-rw-r--r--libavdevice/v4l2.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c
index b4f65d388d..96a272c192 100644
--- a/libavdevice/v4l2.c
+++ b/libavdevice/v4l2.c
@@ -447,18 +447,20 @@ static int init_convert_timestamp(AVFormatContext *ctx, int64_t ts)
return 0;
}
#if HAVE_CLOCK_GETTIME && defined(CLOCK_MONOTONIC)
- now = av_gettime_monotonic();
- if (s->ts_mode == V4L_TS_MONO2ABS ||
- (ts <= now + 1 * AV_TIME_BASE && ts >= now - 10 * AV_TIME_BASE)) {
- AVRational tb = {AV_TIME_BASE, 1};
- int64_t period = av_rescale_q(1, tb, ctx->streams[0]->avg_frame_rate);
- av_log(ctx, AV_LOG_INFO, "Detected monotonic timestamps, converting\n");
- /* microseconds instead of seconds, MHz instead of Hz */
- s->timefilter = ff_timefilter_new(1, period, 1.0E-6);
- if (!s->timefilter)
- return AVERROR(ENOMEM);
- s->ts_mode = V4L_TS_CONVERT_READY;
- return 0;
+ if (ctx->streams[0]->avg_frame_rate.num) {
+ now = av_gettime_monotonic();
+ if (s->ts_mode == V4L_TS_MONO2ABS ||
+ (ts <= now + 1 * AV_TIME_BASE && ts >= now - 10 * AV_TIME_BASE)) {
+ AVRational tb = {AV_TIME_BASE, 1};
+ int64_t period = av_rescale_q(1, tb, ctx->streams[0]->avg_frame_rate);
+ av_log(ctx, AV_LOG_INFO, "Detected monotonic timestamps, converting\n");
+ /* microseconds instead of seconds, MHz instead of Hz */
+ s->timefilter = ff_timefilter_new(1, period, 1.0E-6);
+ if (!s->timefilter)
+ return AVERROR(ENOMEM);
+ s->ts_mode = V4L_TS_CONVERT_READY;
+ return 0;
+ }
}
#endif
av_log(ctx, AV_LOG_ERROR, "Unknown timestamps\n");
@@ -949,7 +951,8 @@ static int v4l2_read_header(AVFormatContext *s1)
st->codec->codec_tag = MKTAG('Y', 'V', 'U', '9');
st->codec->width = s->width;
st->codec->height = s->height;
- st->codec->bit_rate = s->frame_size * av_q2d(st->avg_frame_rate) * 8;
+ if (st->avg_frame_rate.den)
+ st->codec->bit_rate = s->frame_size * av_q2d(st->avg_frame_rate) * 8;
return 0;
}