kopia lustrzana https://gitlab.com/sane-project/backends
canon_dr backend v52
improve dropout option handling add software dropout implementation for downsampled modesmerge-requests/1/head
rodzic
9dc7924529
commit
666c9a74ff
|
@ -320,6 +320,8 @@
|
|||
- set can_color=1 by default (recent models dont have 'C' in name)
|
||||
- enable jpeg for DR-6080
|
||||
- add must_downsample and must_fully_buffer
|
||||
- improve dropout option handling
|
||||
- add software dropout implementation for downsampled modes
|
||||
|
||||
SANE FLOW DIAGRAM
|
||||
|
||||
|
@ -2759,7 +2761,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
|||
return SANE_STATUS_GOOD;
|
||||
|
||||
case OPT_DROPOUT_COLOR_F:
|
||||
switch (s->dropout_color_f) {
|
||||
switch (s->dropout_color[SIDE_FRONT]) {
|
||||
case COLOR_NONE:
|
||||
strcpy (val, STRING_NONE);
|
||||
break;
|
||||
|
@ -2785,7 +2787,7 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
|||
return SANE_STATUS_GOOD;
|
||||
|
||||
case OPT_DROPOUT_COLOR_B:
|
||||
switch (s->dropout_color_b) {
|
||||
switch (s->dropout_color[SIDE_BACK]) {
|
||||
case COLOR_NONE:
|
||||
strcpy (val, STRING_NONE);
|
||||
break;
|
||||
|
@ -3081,36 +3083,36 @@ sane_control_option (SANE_Handle handle, SANE_Int option,
|
|||
|
||||
case OPT_DROPOUT_COLOR_F:
|
||||
if (!strcmp(val, STRING_NONE))
|
||||
s->dropout_color_f = COLOR_NONE;
|
||||
s->dropout_color[SIDE_FRONT] = COLOR_NONE;
|
||||
else if (!strcmp(val, STRING_RED))
|
||||
s->dropout_color_f = COLOR_RED;
|
||||
s->dropout_color[SIDE_FRONT] = COLOR_RED;
|
||||
else if (!strcmp(val, STRING_GREEN))
|
||||
s->dropout_color_f = COLOR_GREEN;
|
||||
s->dropout_color[SIDE_FRONT] = COLOR_GREEN;
|
||||
else if (!strcmp(val, STRING_BLUE))
|
||||
s->dropout_color_f = COLOR_BLUE;
|
||||
s->dropout_color[SIDE_FRONT] = COLOR_BLUE;
|
||||
else if (!strcmp(val, STRING_EN_RED))
|
||||
s->dropout_color_f = COLOR_EN_RED;
|
||||
s->dropout_color[SIDE_FRONT] = COLOR_EN_RED;
|
||||
else if (!strcmp(val, STRING_EN_GREEN))
|
||||
s->dropout_color_f = COLOR_EN_GREEN;
|
||||
s->dropout_color[SIDE_FRONT] = COLOR_EN_GREEN;
|
||||
else if (!strcmp(val, STRING_EN_BLUE))
|
||||
s->dropout_color_f = COLOR_EN_BLUE;
|
||||
s->dropout_color[SIDE_FRONT] = COLOR_EN_BLUE;
|
||||
return SANE_STATUS_GOOD;
|
||||
|
||||
case OPT_DROPOUT_COLOR_B:
|
||||
if (!strcmp(val, STRING_NONE))
|
||||
s->dropout_color_b = COLOR_NONE;
|
||||
s->dropout_color[SIDE_BACK] = COLOR_NONE;
|
||||
else if (!strcmp(val, STRING_RED))
|
||||
s->dropout_color_b = COLOR_RED;
|
||||
s->dropout_color[SIDE_BACK] = COLOR_RED;
|
||||
else if (!strcmp(val, STRING_GREEN))
|
||||
s->dropout_color_b = COLOR_GREEN;
|
||||
s->dropout_color[SIDE_BACK] = COLOR_GREEN;
|
||||
else if (!strcmp(val, STRING_BLUE))
|
||||
s->dropout_color_b = COLOR_BLUE;
|
||||
s->dropout_color[SIDE_BACK] = COLOR_BLUE;
|
||||
else if (!strcmp(val, STRING_EN_RED))
|
||||
s->dropout_color_b = COLOR_EN_RED;
|
||||
s->dropout_color[SIDE_BACK] = COLOR_EN_RED;
|
||||
else if (!strcmp(val, STRING_EN_GREEN))
|
||||
s->dropout_color_b = COLOR_EN_GREEN;
|
||||
s->dropout_color[SIDE_BACK] = COLOR_EN_GREEN;
|
||||
else if (!strcmp(val, STRING_EN_BLUE))
|
||||
s->dropout_color_b = COLOR_EN_BLUE;
|
||||
s->dropout_color[SIDE_BACK] = COLOR_EN_BLUE;
|
||||
return SANE_STATUS_GOOD;
|
||||
|
||||
case OPT_BUFFERMODE:
|
||||
|
@ -3347,6 +3349,11 @@ ssm_do (struct scanner *s)
|
|||
return ret;
|
||||
}
|
||||
|
||||
if(s->s.mode == MODE_COLOR){
|
||||
DBG (10, "ssm_do: unneeded, finishing\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if(s->has_ssm){
|
||||
|
||||
unsigned char cmd[SET_SCAN_MODE_len];
|
||||
|
@ -3369,7 +3376,7 @@ ssm_do (struct scanner *s)
|
|||
|
||||
set_SSM_DO_unk1(out, 0x03);
|
||||
|
||||
switch(s->dropout_color_f){
|
||||
switch(s->dropout_color[SIDE_FRONT]){
|
||||
case COLOR_RED:
|
||||
set_SSM_DO_unk2(out, 0x05);
|
||||
set_SSM_DO_f_do(out,SSM_DO_red);
|
||||
|
@ -3396,7 +3403,7 @@ ssm_do (struct scanner *s)
|
|||
break;
|
||||
}
|
||||
|
||||
switch(s->dropout_color_b){
|
||||
switch(s->dropout_color[SIDE_BACK]){
|
||||
case COLOR_RED:
|
||||
set_SSM_DO_unk2(out, 0x05);
|
||||
set_SSM_DO_b_do(out,SSM_DO_red);
|
||||
|
@ -3447,7 +3454,7 @@ ssm_do (struct scanner *s)
|
|||
|
||||
memset(out,0,outLen);
|
||||
|
||||
switch(s->dropout_color_f){
|
||||
switch(s->dropout_color[SIDE_FRONT]){
|
||||
case COLOR_RED:
|
||||
set_SSM2_DO_do(out,SSM_DO_red);
|
||||
break;
|
||||
|
@ -5289,8 +5296,46 @@ copy_line(struct scanner *s, unsigned char * buff, int side)
|
|||
switch (s->s.mode) {
|
||||
|
||||
case MODE_COLOR:
|
||||
/*FIXME: add dropout color support for downsample*/
|
||||
memcpy(line, buff, sbwidth);
|
||||
if(must_downsample(s) && s->dropout_color[side]){
|
||||
switch(s->dropout_color[side]){
|
||||
case COLOR_RED:
|
||||
for(i=0;i<spwidth;i++)
|
||||
line[i*3] = line[i*3+1] = line[i*3+2] = buff[i*3];
|
||||
break;
|
||||
case COLOR_GREEN:
|
||||
for(i=0;i<spwidth;i++)
|
||||
line[i*3] = line[i*3+1] = line[i*3+2] = buff[i*3+1];
|
||||
break;
|
||||
case COLOR_BLUE:
|
||||
for(i=0;i<spwidth;i++)
|
||||
line[i*3] = line[i*3+1] = line[i*3+2] = buff[i*3+2];
|
||||
break;
|
||||
case COLOR_EN_RED:
|
||||
for(i=0;i<spwidth;i++){
|
||||
line[i*3] = (buff[i*3+1] + buff[i*3+2])/2;
|
||||
line[i*3+1] = buff[i*3+1];
|
||||
line[i*3+2] = buff[i*3+2];
|
||||
}
|
||||
break;
|
||||
case COLOR_EN_GREEN:
|
||||
for(i=0;i<spwidth;i++){
|
||||
line[i*3] = buff[i*3];
|
||||
line[i*3+1] = (buff[i*3] + buff[i*3+2])/2;
|
||||
line[i*3+2] = buff[i*3+2];
|
||||
}
|
||||
break;
|
||||
case COLOR_EN_BLUE:
|
||||
for(i=0;i<spwidth;i++){
|
||||
line[i*3] = buff[i*3];
|
||||
line[i*3+1] = buff[i*3+1];
|
||||
line[i*3+2] = (buff[i*3] + buff[i*3+1])/2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else{
|
||||
memcpy(line, buff, sbwidth);
|
||||
}
|
||||
break;
|
||||
|
||||
case MODE_GRAYSCALE:
|
||||
|
|
|
@ -276,8 +276,7 @@ struct scanner
|
|||
int compress_arg;
|
||||
int df_length;
|
||||
int df_thickness;
|
||||
int dropout_color_f;
|
||||
int dropout_color_b;
|
||||
int dropout_color[2];
|
||||
int buffermode;
|
||||
int rollerdeskew;
|
||||
int swdeskew;
|
||||
|
|
Ładowanie…
Reference in New Issue