kopia lustrzana https://gitlab.com/sane-project/backends
genesys: Remove no longer used ImageBufferGenesysUsb
rodzic
d172b9cc4d
commit
ec5af18239
|
@ -74,7 +74,6 @@ class Image;
|
||||||
|
|
||||||
// image_buffer.h
|
// image_buffer.h
|
||||||
class ImageBuffer;
|
class ImageBuffer;
|
||||||
class ImageBufferGenesysUsb;
|
|
||||||
|
|
||||||
// image_pipeline.h
|
// image_pipeline.h
|
||||||
class ImagePipelineNode;
|
class ImagePipelineNode;
|
||||||
|
|
|
@ -107,77 +107,4 @@ bool ImageBuffer::get_data(std::size_t size, std::uint8_t* out_data)
|
||||||
return got_data;
|
return got_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageBufferGenesysUsb::ImageBufferGenesysUsb(std::size_t total_size,
|
|
||||||
std::size_t buffer_size,
|
|
||||||
ProducerCallback producer) :
|
|
||||||
remaining_size_{total_size},
|
|
||||||
buffer_size_{buffer_size},
|
|
||||||
producer_{producer}
|
|
||||||
{}
|
|
||||||
|
|
||||||
bool ImageBufferGenesysUsb::get_data(std::size_t size, std::uint8_t* out_data)
|
|
||||||
{
|
|
||||||
const std::uint8_t* out_data_end = out_data + size;
|
|
||||||
|
|
||||||
auto copy_buffer = [&]()
|
|
||||||
{
|
|
||||||
std::size_t bytes_copy = std::min<std::size_t>(out_data_end - out_data, available());
|
|
||||||
std::memcpy(out_data, buffer_.data() + buffer_offset_, bytes_copy);
|
|
||||||
out_data += bytes_copy;
|
|
||||||
buffer_offset_ += bytes_copy;
|
|
||||||
};
|
|
||||||
|
|
||||||
// first, read remaining data from buffer
|
|
||||||
if (available() > 0) {
|
|
||||||
copy_buffer();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (out_data == out_data_end) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// now the buffer is empty and there's more data to be read
|
|
||||||
do {
|
|
||||||
if (remaining_size_ == 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
auto bytes_to_read = get_read_size();
|
|
||||||
buffer_offset_ = 0;
|
|
||||||
buffer_end_ = bytes_to_read;
|
|
||||||
buffer_.resize(bytes_to_read);
|
|
||||||
|
|
||||||
producer_(bytes_to_read, buffer_.data());
|
|
||||||
|
|
||||||
if (remaining_size_ < bytes_to_read) {
|
|
||||||
remaining_size_ = 0;
|
|
||||||
} else {
|
|
||||||
remaining_size_ -= bytes_to_read;
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_buffer();
|
|
||||||
} while(out_data < out_data_end);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::size_t ImageBufferGenesysUsb::get_read_size()
|
|
||||||
{
|
|
||||||
std::size_t size = buffer_size_;
|
|
||||||
|
|
||||||
// never read an odd number. exception: last read
|
|
||||||
// the chip internal counter does not count half words.
|
|
||||||
size &= ~1;
|
|
||||||
|
|
||||||
// Some setups need the reads to be multiples of 256 bytes
|
|
||||||
size &= ~0xff;
|
|
||||||
|
|
||||||
if (remaining_size_ < size) {
|
|
||||||
size = remaining_size_;
|
|
||||||
/*round up to a multiple of 256 bytes */
|
|
||||||
size += (size & 0xff) ? 0x100 : 0x00;
|
|
||||||
size &= ~0xff;
|
|
||||||
}
|
|
||||||
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace genesys
|
} // namespace genesys
|
||||||
|
|
|
@ -85,40 +85,6 @@ private:
|
||||||
std::vector<std::uint8_t> buffer_;
|
std::vector<std::uint8_t> buffer_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// This class is similar to ImageBuffer, but preserves historical peculiarities of buffer handling
|
|
||||||
// in the backend to preserve exact behavior
|
|
||||||
class ImageBufferGenesysUsb
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
using ProducerCallback = std::function<void(std::size_t size, std::uint8_t* out_data)>;
|
|
||||||
|
|
||||||
ImageBufferGenesysUsb() {}
|
|
||||||
ImageBufferGenesysUsb(std::size_t total_size, std::size_t buffer_size,
|
|
||||||
ProducerCallback producer);
|
|
||||||
|
|
||||||
std::size_t remaining_size() const { return remaining_size_; }
|
|
||||||
|
|
||||||
void set_remaining_size(std::size_t bytes) { remaining_size_ = bytes; }
|
|
||||||
|
|
||||||
std::size_t available() const { return buffer_end_ - buffer_offset_; }
|
|
||||||
|
|
||||||
bool get_data(std::size_t size, std::uint8_t* out_data);
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
std::size_t get_read_size();
|
|
||||||
|
|
||||||
std::size_t remaining_size_ = 0;
|
|
||||||
|
|
||||||
std::size_t buffer_size_ = 0;
|
|
||||||
|
|
||||||
std::size_t buffer_offset_ = 0;
|
|
||||||
std::size_t buffer_end_ = 0;
|
|
||||||
std::vector<std::uint8_t> buffer_;
|
|
||||||
|
|
||||||
ProducerCallback producer_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace genesys
|
} // namespace genesys
|
||||||
|
|
||||||
#endif // BACKEND_GENESYS_IMAGE_BUFFER_H
|
#endif // BACKEND_GENESYS_IMAGE_BUFFER_H
|
||||||
|
|
Ładowanie…
Reference in New Issue