genesys: Use std::vector for Genesys_Device::img_buffer

merge-requests/76/head
Povilas Kanapickas 2019-05-25 11:15:41 +03:00
rodzic eb93267fa9
commit 38986c2c6f
3 zmienionych plików z 19 dodań i 47 usunięć

Wyświetl plik

@ -6070,7 +6070,6 @@ genesys_buffer_image(Genesys_Scanner *s)
size_t read_size; /**> size of reads */
int lines; /** number of lines of the scan */
Genesys_Device *dev = s->dev;
SANE_Byte *lineart=NULL;
/* compute maximum number of lines for the scan */
if (s->params.lines > 0)
@ -6099,14 +6098,7 @@ genesys_buffer_image(Genesys_Scanner *s)
/* read size */
read_size = size / 2;
/* allocate memory */
dev->img_buffer = (SANE_Byte *) malloc (size);
if (dev->img_buffer == NULL)
{
DBG(DBG_error, "%s: digital processing requires too much memory.\nConsider disabling it\n",
__func__);
return SANE_STATUS_NO_MEM;
}
dev->img_buffer.resize(size);
/* loop reading data until we reach maximum or EOF */
total = 0;
@ -6117,10 +6109,9 @@ genesys_buffer_image(Genesys_Scanner *s)
{
len = read_size;
}
status = genesys_read_ordered_data (dev, dev->img_buffer + total, &len);
status = genesys_read_ordered_data(dev, dev->img_buffer.data() + total, &len);
if (status != SANE_STATUS_EOF && status != SANE_STATUS_GOOD)
{
free (s->dev->img_buffer);
DBG(DBG_error, "%s: %s buffering failed\n", __func__, sane_strstatus(status));
return status;
}
@ -6130,14 +6121,7 @@ genesys_buffer_image(Genesys_Scanner *s)
if (total + read_size > size && status != SANE_STATUS_EOF)
{
size += read_size;
dev->img_buffer = (SANE_Byte *) realloc (dev->img_buffer, size);
if (dev->img_buffer == NULL)
{
DBG(DBG_error0,
"%s: digital processing requires too much memory.\nConsider disabling it\n",
__func__);
return SANE_STATUS_NO_MEM;
}
dev->img_buffer.resize(size);
}
}
@ -6157,21 +6141,14 @@ genesys_buffer_image(Genesys_Scanner *s)
if(s->dev->settings.dynamic_lineart==SANE_TRUE)
{
total/=8;
lineart=(SANE_Byte *)malloc(total);
if (lineart == NULL)
{
DBG(DBG_error0,
"%s: digital processing requires too much memory.\nConsider disabling it\n",
__func__);
return SANE_STATUS_NO_MEM;
}
std::vector<uint8_t> lineart(total);
genesys_gray_lineart (dev,
dev->img_buffer,
lineart,
dev->img_buffer.data(),
lineart.data(),
dev->settings.pixels,
(total*8)/dev->settings.pixels,
dev->settings.threshold);
free(dev->img_buffer);
dev->img_buffer = lineart;
}
@ -6183,7 +6160,7 @@ genesys_buffer_image(Genesys_Scanner *s)
s->params.lines = total / s->params.bytes_per_line;
if (DBG_LEVEL >= DBG_io2)
{
sanei_genesys_write_pnm_file("gl_unprocessed.pnm", dev->img_buffer, s->params.depth,
sanei_genesys_write_pnm_file("gl_unprocessed.pnm", dev->img_buffer.data(), s->params.depth,
s->params.format==SANE_FRAME_RGB ? 3 : 1,
s->params.pixels_per_line, s->params.lines);
}
@ -6386,7 +6363,6 @@ sane_open_impl(SANE_String_Const devicename, SANE_Handle * handle)
s->dev->read_active = SANE_FALSE;
s->dev->force_calibration = 0;
s->dev->calib_file = NULL;
s->dev->img_buffer = NULL;
s->dev->line_interp = 0;
s->dev->line_count = 0;
s->dev->segnb = 0;
@ -7229,7 +7205,7 @@ SANE_Status sane_start_impl(SANE_Handle handle)
if (s->val[OPT_SWSKIP].w && IS_ACTIVE(OPT_SWSKIP))
{
status = sanei_magic_isBlank(&s->params,
s->dev->img_buffer,
s->dev->img_buffer.data(),
SANE_UNFIX(s->val[OPT_SWSKIP].w));
if(status == SANE_STATUS_NO_DOCS)
{
@ -7400,7 +7376,7 @@ sane_read_impl(SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len, SANE_Int*
{
local_len=dev->total_bytes_to_read-dev->total_bytes_read;
}
memcpy(buf,dev->img_buffer+dev->total_bytes_read,local_len);
memcpy(buf, dev->img_buffer.data() + dev->total_bytes_read, local_len);
dev->total_bytes_read+=local_len;
}
@ -7437,11 +7413,7 @@ void sane_cancel_impl(SANE_Handle handle)
s->scanning = SANE_FALSE;
s->dev->read_active = SANE_FALSE;
if(s->dev->img_buffer!=NULL)
{
free(s->dev->img_buffer);
s->dev->img_buffer=NULL;
}
s->dev->img_buffer.clear();
/* no need to end scan if we are parking the head */
if(s->dev->parking==SANE_FALSE)

Wyświetl plik

@ -336,7 +336,7 @@ genesys_crop(Genesys_Scanner *s)
/* first find edges if any */
status = sanei_magic_findEdges (&s->params,
dev->img_buffer,
dev->img_buffer.data(),
dev->settings.xres,
dev->settings.yres,
&top,
@ -353,7 +353,7 @@ genesys_crop(Genesys_Scanner *s)
/* now crop the image */
status =
sanei_magic_crop (&(s->params), dev->img_buffer, top, bottom, left, right);
sanei_magic_crop (&(s->params), dev->img_buffer.data(), top, bottom, left, right);
if (status)
{
DBG (DBG_warn, "%s: failed to crop\n", __func__);
@ -390,7 +390,7 @@ genesys_deskew(Genesys_Scanner *s)
bg=0xff;
}
status = sanei_magic_findSkew (&s->params,
dev->img_buffer,
dev->img_buffer.data(),
dev->sensor.optical_res,
dev->sensor.optical_res,
&x,
@ -405,7 +405,7 @@ genesys_deskew(Genesys_Scanner *s)
/* rotate image slope is in [-PI/2,PI/2]
* positive values rotate trigonometric direction wise */
status = sanei_magic_rotate (&s->params,
dev->img_buffer,
dev->img_buffer.data(),
x,
y,
slope,
@ -427,7 +427,7 @@ static SANE_Status
genesys_despeck(Genesys_Scanner *s)
{
if(sanei_magic_despeck(&s->params,
s->dev->img_buffer,
s->dev->img_buffer.data(),
s->val[OPT_DESPECK].w)!=SANE_STATUS_GOOD)
{
DBG (DBG_error, "%s: bad despeck, bailing\n",__func__);
@ -447,7 +447,7 @@ genesys_derotate (Genesys_Scanner * s)
DBGSTART;
status = sanei_magic_findTurn (&s->params,
s->dev->img_buffer,
s->dev->img_buffer.data(),
resolution,
resolution,
&angle);
@ -460,7 +460,7 @@ genesys_derotate (Genesys_Scanner * s)
}
/* apply rotation angle found */
status = sanei_magic_turn (&s->params, s->dev->img_buffer, angle);
status = sanei_magic_turn (&s->params, s->dev->img_buffer.data(), angle);
if (status)
{
DBG (DBG_warn, "%s: failed : %d\n", __func__, status);

Wyświetl plik

@ -1004,7 +1004,7 @@ struct Genesys_Device
SANE_Bool buffer_image = 0;
// image buffer where the scanned picture is stored
SANE_Byte *img_buffer = nullptr;
std::vector<uint8_t> img_buffer;
// binary logger file
FILE *binary = nullptr;