mirror of
https://github.com/eddyem/CCD_Capture.git
synced 2025-12-06 02:35:13 +03:00
Add PointGrey Grasshopper support; fixed DATAMAX for 8- and 12-bit images
This commit is contained in:
parent
5aed1d5955
commit
089370d276
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
15
GRH_cameras/CMakeLists.txt
Normal file
15
GRH_cameras/CMakeLists.txt
Normal 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})
|
||||
40
GRH_cameras/FindFLYCAP.cmake
Normal file
40
GRH_cameras/FindFLYCAP.cmake
Normal 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
476
GRH_cameras/grasshopper.c
Normal 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,
|
||||
};
|
||||
File diff suppressed because it is too large
Load Diff
@ -119,6 +119,7 @@ static int camcapt(IMG *ima){
|
||||
WARNX("Couldn't read exposure data\n");
|
||||
return FALSE;
|
||||
}
|
||||
ima->bitpix = 16;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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");
|
||||
|
||||
@ -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 ""
|
||||
|
||||
125
locale/ru/ru.po
125
locale/ru/ru.po
@ -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"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user