• Trent Piepho's avatar
    V4L/DVB (11913): cx231xx: TRY_FMT should not actually set anything · 1ca27379
    Trent Piepho authored
    In the TRY_FMT handler the function get_scale() is called to find what the
    scaler hardware will produce for a requested size.
    The problem is that get_scale(struct cx231xx *dev, ..., unsigned int *vscale,
    unsigned int *hscale) saves the calculated scale values into both the
    pointer arguments and into dev's hscale and vscale fields.  TRY_FMT shouldn't
    actually change anything in the device state.
    The code to in get_scale() that writes to dev->[hv]scale can just be
    deleted.  In all cases when dev's fields should be modified, get_scale()
    was called with get_scale(dev, ..., &dev->hscale, &dev->vscale), so dev was
    getting updated anyway.
    This didn't actually cause a problem because nothing ever actually made use
    of the hscale and vscale fields.  I changed cx231xx_resolution_set() to use
    those fields rather than re-calculate them with a call to get_scale().
    Updating [hv]scale in cx231xx_resolution_set() isn't necessary because
    every call of cx231xx_resolution_set() was already preceded by a call to
    get_scale() or setting the [hv]scale fields, so they will be always be
    up-to-date w.r.t. width and height.
    Removing the call to get_scale() from cx231xx_resolution_set() allowed
    making get_scale() a static function, which is a good thing for something
    with such a short name.  There is already another function with the same
    name in the em28xx driver, but that one is static.
    Signed-off-by: default avatarTrent Piepho <xyzzy@speakeasy.org>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
cx231xx-video.c 57.4 KB