Skip to content

Commit

Permalink
[media] gspca/autogain_functions.h: Allow users to declare what they …
Browse files Browse the repository at this point in the history
…want

Allow users of gspca/autogain_functions.h to declare which of the autogain
algoritms they are going to use. This allows us to remove the hacks from
drivers which don't use coarse_grained_expo_autogain.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Hans de Goede authored and Mauro Carvalho Chehab committed May 7, 2012
1 parent 4fd466a commit a648e31
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 12 deletions.
6 changes: 5 additions & 1 deletion drivers/media/video/gspca/autogain_functions.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

#ifdef WANT_REGULAR_AUTOGAIN
/* auto gain and exposure algorithm based on the knee algorithm described here:
http://ytse.tricolour.net/docs/LowLightOptimization.html
Expand Down Expand Up @@ -91,7 +92,9 @@ static inline int auto_gain_n_exposure(
gain, exposure);
return retval;
}
#endif

#ifdef WANT_COARSE_EXPO_AUTOGAIN
/* Autogain + exposure algorithm for cameras with a coarse exposure control
(usually this means we can only control the clockdiv to change exposure)
As changing the clockdiv so that the fps drops from 30 to 15 fps for
Expand All @@ -103,7 +106,7 @@ static inline int auto_gain_n_exposure(
which leads to oscilating as one exposure step is huge.
Note this assumes that the sd struct for the cam in question has
exp_too_high_cnt and exp_too_high_cnt int members for use by this function.
exp_too_low_cnt and exp_too_high_cnt int members for use by this function.
Returns 0 if no changes were made, 1 if the gain and or exposure settings
where changed. */
Expand Down Expand Up @@ -177,3 +180,4 @@ static inline int coarse_grained_expo_autogain(
gain, exposure);
return retval;
}
#endif
2 changes: 2 additions & 0 deletions drivers/media/video/gspca/nw80x.c
Original file line number Diff line number Diff line change
Expand Up @@ -2001,6 +2001,8 @@ static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val)
return gspca_dev->usb_err;
}

#define WANT_REGULAR_AUTOGAIN
#define WANT_COARSE_EXPO_AUTOGAIN
#include "autogain_functions.h"

static void do_autogain(struct gspca_dev *gspca_dev)
Expand Down
4 changes: 1 addition & 3 deletions drivers/media/video/gspca/pac7302.c
Original file line number Diff line number Diff line change
Expand Up @@ -729,9 +729,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
reg_w(gspca_dev, 0x78, 0x40);
}

/* !! coarse_grained_expo_autogain is not used !! */
#define exp_too_low_cnt flags
#define exp_too_high_cnt sof_read
#define WANT_REGULAR_AUTOGAIN
#include "autogain_functions.h"

static void do_autogain(struct gspca_dev *gspca_dev)
Expand Down
2 changes: 2 additions & 0 deletions drivers/media/video/gspca/sonixb.c
Original file line number Diff line number Diff line change
Expand Up @@ -1000,6 +1000,8 @@ static void setfreq(struct gspca_dev *gspca_dev)
}
}

#define WANT_REGULAR_AUTOGAIN
#define WANT_COARSE_EXPO_AUTOGAIN
#include "autogain_functions.h"

static void do_autogain(struct gspca_dev *gspca_dev)
Expand Down
5 changes: 1 addition & 4 deletions drivers/media/video/gspca/sonixj.c
Original file line number Diff line number Diff line change
Expand Up @@ -2800,10 +2800,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
}
}

/* !! coarse_grained_expo_autogain is not used !! */
#define exp_too_low_cnt bridge
#define exp_too_high_cnt sensor

#define WANT_REGULAR_AUTOGAIN
#include "autogain_functions.h"

static void do_autogain(struct gspca_dev *gspca_dev)
Expand Down
6 changes: 2 additions & 4 deletions drivers/media/video/gspca/topro.c
Original file line number Diff line number Diff line change
Expand Up @@ -4675,11 +4675,9 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
/* -- do autogain -- */
/* gain setting is done in setexposure() for tp6810 */
static void setgain(struct gspca_dev *gspca_dev) {}
/* !! coarse_grained_expo_autogain is not used !! */
#define exp_too_low_cnt bridge
#define exp_too_high_cnt sensor

#define WANT_REGULAR_AUTOGAIN
#include "autogain_functions.h"

static void sd_dq_callback(struct gspca_dev *gspca_dev)
{
struct sd *sd = (struct sd *) gspca_dev;
Expand Down

0 comments on commit a648e31

Please sign in to comment.