diff --git a/backend/genesys/fwd.h b/backend/genesys/fwd.h index ee45a44d4..9f3a89c66 100644 --- a/backend/genesys/fwd.h +++ b/backend/genesys/fwd.h @@ -74,7 +74,6 @@ class Image; // image_buffer.h class ImageBuffer; -class ImageBufferGenesysUsb; // image_pipeline.h class ImagePipelineNode; diff --git a/backend/genesys/image_buffer.cpp b/backend/genesys/image_buffer.cpp index 986f6b27c..c4f8019d3 100644 --- a/backend/genesys/image_buffer.cpp +++ b/backend/genesys/image_buffer.cpp @@ -107,77 +107,4 @@ bool ImageBuffer::get_data(std::size_t size, std::uint8_t* out_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(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 diff --git a/backend/genesys/image_buffer.h b/backend/genesys/image_buffer.h index e4db039e0..1910244cd 100644 --- a/backend/genesys/image_buffer.h +++ b/backend/genesys/image_buffer.h @@ -85,40 +85,6 @@ private: std::vector 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; - - 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 buffer_; - - ProducerCallback producer_; -}; - } // namespace genesys #endif // BACKEND_GENESYS_IMAGE_BUFFER_H