kopia lustrzana https://gitlab.com/sane-project/backends
Reorganize some MustScanner_* functions.
rodzic
bd7107ca05
commit
9444bf1156
|
|
@ -764,16 +764,12 @@ sane_start (SANE_Handle handle)
|
|||
DBG (DBG_INFO, "sane_start: setpara.ssScanSource=%d\n",
|
||||
s->setpara.ssScanSource);
|
||||
|
||||
MustScanner_Reset (s->setpara.ssScanSource);
|
||||
MustScanner_Reset ();
|
||||
|
||||
/* adjust parameters to the scanner's requirements */
|
||||
if (!MustScanner_ScanSuggest (&s->setpara))
|
||||
{
|
||||
DBG (DBG_ERR, "sane_start: MustScanner_ScanSuggest error\n");
|
||||
return SANE_STATUS_INVAL;
|
||||
}
|
||||
MustScanner_ScanSuggest (&s->setpara);
|
||||
|
||||
/* update the scan parameters returned by sane_get_parameters */
|
||||
/* update the scan parameters to be returned by sane_get_parameters */
|
||||
s->params.pixels_per_line = s->setpara.wWidth;
|
||||
s->params.lines = s->setpara.wHeight;
|
||||
s->params.bytes_per_line = s->setpara.dwBytesPerRow;
|
||||
|
|
|
|||
|
|
@ -1051,71 +1051,13 @@ MustScanner_GetRows (SANE_Byte * pBlock, unsigned short * Rows,
|
|||
isOrderInvert, fixEvenOdd);
|
||||
}
|
||||
|
||||
SANE_Bool
|
||||
void
|
||||
MustScanner_ScanSuggest (TARGETIMAGE * pTarget)
|
||||
{
|
||||
unsigned short wMaxWidth, wMaxHeight;
|
||||
|
||||
DBG (DBG_FUNC, "MustScanner_ScanSuggest: call in\n");
|
||||
|
||||
if (!pTarget)
|
||||
{
|
||||
DBG (DBG_FUNC, "MustScanner_ScanSuggest: parameters error\n");
|
||||
return SANE_FALSE;
|
||||
}
|
||||
|
||||
g_wLineartThreshold = pTarget->wLineartThreshold;
|
||||
|
||||
/* create gamma table */
|
||||
if ((pTarget->cmColorMode == CM_GRAY8) ||
|
||||
(pTarget->cmColorMode == CM_RGB24))
|
||||
{
|
||||
unsigned short i;
|
||||
SANE_Byte bGammaData;
|
||||
|
||||
g_pGammaTable = malloc (sizeof (unsigned short) * 4096 * 3);
|
||||
if (!g_pGammaTable)
|
||||
{
|
||||
DBG (DBG_ERR, "MustScanner_ScanSuggest: gamma table malloc fail\n");
|
||||
return SANE_FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4096; i++)
|
||||
{
|
||||
bGammaData = (SANE_Byte) (pow ((double) i / 4095, 0.625) * 255);
|
||||
g_pGammaTable[i] = bGammaData;
|
||||
g_pGammaTable[i + 4096] = bGammaData;
|
||||
g_pGammaTable[i + 8192] = bGammaData;
|
||||
}
|
||||
}
|
||||
else if ((pTarget->cmColorMode == CM_GRAY16) ||
|
||||
(pTarget->cmColorMode == CM_RGB48))
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned short wGammaData;
|
||||
|
||||
g_pGammaTable = malloc (sizeof (unsigned short) * 65536 * 3);
|
||||
if (!g_pGammaTable)
|
||||
{
|
||||
DBG (DBG_ERR, "MustScanner_ScanSuggest: gamma table malloc fail\n");
|
||||
return SANE_FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < 65536; i++)
|
||||
{
|
||||
wGammaData = (unsigned short)
|
||||
(pow ((double) i / 65535, 0.625) * 65535);
|
||||
g_pGammaTable[i] = wGammaData;
|
||||
g_pGammaTable[i + 65536] = wGammaData;
|
||||
g_pGammaTable[i + 65536 * 2] = wGammaData;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG (DBG_INFO, "MustScanner_ScanSuggest: set g_pGammaTable to NULL\n");
|
||||
g_pGammaTable = NULL;
|
||||
}
|
||||
|
||||
/* check width and height */
|
||||
wMaxWidth = (MAX_SCANNING_WIDTH * pTarget->wDpi) / 300;
|
||||
wMaxHeight = (MAX_SCANNING_HEIGHT * pTarget->wDpi) / 300;
|
||||
|
|
@ -1126,10 +1068,6 @@ MustScanner_ScanSuggest (TARGETIMAGE * pTarget)
|
|||
pTarget->wWidth = _MIN (pTarget->wWidth, wMaxWidth);
|
||||
pTarget->wHeight = _MIN (pTarget->wHeight, wMaxHeight);
|
||||
|
||||
g_Width = (pTarget->wWidth + 15) & ~15; /* real scan width */
|
||||
g_Height = pTarget->wHeight;
|
||||
DBG (DBG_FUNC, "MustScanner_ScanSuggest: g_Width=%d\n", g_Width);
|
||||
|
||||
switch (pTarget->cmColorMode)
|
||||
{
|
||||
case CM_RGB48:
|
||||
|
|
@ -1152,7 +1090,6 @@ MustScanner_ScanSuggest (TARGETIMAGE * pTarget)
|
|||
pTarget->dwBytesPerRow);
|
||||
|
||||
DBG (DBG_FUNC, "MustScanner_ScanSuggest: leave MustScanner_ScanSuggest\n");
|
||||
return SANE_TRUE;
|
||||
}
|
||||
|
||||
SANE_Bool
|
||||
|
|
@ -1197,7 +1134,7 @@ MustScanner_StopScan (void)
|
|||
return result;
|
||||
}
|
||||
|
||||
SANE_Bool
|
||||
static SANE_Bool
|
||||
MustScanner_PrepareScan (void)
|
||||
{
|
||||
DBG (DBG_FUNC, "MustScanner_PrepareScan: call in\n");
|
||||
|
|
@ -1245,7 +1182,7 @@ MustScanner_PrepareScan (void)
|
|||
}
|
||||
|
||||
SANE_Bool
|
||||
MustScanner_Reset (SCANSOURCE ssScanSource)
|
||||
MustScanner_Reset (void)
|
||||
{
|
||||
DBG (DBG_FUNC, "MustScanner_Reset: call in\n");
|
||||
|
||||
|
|
@ -1255,18 +1192,6 @@ MustScanner_Reset (SCANSOURCE ssScanSource)
|
|||
return SANE_FALSE;
|
||||
}
|
||||
|
||||
if (ssScanSource == SS_REFLECTIVE)
|
||||
{
|
||||
if (!MustScanner_PowerControl (SANE_TRUE, SANE_FALSE))
|
||||
return SANE_FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!MustScanner_PowerControl (SANE_FALSE, SANE_TRUE))
|
||||
return SANE_FALSE;
|
||||
}
|
||||
|
||||
g_ssScanSource = ssScanSource;
|
||||
g_dwTotalTotalXferLines = 0;
|
||||
g_bFirstReadImage = SANE_TRUE;
|
||||
g_bPrepared = SANE_TRUE;
|
||||
|
|
@ -1753,9 +1678,8 @@ MustScanner_FindTopLeft (unsigned short * pwStartX, unsigned short * pwStartY)
|
|||
*pwStartY = 43;
|
||||
|
||||
if (Asic_MotorMove (&g_chip, SANE_FALSE,
|
||||
(wCalHeight - *pwStartY +
|
||||
BEFORE_SCANNING_MOTOR_FORWARD_PIXEL) * SENSOR_DPI /
|
||||
FIND_LEFT_TOP_CALIBRATE_RESOLUTION) !=
|
||||
(wCalHeight - *pwStartY + LINE_CALIBRATION_HEIGHT) *
|
||||
SENSOR_DPI / FIND_LEFT_TOP_CALIBRATE_RESOLUTION) !=
|
||||
SANE_STATUS_GOOD)
|
||||
goto error;
|
||||
}
|
||||
|
|
@ -1834,27 +1758,15 @@ MustScanner_FiltLower (unsigned short * pSort, unsigned short TotalCount,
|
|||
static SANE_Bool
|
||||
MustScanner_LineCalibration16Bits (void)
|
||||
{
|
||||
SANE_Byte * pWhiteData;
|
||||
SANE_Byte * pDarkData;
|
||||
SANE_Byte * pWhiteData, * pDarkData;
|
||||
unsigned int dwTotalSize;
|
||||
unsigned short wCalWidth, wCalHeight;
|
||||
unsigned short * pWhiteShading;
|
||||
unsigned short * pDarkShading;
|
||||
double wRWhiteLevel;
|
||||
double wGWhiteLevel;
|
||||
double wBWhiteLevel;
|
||||
unsigned int dwRDarkLevel = 0;
|
||||
unsigned int dwGDarkLevel = 0;
|
||||
unsigned int dwBDarkLevel = 0;
|
||||
unsigned int dwREvenDarkLevel = 0;
|
||||
unsigned int dwGEvenDarkLevel = 0;
|
||||
unsigned int dwBEvenDarkLevel = 0;
|
||||
unsigned short * pRWhiteSort;
|
||||
unsigned short * pGWhiteSort;
|
||||
unsigned short * pBWhiteSort;
|
||||
unsigned short * pRDarkSort;
|
||||
unsigned short * pGDarkSort;
|
||||
unsigned short * pBDarkSort;
|
||||
unsigned short * pWhiteShading, * pDarkShading;
|
||||
double wRWhiteLevel, wGWhiteLevel, wBWhiteLevel;
|
||||
unsigned int dwRDarkLevel = 0, dwGDarkLevel = 0, dwBDarkLevel = 0;
|
||||
unsigned int dwREvenDarkLevel = 0, dwGEvenDarkLevel = 0, dwBEvenDarkLevel = 0;
|
||||
unsigned short * pRWhiteSort, * pGWhiteSort, * pBWhiteSort;
|
||||
unsigned short * pRDarkSort, * pGDarkSort, * pBDarkSort;
|
||||
int i, j;
|
||||
#ifdef DEBUG_SAVE_IMAGE
|
||||
FILE * stream;
|
||||
|
|
@ -1870,7 +1782,7 @@ MustScanner_LineCalibration16Bits (void)
|
|||
}
|
||||
|
||||
wCalWidth = g_Width;
|
||||
wCalHeight = LINE_CALIBRATION__16BITS_HEIGHT;
|
||||
wCalHeight = LINE_CALIBRATION_HEIGHT;
|
||||
dwTotalSize = wCalWidth * wCalHeight * 3 * 2;
|
||||
DBG (DBG_FUNC, "MustScanner_LineCalibration16Bits: wCalWidth = %d, " \
|
||||
"wCalHeight = %d\n", wCalWidth, wCalHeight);
|
||||
|
|
@ -2183,8 +2095,62 @@ MustScanner_SetupScan (TARGETIMAGE * pTarget)
|
|||
g_ScanMode = pTarget->cmColorMode;
|
||||
g_XDpi = pTarget->wDpi;
|
||||
g_YDpi = pTarget->wDpi;
|
||||
g_Width = (pTarget->wWidth + 15) & ~15; /* real scan width */
|
||||
g_Height = pTarget->wHeight;
|
||||
g_SWWidth = pTarget->wWidth;
|
||||
g_SWHeight = pTarget->wHeight;
|
||||
g_wLineartThreshold = pTarget->wLineartThreshold;
|
||||
g_ssScanSource = pTarget->ssScanSource;
|
||||
|
||||
/* create gamma table */
|
||||
if ((pTarget->cmColorMode == CM_GRAY8) ||
|
||||
(pTarget->cmColorMode == CM_RGB24))
|
||||
{
|
||||
unsigned short i;
|
||||
SANE_Byte bGammaData;
|
||||
|
||||
g_pGammaTable = malloc (sizeof (unsigned short) * 4096 * 3);
|
||||
if (!g_pGammaTable)
|
||||
{
|
||||
DBG (DBG_ERR, "MustScanner_ScanSuggest: gamma table malloc fail\n");
|
||||
return SANE_FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < 4096; i++)
|
||||
{
|
||||
bGammaData = (SANE_Byte) (pow ((double) i / 4095, 0.625) * 255);
|
||||
g_pGammaTable[i] = bGammaData;
|
||||
g_pGammaTable[i + 4096] = bGammaData;
|
||||
g_pGammaTable[i + 8192] = bGammaData;
|
||||
}
|
||||
}
|
||||
else if ((pTarget->cmColorMode == CM_GRAY16) ||
|
||||
(pTarget->cmColorMode == CM_RGB48))
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned short wGammaData;
|
||||
|
||||
g_pGammaTable = malloc (sizeof (unsigned short) * 65536 * 3);
|
||||
if (!g_pGammaTable)
|
||||
{
|
||||
DBG (DBG_ERR, "MustScanner_ScanSuggest: gamma table malloc fail\n");
|
||||
return SANE_FALSE;
|
||||
}
|
||||
|
||||
for (i = 0; i < 65536; i++)
|
||||
{
|
||||
wGammaData = (unsigned short)
|
||||
(pow ((double) i / 65535, 0.625) * 65535);
|
||||
g_pGammaTable[i] = wGammaData;
|
||||
g_pGammaTable[i + 65536] = wGammaData;
|
||||
g_pGammaTable[i + 65536 * 2] = wGammaData;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG (DBG_INFO, "MustScanner_ScanSuggest: set g_pGammaTable to NULL\n");
|
||||
g_pGammaTable = NULL;
|
||||
}
|
||||
|
||||
switch (g_YDpi)
|
||||
{
|
||||
|
|
@ -2249,6 +2215,17 @@ MustScanner_SetupScan (TARGETIMAGE * pTarget)
|
|||
break;
|
||||
}
|
||||
|
||||
if (g_ssScanSource == SS_REFLECTIVE)
|
||||
{
|
||||
if (!MustScanner_PowerControl (SANE_TRUE, SANE_FALSE))
|
||||
return SANE_FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!MustScanner_PowerControl (SANE_FALSE, SANE_TRUE))
|
||||
return SANE_FALSE;
|
||||
}
|
||||
|
||||
if (Asic_Open (&g_chip) != SANE_STATUS_GOOD)
|
||||
return SANE_FALSE;
|
||||
|
||||
|
|
|
|||
|
|
@ -92,12 +92,7 @@ typedef struct
|
|||
#define TA_FIND_LEFT_TOP_WIDTH_IN_DIP 2668
|
||||
#define TA_FIND_LEFT_TOP_HEIGHT_IN_DIP 300
|
||||
|
||||
/* must be a multiple of 8 */
|
||||
#define LINE_CALIBRATION__16BITS_HEIGHT 40
|
||||
|
||||
/* the length from block bar to start calibration position */
|
||||
#define BEFORE_SCANNING_MOTOR_FORWARD_PIXEL 40
|
||||
|
||||
#define LINE_CALIBRATION_HEIGHT 40
|
||||
#define TRAN_START_POS 4550
|
||||
|
||||
/* 300 dpi */
|
||||
|
|
@ -121,10 +116,9 @@ SANE_Bool MustScanner_GetKeyStatus (SANE_Byte * pKey);
|
|||
#endif
|
||||
SANE_Bool MustScanner_GetRows (SANE_Byte * pBlock, unsigned short * Rows,
|
||||
SANE_Bool isOrderInvert);
|
||||
SANE_Bool MustScanner_ScanSuggest (TARGETIMAGE * pTarget);
|
||||
void MustScanner_ScanSuggest (TARGETIMAGE * pTarget);
|
||||
SANE_Bool MustScanner_StopScan (void);
|
||||
SANE_Bool MustScanner_PrepareScan (void);
|
||||
SANE_Bool MustScanner_Reset (SCANSOURCE ssScanSource);
|
||||
SANE_Bool MustScanner_Reset (void);
|
||||
SANE_Bool MustScanner_SetupScan (TARGETIMAGE * pTarget);
|
||||
|
||||
|
||||
|
|
|
|||
Ładowanie…
Reference in New Issue