• Seongyong Park's avatar
    media: video-i2c: more precise intervals between frames · 439b87fc
    Seongyong Park authored
    MLX90640 should ideally be working without a frame skip.
    In short, if a frame is skipped, then half of a frame loses correction
    information, having no way to retrieve its original compensation.
    
    This patch improves the timing in three ways:
    
    1) Replaced schedule_timeout_interruptible() to usleep_range()
    The former "only ensures that it will sleep for at least
    schedule_delay (if not interrupted)", as pointed out by mchehab.
    As a result, the frame rate could lag behind than the actual capability
    of the hardware
    (Raspberry Pi would show a few Hz slower than set value)
    
    2) Calculation based on us, not jiffies
    Jiffies usually has resolution of 100Hz, and possibly even cruder.
    MLX90640 can go up to 64Hz frame rate, which does not make sense to
    calculate the interval with aforementioned resolution.
    
    3) Interval calculation based on the last frame's end time
    Using the start time of the current frame will probably make tiny bit
    of drift every time. This made more sense when I didn't realize 1),
    but it still makes sense without adding virtually any complexity,
    so this stays in.
    Signed-off-by: default avatarSeongyong Park <euphoriccatface@gmail.com>
    Acked-by: default avatarMatt Ranostay <matt.ranostay@konsulko.com>
    Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
    439b87fc
video-i2c.c 23.1 KB