Commit a648e310 authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab

[media] gspca/autogain_functions.h: Allow users to declare what they 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: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 4fd466a1
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * 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: /* auto gain and exposure algorithm based on the knee algorithm described here:
http://ytse.tricolour.net/docs/LowLightOptimization.html http://ytse.tricolour.net/docs/LowLightOptimization.html
...@@ -91,7 +92,9 @@ static inline int auto_gain_n_exposure( ...@@ -91,7 +92,9 @@ static inline int auto_gain_n_exposure(
gain, exposure); gain, exposure);
return retval; return retval;
} }
#endif
#ifdef WANT_COARSE_EXPO_AUTOGAIN
/* Autogain + exposure algorithm for cameras with a coarse exposure control /* Autogain + exposure algorithm for cameras with a coarse exposure control
(usually this means we can only control the clockdiv to change exposure) (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 As changing the clockdiv so that the fps drops from 30 to 15 fps for
...@@ -103,7 +106,7 @@ static inline int auto_gain_n_exposure( ...@@ -103,7 +106,7 @@ static inline int auto_gain_n_exposure(
which leads to oscilating as one exposure step is huge. which leads to oscilating as one exposure step is huge.
Note this assumes that the sd struct for the cam in question has 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 Returns 0 if no changes were made, 1 if the gain and or exposure settings
where changed. */ where changed. */
...@@ -177,3 +180,4 @@ static inline int coarse_grained_expo_autogain( ...@@ -177,3 +180,4 @@ static inline int coarse_grained_expo_autogain(
gain, exposure); gain, exposure);
return retval; return retval;
} }
#endif
...@@ -2001,6 +2001,8 @@ static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val) ...@@ -2001,6 +2001,8 @@ static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val)
return gspca_dev->usb_err; return gspca_dev->usb_err;
} }
#define WANT_REGULAR_AUTOGAIN
#define WANT_COARSE_EXPO_AUTOGAIN
#include "autogain_functions.h" #include "autogain_functions.h"
static void do_autogain(struct gspca_dev *gspca_dev) static void do_autogain(struct gspca_dev *gspca_dev)
......
...@@ -729,9 +729,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev) ...@@ -729,9 +729,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
reg_w(gspca_dev, 0x78, 0x40); reg_w(gspca_dev, 0x78, 0x40);
} }
/* !! coarse_grained_expo_autogain is not used !! */ #define WANT_REGULAR_AUTOGAIN
#define exp_too_low_cnt flags
#define exp_too_high_cnt sof_read
#include "autogain_functions.h" #include "autogain_functions.h"
static void do_autogain(struct gspca_dev *gspca_dev) static void do_autogain(struct gspca_dev *gspca_dev)
......
...@@ -1000,6 +1000,8 @@ static void setfreq(struct gspca_dev *gspca_dev) ...@@ -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" #include "autogain_functions.h"
static void do_autogain(struct gspca_dev *gspca_dev) static void do_autogain(struct gspca_dev *gspca_dev)
......
...@@ -2800,10 +2800,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev) ...@@ -2800,10 +2800,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
} }
} }
/* !! coarse_grained_expo_autogain is not used !! */ #define WANT_REGULAR_AUTOGAIN
#define exp_too_low_cnt bridge
#define exp_too_high_cnt sensor
#include "autogain_functions.h" #include "autogain_functions.h"
static void do_autogain(struct gspca_dev *gspca_dev) static void do_autogain(struct gspca_dev *gspca_dev)
......
...@@ -4675,11 +4675,9 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, ...@@ -4675,11 +4675,9 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev,
/* -- do autogain -- */ /* -- do autogain -- */
/* gain setting is done in setexposure() for tp6810 */ /* gain setting is done in setexposure() for tp6810 */
static void setgain(struct gspca_dev *gspca_dev) {} static void setgain(struct gspca_dev *gspca_dev) {}
/* !! coarse_grained_expo_autogain is not used !! */ #define WANT_REGULAR_AUTOGAIN
#define exp_too_low_cnt bridge
#define exp_too_high_cnt sensor
#include "autogain_functions.h" #include "autogain_functions.h"
static void sd_dq_callback(struct gspca_dev *gspca_dev) static void sd_dq_callback(struct gspca_dev *gspca_dev)
{ {
struct sd *sd = (struct sd *) gspca_dev; struct sd *sd = (struct sd *) gspca_dev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment