summaryrefslogtreecommitdiff
path: root/src/qcam/assets/feathericons/thumbs-up.svg
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2021-02-08 15:07:34 +0000
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-02-09 13:23:39 +0200
commit68b992e72e806810bcc1e580e2412f5ae404ad4a (patch)
treecab7c5679ebc73ae8105f7459787f77804d3ec4b /src/qcam/assets/feathericons/thumbs-up.svg
parent64e3aa23ffc9ae76683f159a39b19984587a840d (diff)
pipeline: raspberrypi: Set the ISP Output1 to 1/4 resolution if unused
In preparation for fast colour denoise, set the low resolution ISP output stream (Output1) to a 1/4 resolution of the application requested stream (Output0). This only happens if the application has not requested an additional YUV or RGB stream. We also constrain this 1/4 resolution to at most 1200 pixels in the largest dimension to avoid being too taxing on memory usage and system bandwidth. Also switch the default StreamRole::VideoRecording to YUV420 to allow fast colour denoise to run. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'src/qcam/assets/feathericons/thumbs-up.svg')
0 files changed, 0 insertions, 0 deletions
/span> LIBCAMERA_DECLARE_PUBLIC(CameraBuffer) public: Private(CameraBuffer *cameraBuffer, buffer_handle_t camera3Buffer, int flags); ~Private(); unsigned int numPlanes() const; Span<uint8_t> plane(unsigned int plane); size_t jpegBufferSize(size_t maxJpegBufferSize) const; }; CameraBuffer::Private::Private(CameraBuffer *cameraBuffer, buffer_handle_t camera3Buffer, int flags) : Extensible::Private(cameraBuffer) { maps_.reserve(camera3Buffer->numFds); error_ = 0; for (int i = 0; i < camera3Buffer->numFds; i++) { if (camera3Buffer->data[i] == -1) continue; off_t length = lseek(camera3Buffer->data[i], 0, SEEK_END); if (length < 0) { error_ = -errno; LOG(HAL, Error) << "Failed to query plane length"; break; } void *address = mmap(nullptr, length, flags, MAP_SHARED, camera3Buffer->data[i], 0); if (address == MAP_FAILED) { error_ = -errno; LOG(HAL, Error) << "Failed to mmap plane"; break; } maps_.emplace_back(static_cast<uint8_t *>(address), static_cast<size_t>(length)); } } CameraBuffer::Private::~Private() { } unsigned int CameraBuffer::Private::numPlanes() const { return maps_.size(); } Span<uint8_t> CameraBuffer::Private::plane(unsigned int plane) { if (plane >= maps_.size()) return {}; return maps_[plane]; } size_t CameraBuffer::Private::jpegBufferSize(size_t maxJpegBufferSize) const { return std::min<unsigned int>(maps_[0].size(), maxJpegBufferSize); } PUBLIC_CAMERA_BUFFER_IMPLEMENTATION