Hi, > Someone suggested to me that doing "modprobe gspca vflip=1" would help > but it doesn't seem to come as an option ?
Attached patch, against latest GSPCA (1.00.20), fixes this. It introduces ``vflip'' module parameter, which controls vertical flipping for devices using pixart decompresser. Please, try out "modprobe gspca vflip=1" with proposed patch. -- Sergey Lungu
diff -ur gspcav1-20071224.orig/decoder/gspcadecoder.c gspcav1-20071224/decoder/gspcadecoder.c --- gspcav1-20071224.orig/decoder/gspcadecoder.c 2007-12-24 16:35:27.000000000 +0300 +++ gspcav1-20071224/decoder/gspcadecoder.c 2008-07-04 21:38:07.000000000 +0400 @@ -589,12 +589,18 @@ unsigned char *inp = myframe->data; struct code_table_t *table = myframe->decoder->table; unsigned short word; - int row; + int row, inc = width; + /* skip header */ inp += 16; /* and ask to go at pixel +1 ?? */ outp++; + if (myframe->spca50x_dev->vflip != 0) { + outp += width * (height - 1) - 1; + inc = -width; + } + /* iterate over all rows */ for (row = 0; row < height; row++) { word = getShort(inp); @@ -606,12 +612,10 @@ case 0x1EE1: inp += pac_decompress_row(table, inp, outp, width); break; - default: - return -1; } - outp += width; + outp += inc; } return 0; diff -ur gspcav1-20071224.orig/gspca_core.c gspcav1-20071224/gspca_core.c --- gspcav1-20071224.orig/gspca_core.c 2007-12-24 19:56:47.000000000 +0300 +++ gspcav1-20071224/gspca_core.c 2008-07-04 21:38:07.000000000 +0400 @@ -105,6 +105,9 @@ /* force sensor id*/ static int force_sensor_id=-1; static int force_gamma_id=-1; +/* Flip image vertically */ +static int vflip = 0; + module_param(autoexpo, int, 0644); module_param(debug, int, 0644); module_param(force_rgb, int, 0644); @@ -127,6 +130,7 @@ #endif module_param(force_sensor_id, int, 0644); module_param(force_gamma_id, int, 0644); +module_param(vflip, int, 0644); MODULE_PARM_DESC(autoexpo, "Enable/Disable auto exposure (default=1: enabled) (PC-CAM 600/Zc03xx/spca561a/Etoms Only !!!)"); @@ -154,6 +158,7 @@ #endif /* SPCA5XX_ENABLE_REGISTERPLAY */ MODULE_PARM_DESC(force_gamma_id, "Forced assigning ID of contrast settings (0=default,1,2,3) Zc03xx only"); MODULE_PARM_DESC(force_sensor_id, "Forced assigning ID sensor (Zc03xx only). Dangerous, only for experts !!!"); +MODULE_PARM_DESC(vflip, "Flip image vertically"); /****************/ MODULE_AUTHOR @@ -4281,6 +4286,7 @@ spca50x->last_times = 0; spca50x->dtimes = 0; spca50x->autoexpo = autoexpo; + spca50x->vflip = vflip; init_MUTEX(&spca50x->lock); /* to 1 == available */ init_MUTEX(&spca50x->buf_lock); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 10) diff -ur gspcav1-20071224.orig/gspca.h gspcav1-20071224/gspca.h --- gspcav1-20071224.orig/gspca.h 2007-12-24 19:56:47.000000000 +0300 +++ gspcav1-20071224/gspca.h 2008-07-04 21:38:07.000000000 +0400 @@ -417,6 +417,7 @@ int whiteness; int exposure; // used by spca561 int autoexpo; + int vflip; int qindex; int width; /* use here for the init of each frame */ int height;