[FFmpeg-cvslog] avdevice/v4l2: only use average frame rate if set
Michael Niedermayer
git at videolan.org
Fri Mar 7 04:08:47 CET 2014
ffmpeg | branch: release/1.1 | Michael Niedermayer <michaelni at gmx.at> | Sun Feb 2 00:11:16 2014 +0100| [51231fa6f6e8daddf56be89bbfd509aeb94ccf2c] | committer: Michael Niedermayer
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 at gmx.at>
(cherry picked from commit 0997c2504b25cbc2856800fc063395dcd40b2bf7)
Conflicts:
libavdevice/v4l2.c
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=51231fa6f6e8daddf56be89bbfd509aeb94ccf2c
---
libavdevice/v4l2.c | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c
index 00686a4..002329e 100644
--- a/libavdevice/v4l2.c
+++ b/libavdevice/v4l2.c
@@ -495,16 +495,18 @@ 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)) {
- int64_t period = av_rescale_q(1, ctx->streams[0]->codec->time_base,
- AV_TIME_BASE_Q);
- 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);
- s->ts_mode = V4L_TS_CONVERT_READY;
- return 0;
+ 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)) {
+ int64_t period = av_rescale_q(1, ctx->streams[0]->codec->time_base,
+ AV_TIME_BASE_Q);
+ 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);
+ s->ts_mode = V4L_TS_CONVERT_READY;
+ return 0;
+ }
}
#endif
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->width = s->width;
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:
return res;
More information about the ffmpeg-cvslog
mailing list