diff --git a/libraries/AP_HAL_Linux/VideoIn.cpp b/libraries/AP_HAL_Linux/VideoIn.cpp index 507ce7f41d..cc9794e310 100644 --- a/libraries/AP_HAL_Linux/VideoIn.cpp +++ b/libraries/AP_HAL_Linux/VideoIn.cpp @@ -249,6 +249,32 @@ void VideoIn::prepare_capture() } } +void VideoIn::crop_8bpp(uint8_t *buffer, uint8_t *new_buffer, + uint32_t width, uint32_t left, uint32_t crop_width, + uint32_t top, uint32_t crop_height) +{ + for (uint32_t j = top; j < top + crop_height; j++) { + for (uint32_t i = left; i < left + crop_width; i++) { + new_buffer[(i - left) + (j - top) * crop_width] = + buffer[i + j * width]; + } + } +} + +void VideoIn::yuyv_to_grey(uint8_t *buffer, uint32_t buffer_size, + uint8_t *new_buffer) +{ + uint32_t i; + uint32_t new_buffer_position = 0; + + for (i = 0; i < buffer_size; i++) { + if (i % 2 == 0) { + new_buffer[new_buffer_position] = buffer[i]; + new_buffer_position++; + } + } +} + uint32_t VideoIn::_timeval_to_us(struct timeval& tv) { return (1.0e6 * tv.tv_sec + tv.tv_usec); diff --git a/libraries/AP_HAL_Linux/VideoIn.h b/libraries/AP_HAL_Linux/VideoIn.h index 3d3f4cf59d..ef8a2eaa33 100644 --- a/libraries/AP_HAL_Linux/VideoIn.h +++ b/libraries/AP_HAL_Linux/VideoIn.h @@ -51,6 +51,14 @@ public: uint32_t width, uint32_t height); void prepare_capture(); + static void crop_8bpp(uint8_t *buffer, uint8_t *new_buffer, + uint32_t width, uint32_t left, + uint32_t crop_width, uint32_t top, + uint32_t crop_height); + + static void yuyv_to_grey(uint8_t *buffer, uint32_t buffer_size, + uint8_t *new_buffer); + private: void _queue_buffer(int index); bool _set_streaming(bool enable);