[FFmpeg-cvslog] lavd/v4l2: fix bug in init_convert_timestamp()

Giorgio Vazzana git at videolan.org
Tue Mar 12 17:35:46 CET 2013


ffmpeg | branch: master | Giorgio Vazzana <mywing81 at gmail.com> | Mon Mar 11 16:39:52 2013 +0100| [ee4a6586952ba0ac8309468b04631da12767cebd] | committer: Nicolas George

lavd/v4l2: fix bug in init_convert_timestamp()

The current code returned a period=0, resulting in identical pts for all frames
after time-filtering. This is because AV_TIME_BASE_Q={1, AV_TIME_BASE} and
not {AV_TIME_BASE, 1}. With this patch the correct period in microseconds is computed.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=ee4a6586952ba0ac8309468b04631da12767cebd
---

 libavdevice/v4l2.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c
index dec82b6..0c1eb85 100644
--- a/libavdevice/v4l2.c
+++ b/libavdevice/v4l2.c
@@ -527,8 +527,8 @@ static int init_convert_timestamp(AVFormatContext *ctx, int64_t ts)
     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, AV_TIME_BASE_Q,
-                                      ctx->streams[0]->avg_frame_rate);
+        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);



More information about the ffmpeg-cvslog mailing list