summaryrefslogtreecommitdiff
path: root/utils
AgeCommit message (Expand)Author
2022-10-18utils: ipc: Allow the skipHeader attribute on enumsPaul Elder
2022-10-18utils: ipc: Add support for FlagsPaul Elder
2022-10-18utils: ipc: Add support for enums in function parametersPaul Elder
2022-10-13utils: Provide a release scriptKieran Bingham
2022-10-13utils: semver: Add version helperKieran Bingham
2022-10-07utils: gen-controls: Improve YAML notation for variable-size array controlsLaurent Pinchart
2022-10-07utils: gen-controls: Factor out YAML data handling in classesLaurent Pinchart
2022-09-30utils: rkisp1: gen-csc-table: Add support for inverting the CSCLaurent Pinchart
2022-09-30utils: raspberrypi: Add missing SPDX header to delayedctrls_parse.pyLaurent Pinchart
2022-08-30utils: rkisp1: gen-csc-table: Specify coefficients with full precisionLaurent Pinchart
2022-08-26utils: rkisp1: Add script to generate CSC coefficientsLaurent Pinchart
2022-08-09libcamera: controls: Generate and use fixed-sized Span typesChristian Rauch
2022-08-03utils: raspberrypi: ctt: dng_load_image: Work with DNG files from Picamera2William Vinnicombe
2022-08-02utils: raspberrypi: ctt: Add alsc_only methodWilliam Vinnicombe
2022-07-28utils: raspberrypi: Add tuning file conversion scriptNaushir Patuck
2022-07-28utils: raspberrypi: ctt: Output version 2.0 format tuning filesNaushir Patuck
2022-07-27raspberrypi: Update Copyright statement in all Raspberry Pi source filesNaushir Patuck
2022-07-19utils: ipu3-pack: Provide a 10-bit bayer packing utilityUmang Jain
2022-07-15utils: rkisp1: Support optional CSI-2 receiver subdevLaurent Pinchart
2022-07-15utils: rkisp1: Fix pixel format for raw captureLaurent Pinchart
2022-07-15utils: rkisp1: Fix sensor format parsingLaurent Pinchart
2022-07-15utils: rkisp1: Remove frames before starting captureLaurent Pinchart
2022-07-13utils: ipu3-unpack: Fix error stringUmang Jain
2022-07-06utils: raspberrypi: ctt: load_image: Ignore JPEG files with no raw dataWilliam Vinnicombe
2022-06-03utils: checkstyle.py: Fix color bleedTomi Valkeinen
2022-06-01utils: checkstyle: Ensure "..." include style for internal headersLaurent Pinchart
2022-06-01utils: checkstyle: Run the CLangFormatter lastLaurent Pinchart
2022-03-28utils: hooks: pre-push: Catch commits without author's SoBLaurent Pinchart
2022-01-27utils: ipc: Add __init__.py for local module utils/ipc/generatorsHan-Lin Chen
2022-01-03utils: update-kernel-headers: Update path to intel-ipu3.hLaurent Pinchart
2021-12-14utils: tracepoints: gen-tp-header: Add execute permissionBrian Olson
2021-12-04libcamera: base: Rename FileDescriptor to SharedFDLaurent Pinchart
2021-12-04libcamera: ipc_unixsocket: Use UniqueFD for a file descriptorHirokazu Honda
2021-11-24utils: Convert to pragma onceKieran Bingham
2021-10-19build: Preserve upstream git versioning using meson distNaushir Patuck
2021-10-19utils: gen-version: Pass the meson source root to the gen-version.sh scriptNaushir Patuck
2021-10-19utils: hooks: pre-push: Check push to integration/* branchesLaurent Pinchart
2021-09-27libcamera: control_serializer: Separate the handles spaceJacopo Mondi
2021-09-27ipa: proxy_worker: Reset ControlSerializer on workerJacopo Mondi
2021-09-10utils: ipc: proxy worker: Fix indentation in call deserializationPaul Elder
2021-09-02libcamera: Drop emitter object pointer from signal argumentsLaurent Pinchart
2021-09-02libcamera: Don't use emitter object pointer argument to slotLaurent Pinchart
2021-08-27utils: checkstyle.py: Use single-quoted strings when possibleLaurent Pinchart
2021-08-19ipa: Use FileDescriptor instead of int in layers above IPC payloadPaul Elder
2021-08-18utils: ipc: ipa_proxy_worker: Log IPCUnixSocket::send() failuresLaurent Pinchart
2021-08-05utils: ipc: Initialise ThreadProxyKieran Bingham
2021-08-03utils: raspberrypi: ctt: Fix namespace for sklearn NearestCentroid functionDavid Plowman
2021-08-02utils: raspberrypi: ctt: Fix usage of findHomography functionDavid Plowman
2021-07-27utils: ipc: Assign a new gid to proxy workerUmang Jain
2021-07-09utils: ipc: proxy: Reset ControlSerializer during IPA configureUmang Jain
s="hl opt">= RGB; r_pos_ = 2; g_pos_ = 1; b_pos_ = 0; bpp_ = 3; break; case V4L2_PIX_FMT_RGB24: formatFamily_ = RGB; r_pos_ = 0; g_pos_ = 1; b_pos_ = 2; bpp_ = 3; break; case V4L2_PIX_FMT_ARGB32: formatFamily_ = RGB; r_pos_ = 1; g_pos_ = 2; b_pos_ = 3; bpp_ = 4; break; case V4L2_PIX_FMT_VYUY: formatFamily_ = YUV; y_pos_ = 1; cb_pos_ = 2; break; case V4L2_PIX_FMT_YVYU: formatFamily_ = YUV; y_pos_ = 0; cb_pos_ = 3; break; case V4L2_PIX_FMT_UYVY: formatFamily_ = YUV; y_pos_ = 1; cb_pos_ = 0; break; case V4L2_PIX_FMT_YUYV: formatFamily_ = YUV; y_pos_ = 0; cb_pos_ = 1; break; case V4L2_PIX_FMT_MJPEG: formatFamily_ = MJPEG; break; default: return -EINVAL; }; format_ = format; width_ = width; height_ = height; return 0; } void FormatConverter::convert(const unsigned char *src, size_t size, QImage *dst) { switch (formatFamily_) { case MJPEG: dst->loadFromData(src, size, "JPEG"); break; case YUV: convertYUV(src, dst->bits()); break; case RGB: convertRGB(src, dst->bits()); break; case NV: convertNV(src, dst->bits()); break; }; } static void yuv_to_rgb(int y, int u, int v, int *r, int *g, int *b) { int c = y - 16; int d = u - 128; int e = v - 128; *r = CLIP(( 298 * c + 409 * e + 128) >> RGBSHIFT); *g = CLIP(( 298 * c - 100 * d - 208 * e + 128) >> RGBSHIFT); *b = CLIP(( 298 * c + 516 * d + 128) >> RGBSHIFT); } void FormatConverter::convertNV(const unsigned char *src, unsigned char *dst) { unsigned int c_stride = width_ * (2 / horzSubSample_); unsigned int c_inc = horzSubSample_ == 1 ? 2 : 0; unsigned int cb_pos = nvSwap_ ? 1 : 0; unsigned int cr_pos = nvSwap_ ? 0 : 1; const unsigned char *src_c = src + width_ * height_; int r, g, b; for (unsigned int y = 0; y < height_; y++) { const unsigned char *src_y = src + y * width_; const unsigned char *src_cb = src_c + (y / vertSubSample_) * c_stride + cb_pos; const unsigned char *src_cr = src_c + (y / vertSubSample_) * c_stride + cr_pos; for (unsigned int x = 0; x < width_; x += 2) { yuv_to_rgb(*src_y, *src_cb, *src_cr, &r, &g, &b); dst[0] = b; dst[1] = g; dst[2] = r; dst[3] = 0xff; src_y++; src_cb += c_inc; src_cr += c_inc; dst += 4; yuv_to_rgb(*src_y, *src_cb, *src_cr, &r, &g, &b); dst[0] = b; dst[1] = g; dst[2] = r; dst[3] = 0xff; src_y++; src_cb += 2; src_cr += 2; dst += 4; } } } void FormatConverter::convertRGB(const unsigned char *src, unsigned char *dst) { unsigned int x, y; int r, g, b; for (y = 0; y < height_; y++) { for (x = 0; x < width_; x++) { r = src[bpp_ * x + r_pos_]; g = src[bpp_ * x + g_pos_]; b = src[bpp_ * x + b_pos_]; dst[4 * x + 0] = b; dst[4 * x + 1] = g; dst[4 * x + 2] = r; dst[4 * x + 3] = 0xff; } src += width_ * bpp_; dst += width_ * 4; } } void FormatConverter::convertYUV(const unsigned char *src, unsigned char *dst) { unsigned int src_x, src_y, dst_x, dst_y; unsigned int src_stride; unsigned int dst_stride; unsigned int cr_pos; int r, g, b, y, cr, cb; cr_pos = (cb_pos_ + 2) % 4; src_stride = width_ * 2; dst_stride = width_ * 4; for (src_y = 0, dst_y = 0; dst_y < height_; src_y++, dst_y++) { for (src_x = 0, dst_x = 0; dst_x < width_; ) { cb = src[src_y * src_stride + src_x * 4 + cb_pos_]; cr = src[src_y * src_stride + src_x * 4 + cr_pos]; y = src[src_y * src_stride + src_x * 4 + y_pos_]; yuv_to_rgb(y, cb, cr, &r, &g, &b); dst[dst_y * dst_stride + 4 * dst_x + 0] = b; dst[dst_y * dst_stride + 4 * dst_x + 1] = g; dst[dst_y * dst_stride + 4 * dst_x + 2] = r; dst[dst_y * dst_stride + 4 * dst_x + 3] = 0xff; dst_x++; y = src[src_y * src_stride + src_x * 4 + y_pos_ + 2]; yuv_to_rgb(y, cb, cr, &r, &g, &b); dst[dst_y * dst_stride + 4 * dst_x + 0] = b; dst[dst_y * dst_stride + 4 * dst_x + 1] = g; dst[dst_y * dst_stride + 4 * dst_x + 2] = r; dst[dst_y * dst_stride + 4 * dst_x + 3] = 0xff; dst_x++; src_x++; } } }