14
14
# You should have received a copy of the GNU Lesser General Public License
15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
20
#include "libv4lprocessing.h"
21
21
#include "libv4lprocessing-priv.h"
23
#define CLIP(color) (unsigned char)(((color)>0xff)?0xff:(((color)<0)?0:(color)))
25
static int gamma_active(struct v4lprocessing_data *data) {
26
int gamma = v4lcontrol_get_ctrl(data->control, V4LCONTROL_GAMMA);
28
return gamma && gamma != 1000;
23
#define CLIP(color) (unsigned char)(((color) > 0xff) ? 0xff : (((color) < 0) ? 0 : (color)))
25
static int gamma_active(struct v4lprocessing_data *data)
27
int gamma = v4lcontrol_get_ctrl(data->control, V4LCONTROL_GAMMA);
29
return gamma && gamma != 1000;
31
32
static int gamma_calculate_lookup_tables(
32
struct v4lprocessing_data *data,
33
unsigned char *buf, const struct v4l2_format *fmt)
33
struct v4lprocessing_data *data,
34
unsigned char *buf, const struct v4l2_format *fmt)
37
gamma = v4lcontrol_get_ctrl(data->control, V4LCONTROL_GAMMA);
39
if (gamma != data->last_gamma) {
40
for (i = 0; i < 256; i++) {
41
x = powf(i / 255.0, 1000.0 / gamma) * 255;
42
data->gamma_table[i] = CLIP(x);
44
data->last_gamma = gamma;
47
for (i = 0; i < 256; i++) {
48
data->comp1[i] = data->gamma_table[data->comp1[i]];
49
data->green[i] = data->gamma_table[data->green[i]];
50
data->comp2[i] = data->gamma_table[data->comp2[i]];
38
gamma = v4lcontrol_get_ctrl(data->control, V4LCONTROL_GAMMA);
40
if (gamma != data->last_gamma) {
41
for (i = 0; i < 256; i++) {
42
x = powf(i / 255.0, 1000.0 / gamma) * 255;
43
data->gamma_table[i] = CLIP(x);
45
data->last_gamma = gamma;
48
for (i = 0; i < 256; i++) {
49
data->comp1[i] = data->gamma_table[data->comp1[i]];
50
data->green[i] = data->gamma_table[data->green[i]];
51
data->comp2[i] = data->gamma_table[data->comp2[i]];
56
57
struct v4lprocessing_filter gamma_filter = {
57
gamma_active, gamma_calculate_lookup_tables };
58
gamma_active, gamma_calculate_lookup_tables