genesys: Return errors as exceptions from pixel format conv functions

merge-requests/105/head
Povilas Kanapickas 2019-07-27 10:12:27 +03:00
rodzic f727f1a01b
commit 10947b94f1
3 zmienionych plików z 51 dodań i 160 usunięć

Wyświetl plik

@ -3841,7 +3841,6 @@ genesys_read_ordered_data (Genesys_Device * dev, SANE_Byte * destination,
size_t * len) size_t * len)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
SANE_Status status = SANE_STATUS_GOOD;
size_t bytes, extra; size_t bytes, extra;
unsigned int channels, depth, src_pixels; unsigned int channels, depth, src_pixels;
unsigned int ccd_shift[12], shift_count; unsigned int ccd_shift[12], shift_count;
@ -4029,53 +4028,35 @@ Problems with the first approach:
{ {
case 1: /* RGB, chunky, 16 bit */ case 1: /* RGB, chunky, 16 bit */
#ifdef WORDS_BIGENDIAN #ifdef WORDS_BIGENDIAN
status = genesys_reorder_components_endian_16(work_buffer_src, work_buffer_dst, dst_lines,
genesys_reorder_components_endian_16 (work_buffer_src, src_pixels, 3);
work_buffer_dst,
dst_lines,
src_pixels, 3);
break; break;
#endif /*WORDS_BIGENDIAN */ #endif /*WORDS_BIGENDIAN */
case 0: /* RGB, chunky, 8 bit */ case 0: /* RGB, chunky, 8 bit */
status = SANE_STATUS_GOOD;
break; break;
case 2: /* RGB, cis, 8 bit */ case 2: /* RGB, cis, 8 bit */
status = genesys_reorder_components_cis_8(work_buffer_src, work_buffer_dst, dst_lines,
genesys_reorder_components_cis_8 (work_buffer_src, src_pixels);
work_buffer_dst,
dst_lines, src_pixels);
break; break;
case 3: /* RGB, cis, 16 bit */ case 3: /* RGB, cis, 16 bit */
status = genesys_reorder_components_cis_16(work_buffer_src, work_buffer_dst, dst_lines,
genesys_reorder_components_cis_16 (work_buffer_src, src_pixels);
work_buffer_dst,
dst_lines, src_pixels);
break; break;
case 4: /* BGR, chunky, 8 bit */ case 4: /* BGR, chunky, 8 bit */
status = genesys_reorder_components_bgr_8(work_buffer_src, work_buffer_dst, dst_lines,
genesys_reorder_components_bgr_8 (work_buffer_src, src_pixels);
work_buffer_dst,
dst_lines, src_pixels);
break; break;
case 5: /* BGR, chunky, 16 bit */ case 5: /* BGR, chunky, 16 bit */
status = genesys_reorder_components_bgr_16(work_buffer_src, work_buffer_dst, dst_lines,
genesys_reorder_components_bgr_16 (work_buffer_src, src_pixels);
work_buffer_dst,
dst_lines, src_pixels);
break; break;
case 6: /* BGR, cis, 8 bit */ case 6: /* BGR, cis, 8 bit */
status = genesys_reorder_components_cis_bgr_8(work_buffer_src, work_buffer_dst, dst_lines,
genesys_reorder_components_cis_bgr_8 (work_buffer_src, src_pixels);
work_buffer_dst,
dst_lines,
src_pixels);
break; break;
case 7: /* BGR, cis, 16 bit */ case 7: /* BGR, cis, 16 bit */
status = genesys_reorder_components_cis_bgr_16(work_buffer_src, work_buffer_dst, dst_lines,
genesys_reorder_components_cis_bgr_16 (work_buffer_src, src_pixels);
work_buffer_dst,
dst_lines,
src_pixels);
break; break;
} }
} }
@ -4084,28 +4065,12 @@ Problems with the first approach:
#ifdef WORDS_BIGENDIAN #ifdef WORDS_BIGENDIAN
if (depth == 16) if (depth == 16)
{ {
status = genesys_reorder_components_endian_16(work_buffer_src, work_buffer_dst, dst_lines,
genesys_reorder_components_endian_16 (work_buffer_src, src_pixels, 1);
work_buffer_dst,
dst_lines,
src_pixels, 1);
} }
else
{
status = SANE_STATUS_GOOD;
}
#else /*!WORDS_BIGENDIAN */
status = SANE_STATUS_GOOD;
#endif /*WORDS_BIGENDIAN */ #endif /*WORDS_BIGENDIAN */
} }
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to convert byte ordering(%s)\n", __func__,
sane_strstatus(status));
return SANE_STATUS_IO_ERROR;
}
dst_buffer->produce(bytes); dst_buffer->produce(bytes);
src_buffer->consume(bytes); src_buffer->consume(bytes);
} }
@ -4151,24 +4116,13 @@ Problems with the first approach:
if (dst_lines != 0) if (dst_lines != 0)
{ {
if (depth == 8) if (depth == 8) {
status = genesys_reverse_ccd_8 (work_buffer_src, work_buffer_dst, genesys_reverse_ccd_8(work_buffer_src, work_buffer_dst, dst_lines,
dst_lines, src_pixels * channels, ccd_shift, shift_count);
src_pixels * channels, } else {
ccd_shift, shift_count); genesys_reverse_ccd_16(work_buffer_src, work_buffer_dst, dst_lines,
else src_pixels * channels, ccd_shift, shift_count);
status = genesys_reverse_ccd_16 (work_buffer_src, work_buffer_dst, }
dst_lines,
src_pixels * channels,
ccd_shift, shift_count);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to reverse ccd effects(%s)\n", __func__,
sane_strstatus(status));
return SANE_STATUS_IO_ERROR;
}
dst_buffer->produce(bytes); dst_buffer->produce(bytes);
src_buffer->consume(bytes); src_buffer->consume(bytes);
} }
@ -4203,30 +4157,14 @@ Problems with the first approach:
if (dst_lines != 0) if (dst_lines != 0)
{ {
if (depth == 1) if (depth == 1)
status = genesys_shrink_lines_1 (work_buffer_src, genesys_shrink_lines_1(work_buffer_src, work_buffer_dst, dst_lines, src_pixels,
work_buffer_dst, dev->settings.pixels, channels);
dst_lines,
src_pixels,
dev->settings.pixels,
channels);
else if (depth == 8) else if (depth == 8)
status = genesys_shrink_lines_8 (work_buffer_src, genesys_shrink_lines_8(work_buffer_src, work_buffer_dst, dst_lines, src_pixels,
work_buffer_dst, dev->settings.pixels, channels);
dst_lines,
src_pixels,
dev->settings.pixels, channels);
else else
status = genesys_shrink_lines_16 (work_buffer_src, genesys_shrink_lines_16(work_buffer_src, work_buffer_dst, dst_lines, src_pixels,
work_buffer_dst, dev->settings.pixels, channels);
dst_lines,
src_pixels,
dev->settings.pixels, channels);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to shrink lines(%s)\n", __func__, sane_strstatus(status));
return SANE_STATUS_IO_ERROR;
}
/* we just consumed this many bytes*/ /* we just consumed this many bytes*/
bytes = (dst_lines * src_pixels * channels * depth) / 8; bytes = (dst_lines * src_pixels * channels * depth) / 8;
@ -4247,12 +4185,7 @@ Problems with the first approach:
if (needs_reverse) if (needs_reverse)
{ {
status = genesys_reverse_bits (work_buffer_src, destination, bytes); genesys_reverse_bits(work_buffer_src, destination, bytes);
if (status != SANE_STATUS_GOOD)
{
DBG(DBG_error, "%s: failed to reverse bits(%s)\n", __func__, sane_strstatus(status));
return SANE_STATUS_IO_ERROR;
}
*len = bytes; *len = bytes;
} }
else else

Wyświetl plik

@ -77,18 +77,13 @@
#undef BYTES_PER_COMPONENT #undef BYTES_PER_COMPONENT
#undef DOUBLE_BYTE #undef DOUBLE_BYTE
static SANE_Status static void genesys_reverse_bits(uint8_t* src_data, uint8_t* dst_data, size_t bytes)
genesys_reverse_bits(
uint8_t *src_data,
uint8_t *dst_data,
size_t bytes)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
size_t i; size_t i;
for(i = 0; i < bytes; i++) { for(i = 0; i < bytes; i++) {
*dst_data++ = ~ *src_data++; *dst_data++ = ~ *src_data++;
} }
return SANE_STATUS_GOOD;
} }
/** /**
@ -214,14 +209,10 @@ genesys_gray_lineart(
* or grows it in case it is the opposite like when motor resolution is higher than * or grows it in case it is the opposite like when motor resolution is higher than
* sensor's one. * sensor's one.
*/ */
static SANE_Status static void genesys_shrink_lines_1(uint8_t* src_data, uint8_t* dst_data,
genesys_shrink_lines_1 ( unsigned int lines,
uint8_t *src_data, unsigned int src_pixels, unsigned int dst_pixels,
uint8_t *dst_data, unsigned int channels)
unsigned int lines,
unsigned int src_pixels,
unsigned int dst_pixels,
unsigned int channels)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
unsigned int dst_x, src_x, y, c, cnt; unsigned int dst_x, src_x, y, c, cnt;
@ -318,8 +309,6 @@ genesys_shrink_lines_1 (
} }
} }
} }
return SANE_STATUS_GOOD;
} }

Wyświetl plik

@ -45,12 +45,8 @@
* Conversion filters for genesys backend * Conversion filters for genesys backend
*/ */
static SANE_Status static void FUNC_NAME(genesys_reorder_components_cis) (uint8_t* src_data, uint8_t* dst_data,
FUNC_NAME(genesys_reorder_components_cis) ( unsigned int lines, unsigned int pixels)
uint8_t *src_data,
uint8_t *dst_data,
unsigned int lines,
unsigned int pixels)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
unsigned int x, y; unsigned int x, y;
@ -95,15 +91,10 @@ FUNC_NAME(genesys_reorder_components_cis) (
src[1] += rest; src[1] += rest;
src[2] += rest; src[2] += rest;
} }
return SANE_STATUS_GOOD;
} }
static SANE_Status static void FUNC_NAME(genesys_reorder_components_cis_bgr) (uint8_t* src_data, uint8_t* dst_data,
FUNC_NAME(genesys_reorder_components_cis_bgr) ( unsigned int lines, unsigned int pixels)
uint8_t *src_data,
uint8_t *dst_data,
unsigned int lines,
unsigned int pixels)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
unsigned int x, y; unsigned int x, y;
@ -147,15 +138,10 @@ FUNC_NAME(genesys_reorder_components_cis_bgr) (
src[1] += rest; src[1] += rest;
src[2] += rest; src[2] += rest;
} }
return SANE_STATUS_GOOD;
} }
static SANE_Status static void FUNC_NAME(genesys_reorder_components_bgr) (uint8_t* src_data, uint8_t* dst_data,
FUNC_NAME(genesys_reorder_components_bgr) ( unsigned int lines, unsigned int pixels)
uint8_t *src_data,
uint8_t *dst_data,
unsigned int lines,
unsigned int pixels)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
unsigned int c; unsigned int c;
@ -189,17 +175,12 @@ FUNC_NAME(genesys_reorder_components_bgr) (
#endif #endif
} }
return SANE_STATUS_GOOD;
} }
#if defined(DOUBLE_BYTE) && defined(WORDS_BIGENDIAN) #if defined(DOUBLE_BYTE) && defined(WORDS_BIGENDIAN)
static SANE_Status static void FUNC_NAME(genesys_reorder_components_endian) (uint8_t* src_data, uint8_t* dst_data,
FUNC_NAME(genesys_reorder_components_endian) ( unsigned int lines, unsigned int pixels,
uint8_t *src_data, unsigned int channels)
uint8_t *dst_data,
unsigned int lines,
unsigned int pixels,
unsigned int channels)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
unsigned int c; unsigned int c;
@ -211,19 +192,13 @@ FUNC_NAME(genesys_reorder_components_endian) (
*dst++ = src[0]; *dst++ = src[0];
src += 2; src += 2;
} }
return SANE_STATUS_GOOD;
} }
#endif /*defined(DOUBLE_BYTE) && defined(WORDS_BIGENDIAN)*/ #endif /*defined(DOUBLE_BYTE) && defined(WORDS_BIGENDIAN)*/
static SANE_Status static void FUNC_NAME(genesys_reverse_ccd) (uint8_t* src_data, uint8_t* dst_data,
FUNC_NAME(genesys_reverse_ccd) ( unsigned int lines, unsigned int components_per_line,
uint8_t *src_data, unsigned int *ccd_shift, unsigned int component_count)
uint8_t *dst_data,
unsigned int lines,
unsigned int components_per_line,
unsigned int *ccd_shift,
unsigned int component_count)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
unsigned int x, y, c; unsigned int x, y, c;
@ -283,17 +258,12 @@ FUNC_NAME(genesys_reverse_ccd) (
} }
} }
} }
return SANE_STATUS_GOOD;
} }
static SANE_Status static void FUNC_NAME(genesys_shrink_lines) (uint8_t* src_data, uint8_t* dst_data,
FUNC_NAME(genesys_shrink_lines) ( unsigned int lines,
uint8_t *src_data, unsigned int src_pixels, unsigned int dst_pixels,
uint8_t *dst_data, unsigned int channels)
unsigned int lines,
unsigned int src_pixels,
unsigned int dst_pixels,
unsigned int channels)
{ {
DBG_HELPER(dbg); DBG_HELPER(dbg);
unsigned int dst_x, src_x, y, c, cnt; unsigned int dst_x, src_x, y, c, cnt;
@ -347,5 +317,4 @@ FUNC_NAME(genesys_shrink_lines) (
} }
} }
} }
return SANE_STATUS_GOOD;
} }