void transform_from_iface_units(rp_app_params_t *p) { float scale1, scale2, maxv; get_scales(p, &scale1, &scale2, &maxv); /* Re-calculate input parameters */ p[GEN_DC_NORM_1].value = p[GEN_DC_OFFS_1].value / scale1; p[GEN_DC_NORM_2].value = p[GEN_DC_OFFS_2].value / scale2; }
static GwyDataField* read_text_data(const gchar *buffer, gint text_data_start, GHashTable *hash, GError **error) { const gchar *p; gchar *end; gint xres, yres, i, power10; gdouble xreal, yreal, zscale, xoff, yoff, zoff; GwySIUnit *unitxy, *unitz; GwyDataField *dfield = NULL; gdouble *d; unitxy = gwy_si_unit_new(NULL); unitz = gwy_si_unit_new(NULL); if (!get_scales(hash, TRUE, &xres, &yres, &xreal, &yreal, &xoff, &yoff, unitxy, &zscale, &zoff, unitz, error)) goto fail; p = g_hash_table_lookup(hash, "DATA Unit"); gwy_si_unit_set_from_string_parse(unitz, p, &power10); zscale = pow10(power10); dfield = gwy_data_field_new(xres, yres, xreal, yreal, FALSE); gwy_data_field_set_xoffset(dfield, xoff); gwy_data_field_set_yoffset(dfield, yoff); gwy_data_field_set_si_unit_xy(dfield, unitxy); gwy_data_field_set_si_unit_z(dfield, unitz); d = gwy_data_field_get_data(dfield); p = (const gchar*)buffer + text_data_start; for (i = 0; i < xres*yres; i++) { d[i] = zscale*g_ascii_strtod(p, &end) + zoff; if (end == p) { g_set_error(error, GWY_MODULE_FILE_ERROR, GWY_MODULE_FILE_ERROR_DATA, _("Cannot parse data values after %d of %d."), i, xres*yres); gwy_object_unref(dfield); goto fail; } p = end + (*end == ','); } fail: g_object_unref(unitxy); g_object_unref(unitz); return dfield; }
void transform_to_iface_units(rp_app_params_t *p) { float scale, scale1, scale2, maxv; get_scales(p, &scale1, &scale2, &maxv); scale = (scale1 > scale2) ? scale1 : scale2; /* Re-calculate output parameters */ p[GUI_RST_Y_RANGE].value = 2.0 * maxv; p[MIN_Y_PARAM].value = p[MIN_Y_NORM].value * scale; p[MAX_Y_PARAM].value = p[MAX_Y_NORM].value * scale; p[GEN_DC_OFFS_1].value = p[GEN_DC_NORM_1].value * scale1; p[GEN_DC_OFFS_2].value = p[GEN_DC_NORM_2].value * scale2; p[SCALE_CH1].value = scale1; p[SCALE_CH2].value = scale2; }
static GwyDataField* read_binary_data(const gchar *buffer, gsize size, GHashTable *hash, GError **error) { ShimadzuDataType data_type; gint xres, yres, i; guint expected; gdouble xreal, yreal, zscale, xoff, yoff, zoff; GwySIUnit *unitxy, *unitz; GwyDataField *dfield = NULL; gdouble *d; const gchar *s; if (!(s = g_hash_table_lookup(hash, "DataType"))) { err_MISSING_FIELD(error, "DataType"); return NULL; } if (g_ascii_strcasecmp(s, "short") == 0) data_type = SHIMADZU_SHORT; else if (g_ascii_strcasecmp(s, "float") == 0) data_type = SHIMADZU_FLOAT; else { err_UNSUPPORTED(error, "DataType"); return NULL; } unitxy = gwy_si_unit_new(NULL); unitz = gwy_si_unit_new(NULL); if (!get_scales(hash, FALSE, &xres, &yres, &xreal, &yreal, &xoff, &yoff, unitxy, &zscale, &zoff, unitz, error)) goto fail; expected = data_type*xres*yres + HEADER_SIZE; if (err_SIZE_MISMATCH(error, expected, size, FALSE)) goto fail; dfield = gwy_data_field_new(xres, yres, xreal, yreal, FALSE); gwy_data_field_set_xoffset(dfield, xoff); gwy_data_field_set_yoffset(dfield, yoff); gwy_data_field_set_si_unit_xy(dfield, unitxy); gwy_data_field_set_si_unit_z(dfield, unitz); d = gwy_data_field_get_data(dfield); if (data_type == SHIMADZU_SHORT) { const gint16 *d16 = (const gint16*)(buffer + HEADER_SIZE); for (i = 0; i < xres*yres; i++) d[i] = zscale*GUINT16_FROM_LE(d16[i]) + zoff; } else if (data_type == SHIMADZU_FLOAT) { const guchar *p = buffer + HEADER_SIZE; for (i = 0; i < xres*yres; i++) d[i] = zscale*gwy_get_gfloat_le(&p) + zoff; } else { g_assert_not_reached(); } gwy_data_field_invert(dfield, TRUE, FALSE, FALSE); fail: g_object_unref(unitxy); g_object_unref(unitz); return dfield; }
static int sh_mobile_ceu_set_crop(struct soc_camera_device *icd, struct v4l2_crop *a) { struct v4l2_rect *rect = &a->c; struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); struct sh_mobile_ceu_dev *pcdev = ici->priv; struct v4l2_crop cam_crop; struct sh_mobile_ceu_cam *cam = icd->host_priv; struct v4l2_rect *cam_rect = &cam_crop.c, *ceu_rect = &cam->ceu_rect; struct v4l2_subdev *sd = soc_camera_to_subdev(icd); struct device *dev = icd->dev.parent; struct v4l2_format f; struct v4l2_pix_format *pix = &f.fmt.pix; unsigned int scale_comb_h, scale_comb_v, scale_ceu_h, scale_ceu_v, out_width, out_height; u32 capsr, cflcr; int ret; ret = get_scales(icd, &scale_comb_h, &scale_comb_v); if (ret < 0) return ret; dev_geo(dev, "1: combined scales %u:%u\n", scale_comb_h, scale_comb_v); ret = client_s_crop(sd, a, &cam_crop); if (ret < 0) return ret; dev_geo(dev, "2: camera cropped to %ux%u@%u:%u\n", cam_rect->width, cam_rect->height, cam_rect->left, cam_rect->top); out_width = scale_down(rect->width, scale_comb_h); out_height = scale_down(rect->height, scale_comb_v); if (out_width > 2560) out_width = 2560; else if (out_width < 2) out_width = 2; if (out_height > 1920) out_height = 1920; else if (out_height < 4) out_height = 4; dev_geo(dev, "3: Adjusted output %ux%u\n", out_width, out_height); pix->width = scale_down(cam_rect->width, scale_comb_h); pix->height = scale_down(cam_rect->height, scale_comb_v); dev_geo(dev, "5: camera target %ux%u\n", pix->width, pix->height); pix->pixelformat = cam->camera_fmt->fourcc; pix->colorspace = cam->camera_fmt->colorspace; capsr = capture_save_reset(pcdev); dev_dbg(dev, "CAPSR 0x%x, CFLCR 0x%x\n", capsr, pcdev->cflcr); rect->left -= cam_rect->left; rect->top -= cam_rect->top; f.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; ret = client_scale(icd, cam_rect, rect, ceu_rect, &f, pcdev->image_mode && !pcdev->is_interlaced); dev_geo(dev, "6-9: %d\n", ret); sh_mobile_ceu_set_rect(icd, out_width, out_height); dev_geo(dev, "10: CEU cropped to %ux%u@%u:%u\n", ceu_rect->width, ceu_rect->height, ceu_rect->left, ceu_rect->top); scale_ceu_h = calc_scale(ceu_rect->width, &out_width); scale_ceu_v = calc_scale(ceu_rect->height, &out_height); dev_geo(dev, "11: CEU scales %u:%u\n", scale_ceu_h, scale_ceu_v); cflcr = scale_ceu_h | (scale_ceu_v << 16); if (cflcr != pcdev->cflcr) { pcdev->cflcr = cflcr; ceu_write(pcdev, CFLCR, cflcr); } if (pcdev->active) capsr |= 1; capture_restore(pcdev, capsr); icd->user_width = out_width; icd->user_height = out_height; return ret; }