Add PointGrey Grasshopper support; fixed DATAMAX for 8- and 12-bit images

This commit is contained in:
Edward Emelianov 2023-02-03 09:57:35 +03:00
parent 5aed1d5955
commit 089370d276
13 changed files with 1810 additions and 1297 deletions

View File

@ -36,28 +36,6 @@ static uint32_t expostime = 0.; // current exposition time (in microseconds)
static PYLON_DEVICECALLBACK_HANDLE hCb;
static int curhbin = 1, curvbin = 1;
#if 0
static void *handle = NULL;
static char camname[BUFSIZ] = {0};
//static long cam_err, tmpl;
static capture_status capStatus = CAPTURE_NO;
static int curhbin = 1, curvbin = 1;
static double starttime = 0.; // time when exposure started
static float exptime = 0.; // exposition time (in seconds)
static uint8_t *pdata = NULL;
static int pdatasz = 0;
static struct{
float maxgain;
float mingain;
float maxbright;
float minbright;
float minexp;
float maxexp;
int maxbin;
} extrvalues = {0}; // extremal values
#endif
typedef struct{
int64_t min;
int64_t max;
@ -298,7 +276,6 @@ static int setdevno(int N){
PYLONFN(PylonDeviceFeatureToString, hDev, "DeviceModelName", camname, &l);
DBG("Using camera %s\n", camname);
}else strcpy(camname, "Unknown camera");
if(!getbin(NULL, NULL)) WARNX("Can't get current binning");
if(!getgeom()) WARNX("Can't get current frame format");
PylonDeviceRegisterRemovalCallback(hDev, removalCallbackFunction, &hCb);
@ -390,6 +367,7 @@ static int capture(IMG *ima){
}
}
}
ima->bitpix = (is16bit) ? 16 : 8;
return TRUE;
}
@ -404,7 +382,6 @@ static int setexp(float e){
if(!isopened) return FALSE;
e *= 1e6f;
if(!setFloat("ExposureTime", e)){
LOGWARN("Can't set expose time %g", e);
WARNX("Can't set expose time %g", e);
return FALSE;
}
@ -419,7 +396,6 @@ static int setgain(float e){
FNAME();
if(!isopened) return FALSE;
if(!setFloat("Gain", e)){
LOGWARN("Can't set gain %g", e);
WARNX("Can't set gain %g", e);
return FALSE;
}
@ -501,21 +477,6 @@ static int vtrue(){ return TRUE; }
static int ipfalse(_U_ int *i){ return FALSE; }
static void vstub(){ return ;}
#if 0
// exported object
camera Basler = {
.disconnect = disconnect,
.connect = connect,
.capture = capture,
.setbrightness = setbrightness,
.setexp = setexp,
.setgain = setgain,
.setgeometry = changeformat,
.getgeomlimits = geometrylimits,
.getmaxgain = gainmax,
};
#endif
/*
* Global objects: camera, focuser and wheel
*/

View File

@ -16,6 +16,7 @@ option(ZWO "Add support of ZWO cameras" OFF)
option(FLI "Add support of FLI cameras" OFF)
option(BASLER "Add support of BASLER cameras" OFF)
option(HIKROBOT "Add support of HIKROBOT cameras" OFF)
option(FLYCAP "Add support of Grasshopper FlyCap cameras" OFF)
# default flags
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -W -Wextra -std=gnu99")
@ -92,6 +93,9 @@ endif()
if(BASLER)
add_subdirectory(BASLER_cameras)
endif()
if(FLYCAP)
add_subdirectory(GRH_cameras)
endif()
# directory should contain dir locale/ru for gettext translations

View File

@ -74,6 +74,7 @@ static int camcapt(IMG *ima){
*d++ = (uint16_t)((1 + sin((n+x) * M_PI/50)*sin((n+y) * M_PI/100))*32767.);
}
++n;
ima->bitpix = 16;
return TRUE;
}

View File

@ -67,6 +67,7 @@ static capture_status capStatus = CAPTURE_NO;
static int curhbin = 1, curvbin = 1;
static long filterpos = -1, filtermax = -1; // filter position
static long focuserpos = -1, focmaxpos = -1; // focuser position
static int is16bit = TRUE;
static int fli_init(){
char libver[LIBVERSIZ]; // FLI library version
@ -465,6 +466,7 @@ static int fli_capt(IMG *ima){
TRYFUNC(FLIGrabRow, camdev, &ima->data[row * ima->w], ima->w);
if(fli_err) return FALSE;
}
ima->bitpix = is16bit ? 16 : 8;
return TRUE;
}
@ -619,6 +621,7 @@ static int fli_setbitdepth(int i){
flibitdepth_t depth = i ? FLI_MODE_16BIT : FLI_MODE_8BIT;
TRYFUNC(FLISetBitDepth, camdev, depth);
if(fli_err) return FALSE;
is16bit = (i) ? TRUE : FALSE;
return TRUE;
}

View File

@ -0,0 +1,15 @@
cmake_minimum_required(VERSION 3.20)
set(CCDLIB devflycap)
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
find_package(PkgConfig REQUIRED)
find_package(FLYCAP REQUIRED)
pkg_check_modules(${CCDLIB} REQUIRED usefull_macros)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC)
include_directories(${${CCDLIB}_INCLUDE_DIRS} ${FLYCAP_INCLUDE_DIRS} ..)
link_directories(${${CCDLIB}_LIBRARY_DIRS} ${FLYCAP_LIBRARY_DIRS})
add_library(${CCDLIB} SHARED ${SRC})
target_link_libraries(${CCDLIB} ${${CCDLIB}_LIBRARIES} ${FLYCAP_LIBRARY} ${FLYCAP_LIBRARYC} -fPIC)
install(TARGETS ${CCDLIB} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})

View File

@ -0,0 +1,40 @@
# - Try to find libflycapture
# Once done this will define
#
# FLYCAP_FOUND - system has libflycapture
# FLYCAP_INCLUDE_DIR - include directory
# FLYCAP_LIBRARIES - Link these to use libflycapture
# Copyright (c) 2021, Edward V. Emelianov <edward.emelianoff@gmail.com>
#
# Redistribution and use is allowed according to the terms of the GPLv2/GPLv3.
include(GNUInstallDirs)
find_path(FLYCAP_INCLUDE_DIR FlyCapture2.h
PATH_SUFFIXES libflycapture flycapture
PATHS /usr/include /usr/local/include /opt/include /opt/local/include
)
find_path(FLYCAP_LIBRARY_DIR libflycapture.so
PATHS /lib /lib64 /usr/lib /usr/lib64 /opt/lib /opt/lib64 /usr/local/lib /usr/local/lib64
)
find_library(FLYCAP_LIBRARY NAMES flycapture
PATHS /lib /lib64 /usr/lib /usr/lib64 /opt/lib /opt/lib64 /usr/local/lib /usr/local/lib64
)
find_library(FLYCAP_LIBRARYC NAMES flycapture-c
PATHS /lib /lib64 /usr/lib /usr/lib64 /opt/lib /opt/lib64 /usr/local/lib /usr/local/lib64
)
find_package_handle_standard_args(FLYCAP DEFAULT_MSG FLYCAP_INCLUDE_DIR FLYCAP_LIBRARY FLYCAP_LIBRARYC FLYCAP_LIBRARY_DIR)
if(FLYCAP_FOUND)
set(FLYCAP_INCLUDE_DIRS ${FLYCAP_INCLUDE_DIR})
set(FLYCAP_LIBRARIES ${FLYCAP_LIBRARY} ${FLYCAP_LIBRARYC})
set(FLYCAP_LIBRARY_DIRS ${FLYCAP_LIBRARY_DIR})
# message("FLYCAP include dir = ${FLYCAP_INCLUDE_DIRS}")
# message("FLYCAP lib = ${FLYCAP_LIBRARIES}")
# message("FLYCAP libdir = ${FLYCAP_LIBRARY_DIRS}")
mark_as_advanced(FLYCAP_INCLUDE_DIRS FLYCAP_LIBRARIES FLYCAP_LIBRARY_DIRS)
else()
message("FLYCAP not found")
endif(FLYCAP_FOUND)

476
GRH_cameras/grasshopper.c Normal file
View File

@ -0,0 +1,476 @@
/*
* This file is part of the CCD_Capture project.
* Copyright 2023 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <C/FlyCapture2_C.h>
#include <C/FlyCapture2Defs_C.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <usefull_macros.h>
#include "basestructs.h"
#include "omp.h"
extern Camera camera;
static fc2Context context;
static fc2PGRGuid guid;
static fc2Error err = FC2_ERROR_OK;
static int isopened = FALSE, is16bit = FALSE;
static char camname[BUFSIZ] = {0};
#ifndef Stringify
#define Stringify(x) #x
#endif
#define FC2FN(fn, ...) do{err = FC2_ERROR_OK; if(FC2_ERROR_OK != (err=fn(context __VA_OPT__(,) __VA_ARGS__))){ \
WARNX(Stringify(fn) "(): %s", fc2ErrorToDescription(err)); return FALSE;}}while(0)
static void disconnect(){
FNAME();
if(!isopened) return;
fc2DestroyContext(context);
isopened = FALSE;
}
static int getfloat(fc2PropertyType t, float *f){
fc2Property prop = {0};
prop.type = t;
FC2FN(fc2GetProperty, &prop);
if(!prop.present){
DBG("No property %d", t);
return FALSE;
}
DBG("property %d: abs=%f, vala=%u, valb=%u", t,
prop.absValue, prop.valueA, prop.valueB);
if(f) *f = prop.absValue;
return TRUE;
}
/**
* @brief setfloat - set absolute property value (float)
* @param t - type of property
* @param f - new value
* @return 1 if all OK
*/
static int setfloat(fc2PropertyType t, float f){
fc2Property prop = {0};
prop.type = t;
fc2PropertyInfo i = {0};
i.type = t;
FC2FN(fc2GetProperty, &prop);
FC2FN(fc2GetPropertyInfo, &i);
if(!prop.present || !i.present) return 0;
if(prop.autoManualMode){
if(!i.manualSupported){
WARNX("Can't set auto-only property");
return FALSE;
}
prop.autoManualMode = false;
}
if(!prop.absControl){
if(!i.absValSupported){
WARNX("Can't set non-absolute property to absolute value");
return FALSE;
}
prop.absControl = true;
}
if(!prop.onOff){
if(!i.onOffSupported){
WARNX("Can't set property ON");
return FALSE;
}
prop.onOff = true;
}
if(prop.onePush && i.onePushSupported) prop.onePush = false;
prop.valueA = prop.valueB = 0;
prop.absValue = f;
FC2FN(fc2SetProperty, &prop);
// now check
FC2FN(fc2GetProperty, &prop);
if(fabsf(prop.absValue - f) > 0.02f){
WARNX("Can't set property! Got %g instead of %g.", prop.absValue, f);
return FALSE;
}
return TRUE;
}
static int propOnOff(fc2PropertyType t, BOOL onOff){
fc2Property prop = {0};
prop.type = t;
fc2PropertyInfo i = {0};
i.type = t;
FC2FN(fc2GetPropertyInfo, &i);
FC2FN(fc2GetProperty, &prop);
if(!prop.present || !i.present) return 0;
if(prop.onOff == onOff) return 0;
if(!i.onOffSupported){
WARNX("Property doesn't support state OFF");
return 0;
}
prop.onOff = onOff;
FC2FN(fc2SetProperty, &prop);
FC2FN(fc2GetProperty, &prop);
if(prop.onOff != onOff){
WARNX("Can't change property OnOff state");
return 0;
}
return 1;
}
static void disableauto(){
if(!isopened) return;
propOnOff(FC2_AUTO_EXPOSURE, false);
propOnOff(FC2_WHITE_BALANCE, false);
propOnOff(FC2_GAMMA, false);
propOnOff(FC2_TRIGGER_MODE, false);
propOnOff(FC2_TRIGGER_DELAY, false);
propOnOff(FC2_FRAME_RATE, false);
}
static int connect(){
FNAME();
unsigned int numDevices;
disconnect();
DBG("fc2CreateContext");
if(FC2_ERROR_OK != (err = fc2CreateContext(&context))){
WARNX("fc2CreateContext(): %s", fc2ErrorToDescription(err));
return FALSE;
}
DBG("fc2GetNumOfCameras");
FC2FN(fc2GetNumOfCameras, &numDevices);
DBG("test");
if(numDevices == 0){
WARNX("No cameras detected!");
fc2DestroyContext(context);
return FALSE;
}
camera.Ndevices = numDevices;
DBG("Found %d camera[s]", numDevices);
return TRUE;
}
static int getbin(int *binh, int *binv){
//unsigned int h, v;
//FC2FN(fc2GetGigEImageBinningSettings, &h, &v);
//green("got: %u x %u", h, v);
if(binh) *binh = 1;
if(binv) *binv = 1;
return TRUE;
}
static int getformat(frameformat *fmt){
if(!fmt) return FALSE;
unsigned int packsz; float pc;
fc2Format7ImageSettings f7;
FC2FN(fc2GetFormat7Configuration, &f7, &packsz, &pc);
fmt->h = f7.height; fmt->w = f7.width;
fmt->xoff = f7.offsetX; fmt->yoff = f7.offsetY;
if(f7.pixelFormat != FC2_PIXEL_FORMAT_MONO16){
is16bit = FALSE;
DBG("8 bit");
}else{
is16bit = TRUE;
DBG("16 bit");
}
return TRUE;
}
static int getgeom(){
FNAME();
if(!isopened) return FALSE;
fc2Format7Info f = {.mode = FC2_MODE_0};
BOOL b;
FC2FN(fc2GetFormat7Info, &f, &b);
if(!b) return FALSE;
camera.array.h = f.maxHeight;
camera.array.w = f.maxWidth;
camera.array.xoff = camera.array.yoff = 0;
camera.field = camera.array;
getformat(&camera.geometry);
return TRUE;
}
static int geometrylimits(frameformat *max, frameformat *step){
FNAME();
if(!isopened || !max || !step) return FALSE;
fc2Format7Info f = {.mode = FC2_MODE_0};
BOOL b;
fc2Format7Info i = {0};
FC2FN(fc2GetFormat7Info, &i, &b);
if(!b) return FALSE;
max->h = f.maxHeight; max->w = f.maxWidth;
max->xoff = f.maxWidth - f.offsetHStepSize;
max->yoff = f.maxHeight - f.offsetVStepSize;
step->w = f.imageHStepSize;
step->h = f.imageVStepSize;
step->xoff = f.offsetHStepSize;
step->yoff = f.offsetVStepSize;
return TRUE;
}
static int setdevno(int N){
if(N > camera.Ndevices - 1) return FALSE;
FC2FN(fc2GetCameraFromIndex, 0, &guid);
FC2FN(fc2Connect, &guid);
isopened = TRUE;
disableauto();
fc2CameraInfo caminfo;
FC2FN(fc2GetCameraInfo, &caminfo);
if(err == FC2_ERROR_OK){
strncpy(camname, caminfo.modelName, BUFSIZ-1);
DBG("Using camera %s\n", camname);
}else strcpy(camname, "Unknown camera");
if(!getbin(NULL, NULL)) WARNX("Can't get current binning");
if(!getgeom()) WARNX("Can't get current frame format");
return TRUE;
}
// stub function: the capture process is blocking
static int pollcapt(capture_status *st, float *remain){
if(st) *st = CAPTURE_READY;
if(remain) *remain = 0.f;
return TRUE;
}
static int GrabImage(fc2Image *convertedImage){
if(!convertedImage) return FALSE;
int ret = FALSE;
fc2Image rawImage;
// start capture
FC2FN(fc2StartCapture);
err = fc2CreateImage(&rawImage);
if(err != FC2_ERROR_OK){
WARNX("Error in fc2CreateImage: %s", fc2ErrorToDescription(err));
fc2StopCapture(context);
return FALSE;
}
// Retrieve the image
err = fc2RetrieveBuffer(context, &rawImage);
if(err != FC2_ERROR_OK){
WARNX("Error in fc2RetrieveBuffer: %s", fc2ErrorToDescription(err));
goto rtn;
}
// Convert image to gray (we need to convert RAW into same bitpix
fc2PixelFormat fmt = (is16bit) ? FC2_PIXEL_FORMAT_MONO16 : FC2_PIXEL_FORMAT_MONO8;
err = fc2ConvertImageTo(fmt, &rawImage, convertedImage);
if(err != FC2_ERROR_OK){
WARNX("Error in fc2ConvertImageTo: %s", fc2ErrorToDescription(err));
goto rtn;
}
ret = TRUE;
DBG("raw: ds=%u, rds=%u, str=%u; conv: ds=%u, rds=%u, str=%u", rawImage.dataSize, rawImage.receivedDataSize, rawImage.stride,
convertedImage->dataSize, convertedImage->receivedDataSize, convertedImage->stride);
rtn:
fc2StopCapture(context);
fc2DestroyImage(&rawImage);
return ret;
}
static int capture(IMG *ima){
FNAME();
if(!ima || !ima->data || !isopened) return FALSE;
static int toohot = FALSE;
float f;
if(getfloat(FC2_TEMPERATURE, &f)){
DBG("Temperature: %.1f", f);
if(f > 80.){
WARNX("Device is too hot");
toohot = TRUE;
}else if(toohot && f < 75.){
DBG("Device temperature is normal");
toohot = FALSE;
}
}
fc2Image convertedImage;
err = fc2CreateImage(&convertedImage);
if(err != FC2_ERROR_OK){
WARNX("capture_grasshopper(): can't create image, %s", fc2ErrorToDescription(err));
return FALSE;
}
if(!GrabImage(&convertedImage)){
WARNX("Can't grab image");
fc2DestroyImage(&convertedImage);
return FALSE;
}
int width = convertedImage.cols, height = convertedImage.rows, stride = convertedImage.stride;
DBG("w=%d, h=%d, s=%d", width, height, stride);
if(is16bit){
int w2 = width<<1;
OMP_FOR()
for(int y = 0; y < height; ++y){
uint16_t *Out = &ima->data[y*width];
const uint8_t *In = &convertedImage.pData[y*stride];
memcpy(Out, In, w2);
}
}else{
OMP_FOR()
for(int y = 0; y < height; ++y){
uint16_t *Out = &ima->data[y*width];
const uint8_t *In = &convertedImage.pData[y*stride];
for(int x = 0; x < width; ++x){
*Out++ = *In++;
}
}
}
ima->bitpix = is16bit ? 16 : 8;
fc2DestroyImage(&convertedImage);
return TRUE;
}
static int setbrightness(float b){
return setfloat(FC2_BRIGHTNESS, b);
}
static int setexp(float e){
FNAME();
if(!isopened) return FALSE;
e *= 1e3f;
if(!setfloat(FC2_SHUTTER, e)){
WARNX("Can't set expose time %g", e);
return FALSE;
}
return TRUE;
}
static int setgain(float e){
FNAME();
if(!isopened) return FALSE;
if(!setfloat(FC2_GAIN, e)){
WARNX("Can't set gain %g", e);
return FALSE;
}
DBG("GAIN -> %f", e);
return TRUE;
}
static int changeformat(frameformat *fmt){
FNAME();
if(!isopened) return FALSE;
DBG("set geom %dx%d (off: %dx%d)", fmt->w, fmt->h, fmt->xoff, fmt->yoff);
BOOL b;
fc2Format7ImageSettings f7;
f7.mode = FC2_MODE_0;
f7.offsetX = fmt->xoff;
f7.offsetY = fmt->yoff;
f7.width = fmt->w;
f7.height = fmt->h;
DBG("offx=%d, offy=%d, w=%d, h=%d ", f7.offsetX, f7.offsetY, f7.width, f7.height);
f7.pixelFormat = (is16bit) ? FC2_PIXEL_FORMAT_MONO16 : FC2_PIXEL_FORMAT_MONO8;
fc2Format7PacketInfo f7p;
FC2FN(fc2ValidateFormat7Settings, &f7, &b, &f7p);
if(!b) return FALSE; // invalid
FC2FN(fc2SetFormat7Configuration, &f7, f7p.recommendedBytesPerPacket);
getformat(&camera.geometry);
return TRUE;
}
static int setbitdepth(int i){
frameformat fmt;
getformat(&fmt);
int o16bit = is16bit;
if(i == 0) is16bit = FALSE; // 8 bit
else is16bit = TRUE;
if(!changeformat(&fmt)){
is16bit = o16bit;
return FALSE;
}
return TRUE;
}
static int getgain(float *g){
return getfloat(FC2_GAIN, g);
}
static int gainmax(float *g){
if(g) *g = 32.f;
return TRUE;
}
static int modelname(char *buf, int bufsz){
strncpy(buf, camname, bufsz);
return TRUE;
}
// can't do binning
static int setbin(int binh, int binv){
//FC2FN(fc2SetGigEImageBinningSettings, binh, binv);
//getbin(&binh, &binv);
if(binh != 1 || binv != 1) return FALSE;
return TRUE;
}
static int gett(float *t){
return getfloat(FC2_TEMPERATURE, t);
}
static int setfanspd(_U_ fan_speed s){
return FALSE;
}
static int shutter(_U_ shutter_op cmd){
return FALSE;
}
static int ffalse(_U_ float f){ return FALSE; }
static int fpfalse(_U_ float *f){ return FALSE; }
static int ifalse(_U_ int i){ return FALSE; }
static int vtrue(){ return TRUE; }
static int ipfalse(_U_ int *i){ return FALSE; }
static void vstub(){ return ;}
/*
* Global objects: camera, focuser and wheel
*/
Camera camera = {
.check = connect,
.close = disconnect,
.pollcapture = pollcapt,
.capture = capture,
.cancel = vstub,
.startexposition = vtrue,
// setters:
.setDevNo = setdevno,
.setbrightness = setbrightness,
.setexp = setexp,
.setgain = setgain,
.setT = ffalse,
.setbin = setbin,
.setnflushes = ifalse,
.shuttercmd = shutter,
.confio = ifalse,
.setio = ifalse,
.setframetype = ifalse, // set DARK or NORMAL: no shutter -> no darks
.setbitdepth = setbitdepth,
.setfastspeed = ifalse,
.setgeometry = changeformat,
.setfanspeed = setfanspd,
// getters:
.getbrightness = fpfalse,
.getModelName = modelname,
.getgain = getgain,
.getmaxgain = gainmax,
.getgeomlimits = geometrylimits,
.getTcold = fpfalse,
.getThot = fpfalse,
.getTbody = gett,
.getbin = getbin,
.getio = ipfalse,
};

View File

@ -458,6 +458,7 @@ static int cam_capt(IMG *ima){
//green("pixsize=%d\n", EnumValue.nCurValue);
if(EnumValue.nCurValue == 16){
memcpy(ima->data, pdata, bytes);
ima->bitpix = 12;
return TRUE;
}else if(EnumValue.nCurValue != 8){
WARNX("Unsupported pixel size");
@ -472,6 +473,7 @@ static int cam_capt(IMG *ima){
for(int i = 0; i < bytes; ++i){
ima->data[i] = (uint16_t) *ptr++;
}
ima->bitpix = 8;
return TRUE;
}

View File

@ -119,6 +119,7 @@ static int camcapt(IMG *ima){
WARNX("Couldn't read exposure data\n");
return FALSE;
}
ima->bitpix = 16;
return TRUE;
}

View File

@ -24,6 +24,7 @@
typedef struct{
uint16_t *data; // image data
uint8_t bitpix; // bits per pixel (8 or 16)
int w, h; // image size
uint16_t max, min; // min/max values
float avr, std; // statistics

View File

@ -248,8 +248,7 @@ int saveFITS(IMG *img, char **outp){
// DATAMAX, DATAMIN / Max, min pixel value
tmpi = 0;
WRITEKEY(fp, TINT, "DATAMIN", &tmpi, "Min pixel value");
//itmp = GP->fast ? 255 : 65535;
tmpi = 65535;
tmpi = (1<<img->bitpix) - 1;
WRITEKEY(fp, TINT, "DATAMAX", &tmpi, "Max pixel value");
tmpi = img->min;
WRITEKEY(fp, TUSHORT, "STATMIN", &tmpi, "Min data value");

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-12-22 11:40+0300\n"
"POT-Creation-Date: 2023-02-03 09:26+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -279,273 +279,278 @@ msgstr ""
msgid "Can't save file with prefix %s"
msgstr ""
#: ccdfunc.c:357
#: ccdfunc.c:356
#, c-format
msgid "File saved as '%s'"
msgstr ""
#: ccdfunc.c:366
#: ccdfunc.c:365
msgid "Error saving file"
msgstr ""
#: ccdfunc.c:406
#: ccdfunc.c:405
#, c-format
msgid "Image stat:\n"
msgstr ""
#: ccdfunc.c:414
#: ccdfunc.c:413
msgid "Focuser device not pointed"
msgstr ""
#: ccdfunc.c:421
#: ccdfunc.c:420
msgid "No focusers found"
msgstr ""
#: ccdfunc.c:453
#: ccdfunc.c:452
#, c-format
msgid "Found %d focusers, you point number %d"
msgstr ""
#: ccdfunc.c:457
#: ccdfunc.c:456
msgid "Can't set active focuser number"
msgstr ""
#: ccdfunc.c:471
#: ccdfunc.c:470
msgid "Can't get focuser limit positions"
msgstr ""
#: ccdfunc.c:478
#: ccdfunc.c:477
msgid "Can't get current focuser position"
msgstr ""
#: ccdfunc.c:492
#: ccdfunc.c:491
#, c-format
msgid "Can't set position %g: out of limits [%g, %g]"
msgstr ""
#: ccdfunc.c:496
#: ccdfunc.c:495
msgid "Can't home focuser"
msgstr ""
#: ccdfunc.c:498
#: ccdfunc.c:497
#, c-format
msgid "Can't set position %g"
msgstr ""
#: ccdfunc.c:506
#: ccdfunc.c:505
msgid "Wheel device not pointed"
msgstr ""
#: ccdfunc.c:513
#: ccdfunc.c:512
msgid "No wheels found"
msgstr ""
#: ccdfunc.c:545
#: ccdfunc.c:544
#, c-format
msgid "Found %d wheels, you point number %d"
msgstr ""
#: ccdfunc.c:549
#: ccdfunc.c:548
msgid "Can't set active wheel number"
msgstr ""
#: ccdfunc.c:565
#: ccdfunc.c:564
msgid "Can't get max wheel position"
msgstr ""
#: ccdfunc.c:572
#: ccdfunc.c:571
#, c-format
msgid "Wheel position should be from 0 to %d"
msgstr ""
#: ccdfunc.c:576
#: ccdfunc.c:575
#, c-format
msgid "Can't set wheel position %d"
msgstr ""
#: ccdfunc.c:593
#: ccdfunc.c:592
#, c-format
msgid "%.1f seconds till exposition ends"
msgstr ""
#: ccdfunc.c:607
#: ccdfunc.c:606
msgid "Camera device not pointed"
msgstr ""
#: ccdfunc.c:614 ccdfunc.c:615
#: ccdfunc.c:613 ccdfunc.c:614
msgid "No cameras found"
msgstr ""
#: ccdfunc.c:650
#: ccdfunc.c:649
#, c-format
msgid "Found %d cameras, you point number %d"
msgstr ""
#: ccdfunc.c:654
#: ccdfunc.c:653
msgid "Can't set active camera number"
msgstr ""
#: ccdfunc.c:660
#: ccdfunc.c:659
msgid "Can't set fan speed"
msgstr ""
#: ccdfunc.c:661
#: ccdfunc.c:660
#, c-format
msgid "Set fan speed to %d"
msgstr ""
#: ccdfunc.c:666
#: ccdfunc.c:665
#, c-format
msgid "Camera model: %s"
msgstr ""
#: ccdfunc.c:667
#: ccdfunc.c:666
#, c-format
msgid "Pixel size: %g x %g"
msgstr ""
#: ccdfunc.c:673
#: ccdfunc.c:672
#, c-format
msgid "Full array: %s"
msgstr ""
#: ccdfunc.c:676
#: ccdfunc.c:675
#, c-format
msgid "Field of view: %s"
msgstr ""
#: ccdfunc.c:679
#: ccdfunc.c:678
#, c-format
msgid "Current format: %s"
msgstr ""
#: ccdfunc.c:681
#, c-format
msgid "Can't set T to %g degC"
msgstr ""
#: ccdfunc.c:686
#: ccdfunc.c:688
#, c-format
msgid "Shutter command: %s\n"
msgstr ""
#: ccdfunc.c:688
#: ccdfunc.c:690
#, c-format
msgid "Can't run shutter command %s (unsupported?)"
msgstr ""
#. "Попытка сконфигурировать порт I/O как %d\n"
#: ccdfunc.c:692
#: ccdfunc.c:694
#, c-format
msgid "Try to configure I/O port as %d"
msgstr ""
#: ccdfunc.c:694
#: ccdfunc.c:696
msgid "Can't configure (unsupported?)"
msgstr ""
#: ccdfunc.c:700
#: ccdfunc.c:702
msgid "Can't get IOport state (unsupported?)"
msgstr ""
#. "Попытка записи %d в порт I/O\n"
#: ccdfunc.c:704
#: ccdfunc.c:706
#, c-format
msgid "Try to write %d to I/O port"
msgstr ""
#: ccdfunc.c:706
#: ccdfunc.c:708
msgid "Can't set IOport"
msgstr ""
#: ccdfunc.c:713
#: ccdfunc.c:715
#, c-format
msgid "Set gain to %g"
msgstr ""
#: ccdfunc.c:714
#: ccdfunc.c:716
#, c-format
msgid "Can't set gain to %g"
msgstr ""
#: ccdfunc.c:719
#: ccdfunc.c:721
#, c-format
msgid "Set brightness to %g"
msgstr ""
#: ccdfunc.c:720
#: ccdfunc.c:722
#, c-format
msgid "Can't set brightness to %g"
msgstr ""
#: ccdfunc.c:728 server.c:223
#: ccdfunc.c:730 server.c:223
#, c-format
msgid "Can't set binning %dx%d"
msgstr ""
#: ccdfunc.c:738 server.c:224
#: ccdfunc.c:742 server.c:224
msgid "Can't set given geometry"
msgstr ""
#: ccdfunc.c:742
#, c-format
msgid "Can't set %d flushes"
msgstr ""
#: ccdfunc.c:746
#, c-format
msgid "Can't set %d flushes"
msgstr ""
#: ccdfunc.c:750
#, c-format
msgid "Can't set exposure time to %f seconds"
msgstr ""
#: ccdfunc.c:749
#: ccdfunc.c:753
msgid "Can't change frame type"
msgstr ""
#: ccdfunc.c:752
#: ccdfunc.c:756
msgid "Can't set bit depth"
msgstr ""
#: ccdfunc.c:754
#: ccdfunc.c:758
msgid "Can't set readout speed"
msgstr ""
#: ccdfunc.c:755
#: ccdfunc.c:759
#, c-format
msgid "Readout mode: %s"
msgstr ""
#: ccdfunc.c:756
#: ccdfunc.c:760
msgid "Only show statistics"
msgstr ""
#. GET binning should be AFTER setgeometry!
#: ccdfunc.c:758
#: ccdfunc.c:762
msgid "Can't get current binning"
msgstr ""
#: ccdfunc.c:772
#: ccdfunc.c:776
msgid "Can't open OpenGL window, image preview will be inaccessible"
msgstr ""
#. Захват кадра %d\n
#: ccdfunc.c:780
#: ccdfunc.c:784
#, c-format
msgid "Capture frame %d"
msgstr ""
#: ccdfunc.c:782 server.c:121
#: ccdfunc.c:786 server.c:121
msgid "Can't start exposition"
msgstr ""
#: ccdfunc.c:786 ccdfunc.c:808 ccdfunc.c:849
#: ccdfunc.c:790 ccdfunc.c:816 ccdfunc.c:857
msgid "Can't capture image"
msgstr ""
#: ccdfunc.c:789
#: ccdfunc.c:793
msgid "Read grabbed image"
msgstr ""
#: ccdfunc.c:792 ccdfunc.c:812 ccdfunc.c:853
#: ccdfunc.c:796 ccdfunc.c:820 ccdfunc.c:861
msgid "Can't grab image"
msgstr ""
#. %d секунд до окончания паузы\n
#: ccdfunc.c:829 client.c:260
#: ccdfunc.c:837 client.c:260
#, c-format
msgid "%d seconds till pause ends\n"
msgstr ""

View File

@ -7,7 +7,7 @@
msgid ""
msgstr "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-12-20 15:47+0300\n"
"POT-Creation-Date: 2023-02-03 09:26+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -16,13 +16,13 @@ msgstr "Project-Id-Version: PACKAGE VERSION\n"
"Content-Type: text/plain; charset=koi8-r\n"
"Content-Transfer-Encoding: 8bit\n"
#: ccdfunc.c:593
#: ccdfunc.c:592
#, c-format
msgid "%.1f seconds till exposition ends"
msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ"
#. %d Ñ<>екунд до окончаниÑ<C2B8> паузы\n
#: ccdfunc.c:829 client.c:260
#: ccdfunc.c:837 client.c:260
#, c-format
msgid "%d seconds till pause ends\n"
msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n"
@ -39,7 +39,7 @@ msgstr "
msgid "CMOS gain level"
msgstr "ÕÒÏ×ÅÎØ Gain CMOS"
#: ccdfunc.c:607
#: ccdfunc.c:606
msgid "Camera device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÐÏÄËÌÀÞÅÎÏ"
@ -47,20 +47,20 @@ msgstr "
msgid "Camera device unknown"
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÏÐÏÚÎÁÎÏ"
#: ccdfunc.c:666
#: ccdfunc.c:665
#, c-format
msgid "Camera model: %s"
msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s"
#: ccdfunc.c:786 ccdfunc.c:808 ccdfunc.c:849
#: ccdfunc.c:790 ccdfunc.c:816 ccdfunc.c:857
msgid "Can't capture image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
#: ccdfunc.c:749
#: ccdfunc.c:753
msgid "Can't change frame type"
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÉÐ ËÁÄÒÁ"
#: ccdfunc.c:694
#: ccdfunc.c:696
msgid "Can't configure (unsupported?)"
msgstr "îÅ ÍÏÇÕ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ (ÏÐÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
@ -84,32 +84,32 @@ msgstr "
msgid "Can't find wheel in plugin %s: %s"
msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÐÌÁÇÉÎ ÔÕÒÅÌÉ %s: %s"
#: ccdfunc.c:700
#: ccdfunc.c:702
msgid "Can't get IOport state (unsupported?)"
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÓÏÓÔÏÑÎÉÅ ÐÏÒÔÁ I/O (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#. GET binning should be AFTER setgeometry!
#: ccdfunc.c:758
#: ccdfunc.c:762
msgid "Can't get current binning"
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ ÂÉÎÎÉÎÇÁ"
#: ccdfunc.c:478
#: ccdfunc.c:477
msgid "Can't get current focuser position"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÔÅËÕÝÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ"
#: ccdfunc.c:471
#: ccdfunc.c:470
msgid "Can't get focuser limit positions"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ"
#: ccdfunc.c:565
#: ccdfunc.c:564
msgid "Can't get max wheel position"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ËÏÌÅÓÁ"
#: ccdfunc.c:792 ccdfunc.c:812 ccdfunc.c:853
#: ccdfunc.c:796 ccdfunc.c:820 ccdfunc.c:861
msgid "Can't grab image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
#: ccdfunc.c:496
#: ccdfunc.c:495
msgid "Can't home focuser"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÆÏËÕÓÅÒ × ÎÕÌØ"
@ -121,11 +121,11 @@ msgstr "
msgid "Can't make exposition"
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ÜËÓÐÏÚÉÃÉÀ"
#: ccdfunc.c:772
#: ccdfunc.c:776
msgid "Can't open OpenGL window, image preview will be inaccessible"
msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÏËÎÏ OpenGL, ÏÔÏÂÒÁÖÅÎÉÅ ÂÕÄÅÔ ÎÅÄÏÓÔÕÐÎÏ"
#: ccdfunc.c:688
#: ccdfunc.c:690
#, c-format
msgid "Can't run shutter command %s (unsupported?)"
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÚÁÔ×ÏÒÁ %s (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
@ -136,93 +136,98 @@ msgstr "
msgid "Can't save file with prefix %s"
msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ Ó ÐÒÅÆÉËÓÏÍ %s"
#: ccdfunc.c:742
#: ccdfunc.c:746
#, c-format
msgid "Can't set %d flushes"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ %d ÓÂÒÏÓÏ×"
#: ccdfunc.c:706
#: ccdfunc.c:708
msgid "Can't set IOport"
msgstr "îÅ ÍÏÇÕ ÐÏÍÅÎÑÔØ ÚÎÁÞÅÎÉÑ ÐÏÒÔÁ I/O"
#: ccdfunc.c:679
#: ccdfunc.c:681
#, c-format
msgid "Can't set T to %g degC"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ × %g ÇÒÁÄã"
#: ccdfunc.c:654
#: ccdfunc.c:653
msgid "Can't set active camera number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÊ ËÁÍÅÒÙ"
#: ccdfunc.c:457
#: ccdfunc.c:456
msgid "Can't set active focuser number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ÆÏËÕÓÅÒÁ"
#: ccdfunc.c:549
#: ccdfunc.c:548
msgid "Can't set active wheel number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ"
#: ccdfunc.c:728 server.c:223
#: ccdfunc.c:730 server.c:223
#, c-format
msgid "Can't set binning %dx%d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÂÉÎÎÉÎÇ %dx%d"
#: ccdfunc.c:752
#: ccdfunc.c:756
msgid "Can't set bit depth"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÑÄÎÏÓÔØ áãð"
#: ccdfunc.c:720
#: ccdfunc.c:722
#, c-format
msgid "Can't set brightness to %g"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
#: ccdfunc.c:746
#: ccdfunc.c:750
#, c-format
msgid "Can't set exposure time to %f seconds"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÜËÓÐÏÚÉÃÉÀ × %f ÓÅËÕÎÄ"
#: ccdfunc.c:660
#: ccdfunc.c:659
msgid "Can't set fan speed"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ×"
#: ccdfunc.c:714
#: ccdfunc.c:716
#, c-format
msgid "Can't set gain to %g"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ Gain × %g"
#: ccdfunc.c:738 server.c:224
#: ccdfunc.c:742 server.c:224
msgid "Can't set given geometry"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ"
#: ccdfunc.c:498
#: ccdfunc.c:497
#, c-format
msgid "Can't set position %g"
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÐÏÚÉÃÉÀ ÎÁ %g"
#: ccdfunc.c:492
#: ccdfunc.c:491
#, c-format
msgid "Can't set position %g: out of limits [%g, %g]"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÚÉÃÉÀ %g: ×ÎÅ ÐÒÅÄÅÌÏ× [%g, %g]"
#: ccdfunc.c:754
#: ccdfunc.c:758
msgid "Can't set readout speed"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ÓÞÉÔÙ×ÁÎÉÑ"
#: ccdfunc.c:576
#: ccdfunc.c:575
#, c-format
msgid "Can't set wheel position %d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÏÖÅÎÉÅ ËÏÌÅÓÁ %d"
#: ccdfunc.c:782 server.c:121
#: ccdfunc.c:786 server.c:121
msgid "Can't start exposition"
msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ"
#. Захват кадра %d\n
#: ccdfunc.c:780
#: ccdfunc.c:784
#, c-format
msgid "Capture frame %d"
msgstr "úÁÈ×ÁÔ ËÁÄÒÁ %d"
#: ccdfunc.c:678
#, c-format
msgid "Current format: %s"
msgstr ""
#: cmdlnopts.c:108
msgid "Display image in OpenGL window"
msgstr "ïÔÏÂÒÁÖÅÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ × ÏËÎÅ OpenGL"
@ -232,40 +237,40 @@ msgstr "
msgid "Equalization of histogram: %s"
msgstr "üË×ÁÌÉÚÁÃÉÑ ÇÉÓÔÏÇÒÁÍÍÙ: %s"
#: ccdfunc.c:366
#: ccdfunc.c:365
msgid "Error saving file"
msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ"
#: ccdfunc.c:676
#: ccdfunc.c:675
#, c-format
msgid "Field of view: %s"
msgstr "ðÏÌÅ ÚÒÅÎÉÑ: %s"
#: ccdfunc.c:357
#: ccdfunc.c:356
#, c-format
msgid "File saved as '%s'"
msgstr "æÁÊÌ ÓÏÈÒÁÎÅÎ ËÁË '%s'"
#: ccdfunc.c:414
#: ccdfunc.c:413
msgid "Focuser device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï ÆÏËÕÓÅÒÁ ÎÅ ÕËÁÚÁÎÏ"
#: ccdfunc.c:650
#: ccdfunc.c:649
#, c-format
msgid "Found %d cameras, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÁÍÅÒ, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:453
#: ccdfunc.c:452
#, c-format
msgid "Found %d focusers, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ÆÏËÕÓÅÒÏ×, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:545
#: ccdfunc.c:544
#, c-format
msgid "Found %d wheels, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÏÌÅÓ, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:673
#: ccdfunc.c:672
#, c-format
msgid "Full array: %s"
msgstr "ðÏÌÎÙÊ ÆÏÒÍÁÔ: %s"
@ -275,7 +280,7 @@ msgstr "
msgid "Histogram conversion: %s"
msgstr "ðÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÇÉÓÔÏÇÒÁÍÍÙ: %s"
#: ccdfunc.c:406
#: ccdfunc.c:405
#, c-format
msgid "Image stat:\n"
msgstr "óÔÁÔÉÓÔÉËÁ ÐÏ ÉÚÏÂÒÁÖÅÎÉÀ: \n"
@ -292,19 +297,19 @@ msgstr "
msgid "No camera device"
msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ"
#: ccdfunc.c:614 ccdfunc.c:615
#: ccdfunc.c:613 ccdfunc.c:614
msgid "No cameras found"
msgstr "ëÁÍÅÒ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: ccdfunc.c:421
#: ccdfunc.c:420
msgid "No focusers found"
msgstr "æÏËÕÓÅÒÏ× ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: ccdfunc.c:513
#: ccdfunc.c:512
msgid "No wheels found"
msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: ccdfunc.c:756
#: ccdfunc.c:760
msgid "Only show statistics"
msgstr "ôÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ"
@ -312,16 +317,16 @@ msgstr "
msgid "PID file (default: "
msgstr "PID-ÆÁÊÌ (ÐÏ ÕÍÏÌÞÁÎÉÀ: "
#: ccdfunc.c:667
#: ccdfunc.c:666
#, c-format
msgid "Pixel size: %g x %g"
msgstr "òÁÚÍÅÒ ÐÉËÓÅÌÑ: %g x %g"
#: ccdfunc.c:789
#: ccdfunc.c:793
msgid "Read grabbed image"
msgstr "óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ"
#: ccdfunc.c:755
#: ccdfunc.c:759
#, c-format
msgid "Readout mode: %s"
msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s"
@ -330,34 +335,34 @@ msgstr "
msgid "Server timeout"
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ"
#: ccdfunc.c:719
#: ccdfunc.c:721
#, c-format
msgid "Set brightness to %g"
msgstr "õÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
#: ccdfunc.c:661
#: ccdfunc.c:660
#, c-format
msgid "Set fan speed to %d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ× × %d"
#: ccdfunc.c:713
#: ccdfunc.c:715
#, c-format
msgid "Set gain to %g"
msgstr "õÓÔÁÎÏ×ÉÔØ Gain × %g"
#: ccdfunc.c:686
#: ccdfunc.c:688
#, c-format
msgid "Shutter command: %s\n"
msgstr "ëÏÍÁÎÄÁ ÚÁÔ×ÏÒÁ: %s\n"
#. "Попытка Ñ<>конфигурироваÑÑŒ порт I/O как %d\n"
#: ccdfunc.c:692
#: ccdfunc.c:694
#, c-format
msgid "Try to configure I/O port as %d"
msgstr "ðÏÐÙÔËÁ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ ÐÏÒÔ I/O ËÁË %d"
#. "Попытка запиÑ<C2B8>и %d в порт I/O\n"
#: ccdfunc.c:704
#: ccdfunc.c:706
#, c-format
msgid "Try to write %d to I/O port"
msgstr "ðÏÐÙÔËÁ ÚÁÐÉÓÉ %d × ÐÏÒÔ I/O"
@ -366,11 +371,11 @@ msgstr "
msgid "UNIX socket name"
msgstr "éÍÑ UNIX-ÓÏËÅÔÁ"
#: ccdfunc.c:506
#: ccdfunc.c:505
msgid "Wheel device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï ÔÕÒÅÌÉ ÎÅ ÕËÁÚÁÎÏ"
#: ccdfunc.c:572
#: ccdfunc.c:571
#, c-format
msgid "Wheel position should be from 0 to %d"
msgstr "ðÏÚÉÃÉÑ ËÏÌÅÓÁ ÄÏÌÖÎÁ ÂÙÔØ ÏÔ 0 ÄÏ %d"