fix some bugs & add some features

This commit is contained in:
Edward Emelianov 2022-01-14 16:27:32 +03:00
parent a9ddbc39b8
commit d113aee650
14 changed files with 569 additions and 390 deletions

View File

@ -1,16 +1,21 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.20)
set(PROJ ccd_capture) set(PROJ ccd_capture)
project(${PROJ})
set(MINOR_VERSION "0") set(MINOR_VERSION "0")
set(MID_VERSION "0") set(MID_VERSION "0")
set(MAJOR_VERSION "1") set(MAJOR_VERSION "1")
set(VERSION "${MAJOR_VERSION}.${MID_VERSION}.${MINOR_VERSION}") set(VERSION "${MAJOR_VERSION}.${MID_VERSION}.${MINOR_VERSION}")
project(${PROJ} VERSION ${VERSION} LANGUAGES C)
message("VER: ${VERSION}") message("VER: ${VERSION}")
# default flags # default flags
set(CFLAGS ${CFLAGS} -Wall -W -Wextra -O3 -std=gnu99) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -W -Wextra -std=gnu99")
add_definitions(-D_XOPEN_SOURCE=1234 -D_DEFAULT_SOURCE -D_GNU_SOURCE)
add_definitions(-D_XOPEN_SOURCE=1234 -D_DEFAULT_SOURCE -D_GNU_SOURCE -DLOCALEDIR=\"${LOCALEDIR}\"
-DPACKAGE_VERSION=\"${VERSION}\" -DGETTEXT_PACKAGE=\"${PROJ}\"
-DMINOR_VERSION=\"${MINOR_VERSION}\" -DMID_VERSION=\"${MID_VERSION}\"
-DMAJOR_VERSION=\"${MAJOR_VESION}\")
set(CMAKE_COLOR_MAKEFILE ON) set(CMAKE_COLOR_MAKEFILE ON)
@ -18,17 +23,28 @@ set(SOURCES main.c cmdlnopts.c ccdfunc.c)
# cmake -DDEBUG=yes -> debugging # cmake -DDEBUG=yes -> debugging
if(DEFINED DEBUG AND DEBUG STREQUAL "yes") if(DEFINED DEBUG AND DEBUG STREQUAL "yes")
set(CFLAGS ${CFLAGS} -Werror) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Og -ggdb -fno-builtin-strlen -Werror")
add_definitions(-DEBUG) add_definitions(-DEBUG)
set(CMAKE_BUILD_TYPE DEBUG)
set(CMAKE_VERBOSE_MAKEFILE "ON") set(CMAKE_VERBOSE_MAKEFILE "ON")
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -march=native -fdata-sections -ffunction-sections")
SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--gc-sections")
set(CMAKE_BUILD_TYPE RELEASE)
endif() endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
find_package(CFITSIO REQUIRED) find_package(CFITSIO REQUIRED)
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(${PROJ} REQUIRED usefull_macros) pkg_check_modules(${PROJ} REQUIRED usefull_macros)
include(FindOpenMP)
if(OPENMP_FOUND)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
add_definitions(-DOMP_FOUND)
endif()
if(DEFINED IMAGEVIEW AND IMAGEVIEW STREQUAL "yes") if(DEFINED IMAGEVIEW AND IMAGEVIEW STREQUAL "yes")
list(APPEND SOURCES events.c imageview.c) list(APPEND SOURCES events.c imageview.c)
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
@ -91,10 +107,6 @@ add_executable(${PROJ} ${SOURCES} ${PO_FILE} ${MO_FILE})
target_link_libraries(${PROJ} ${CFITSIO_LIBRARIES} ${X11_LIBRARIES} ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${${PROJ}_LIBRARIES} -lm) target_link_libraries(${PROJ} ${CFITSIO_LIBRARIES} ${X11_LIBRARIES} ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${${PROJ}_LIBRARIES} -lm)
include_directories(${${PROJ}_INCLUDE_DIRS} .) include_directories(${${PROJ}_INCLUDE_DIRS} .)
link_directories(${${PROJ}_LIBRARY_DIRS} ) link_directories(${${PROJ}_LIBRARY_DIRS} )
add_definitions(${CFLAGS} -DLOCALEDIR=\"${LOCALEDIR}\"
-DPACKAGE_VERSION=\"${VERSION}\" -DGETTEXT_PACKAGE=\"${PROJ}\"
-DMINOR_VERSION=\"${MINOR_VERSION}\" -DMID_VERSION=\"${MID_VERSION}\"
-DMAJOR_VERSION=\"${MAJOR_VESION}\")
# Installation of the program # Installation of the program
INSTALL(FILES ${MO_FILE} DESTINATION "share/locale/ru/LC_MESSAGES") INSTALL(FILES ${MO_FILE} DESTINATION "share/locale/ru/LC_MESSAGES")

View File

@ -5,17 +5,6 @@ set(DUMMYLIB ${CCDLIB} PARENT_SCOPE)
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(${CCDLIB} REQUIRED usefull_macros) pkg_check_modules(${CCDLIB} REQUIRED usefull_macros)
set(CFLAGS -O3 -Wextra -Wall -W -std=gnu99)
set(CMAKE_COLOR_MAKEFILE ON)
if(DEFINED DEBUG AND DEBUG STREQUAL "yes")
set(CFLAGS ${CFLAGS} -Werror)
add_definitions(-DEBUG)
set(CMAKE_VERBOSE_MAKEFILE "ON")
endif()
add_definitions(${CFLAGS})
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC) aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC)
add_library(${CCDLIB} ${SRC}) add_library(${CCDLIB} ${SRC})
target_link_libraries(${CCDLIB} ${${CCDLIB}_LIBRARIES}) target_link_libraries(${CCDLIB} ${${CCDLIB}_LIBRARIES})

View File

@ -38,7 +38,7 @@ static capture_status capstat = CAPTURE_NO;
static int campoll(capture_status *st, float *remain){ static int campoll(capture_status *st, float *remain){
if(capstat == CAPTURE_NO){ if(capstat == CAPTURE_NO){
if(st) *st = capstat = CAPTURE_PROCESS; if(st) *st = capstat = CAPTURE_PROCESS;
if(remain) *remain = 0.5; if(remain) *remain = 1e-6;
}else{ }else{
capstat = CAPTURE_NO; capstat = CAPTURE_NO;
if(st) *st = CAPTURE_READY; if(st) *st = CAPTURE_READY;
@ -48,11 +48,15 @@ static int campoll(capture_status *st, float *remain){
} }
static int camcapt(IMG *ima){ static int camcapt(IMG *ima){
static int n = 0;
if(!ima || !ima->data) return FALSE; if(!ima || !ima->data) return FALSE;
uint16_t *d = ima->data; uint16_t *d = ima->data;
for(int y = 0; y < ima->h; ++y) for(int y = 0; y < ima->h; ++y)
for(int x = 0; x < ima->w; ++x) // sinusoide 100x200 for(int x = 0; x < ima->w; ++x){ // sinusoide 100x200
*d++ = (uint16_t)(sin(x * 50/M_PI)*sin(y * 100/M_PI)*65535.); //*d++ = (uint16_t)(((n+x)%100)/99.*65535.);
*d++ = (uint16_t)((1 + sin((n+x) * M_PI/50)*sin((n+y) * M_PI/100))*32767.);
}
++n;
return TRUE; return TRUE;
} }

View File

@ -5,17 +5,6 @@ set(FLILIB ${CCDLIB} PARENT_SCOPE)
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(${CCDLIB} REQUIRED fli>=1.71 usefull_macros) pkg_check_modules(${CCDLIB} REQUIRED fli>=1.71 usefull_macros)
set(CFLAGS -O3 -Wextra -Wall -W -std=gnu99)
set(CMAKE_COLOR_MAKEFILE ON)
if(DEFINED DEBUG AND DEBUG STREQUAL "yes")
set(CFLAGS ${CFLAGS} -Werror)
add_definitions(-DEBUG)
set(CMAKE_VERBOSE_MAKEFILE "ON")
endif()
add_definitions(${CFLAGS})
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC) aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC)
add_library(${CCDLIB} ${SRC}) add_library(${CCDLIB} ${SRC})
target_link_libraries(${CCDLIB} ${${CCDLIB}_LIBRARIES}) target_link_libraries(${CCDLIB} ${${CCDLIB}_LIBRARIES})

View File

@ -634,36 +634,37 @@ static int fli_fpfalse(_U_ float *f){ return FALSE; }
*/ */
Camera FLIcam = { Camera FLIcam = {
.check = fli_findCCD, .check = fli_findCCD,
.setDevNo = fli_setActiceCam,
.close = fli_closecam, .close = fli_closecam,
.pollcapture = fli_pollcapt, .pollcapture = fli_pollcapt,
.capture = fli_capt, .capture = fli_capt,
.cancel = fli_cancel, .cancel = fli_cancel,
// setters:
.setbin = fli_setbin, .setDevNo = fli_setActiceCam,
.setgeometry = fli_setgeometry, .setbrightness = fli_ffalse,
.setnflushes = fli_setnflushes,
.setT = fli_settemp,
.setio = fli_setio,
.setexp = fli_setexp, .setexp = fli_setexp,
.setgain = fli_ffalse,
.setT = fli_settemp,
.setbin = fli_setbin,
.setnflushes = fli_setnflushes,
.shuttercmd = fli_shutter,
.confio = fli_confio,
.setio = fli_setio,
.setframetype = fli_setframetype, .setframetype = fli_setframetype,
.setbitdepth = fli_setbitdepth, .setbitdepth = fli_setbitdepth,
.setfastspeed = fli_setfastspeed, .setfastspeed = fli_setfastspeed,
.setgeometry = fli_setgeometry,
.setfanspeed = fli_setfanspd, .setfanspeed = fli_setfanspd,
.shuttercmd = fli_shutter, // getters:
.confio = fli_confio, .getbrightness = fli_fpfalse,
.getModelName = fli_modelname, .getModelName = fli_modelname,
.getbin = fli_getbin, .getgain = fli_fpfalse,
.getmaxgain = fli_fpfalse,
.getgeomlimits = fli_geomlimits,
.getTcold = fli_getTcold, .getTcold = fli_getTcold,
.getThot = fli_getThot, .getThot = fli_getThot,
.getTbody = fli_getTbody, .getTbody = fli_getTbody,
.getbin = fli_getbin,
.getio = fli_getio, .getio = fli_getio,
.getgeomlimits = fli_geomlimits,
.setbrightness = fli_ffalse,
.setgain = fli_ffalse,
.getmaxgain = fli_fpfalse,
.geometry = {0}, .geometry = {0},
}; };

View File

@ -5,17 +5,6 @@ set(ZWOLIB ${CCDLIB} PARENT_SCOPE)
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(${CCDLIB} REQUIRED usefull_macros) pkg_check_modules(${CCDLIB} REQUIRED usefull_macros)
set(CFLAGS -O3 -Wextra -Wall -W -std=gnu99)
set(CMAKE_COLOR_MAKEFILE ON)
if(DEFINED DEBUG AND DEBUG STREQUAL "yes")
set(CFLAGS ${CFLAGS} -Werror)
add_definitions(-DEBUG)
set(CMAKE_VERBOSE_MAKEFILE "ON")
endif()
add_definitions(${CFLAGS})
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC) aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC)
add_library(${CCDLIB} ${SRC}) add_library(${CCDLIB} ${SRC})
target_link_libraries(${CCDLIB} ${${CCDLIB}_LIBRARIES} -lASICamera2) target_link_libraries(${CCDLIB} ${${CCDLIB}_LIBRARIES} -lASICamera2)

127
ccdfunc.c
View File

@ -33,6 +33,7 @@
#ifdef IMAGEVIEW #ifdef IMAGEVIEW
#include "imageview.h" #include "imageview.h"
#endif #endif
#include "omp.h"
Camera *camera = NULL; Camera *camera = NULL;
Focuser *focuser = NULL; Focuser *focuser = NULL;
@ -256,24 +257,40 @@ cloerr:
} }
static void calculate_stat(IMG *image){ static void calculate_stat(IMG *image){
long i, Noverld = 0L, size = image->h*image->w; uint64_t Noverld = 0L, size = image->h*image->w;
float pv, sum=0., sum2=0., sz = (float)size; double sum = 0., sum2 = 0.;
uint16_t *ptr = image->data, val;
uint16_t max = 0, min = 65535; uint16_t max = 0, min = 65535;
for(i = 0; i < size; i++, ptr++){ #pragma omp parallel
val = *ptr; {
pv = (float) val; uint16_t maxpriv = 0, minpriv = 65535;
uint64_t ovrpriv = 0;
double sumpriv = 0., sum2priv = 0.;
#pragma omp for nowait
for(uint64_t i = 0; i < size; ++i){
uint16_t val = image->data[i];
float pv = (float) val;
sum += pv; sum += pv;
sum2 += (pv * pv); sum2 += (pv * pv);
if(max < val) max = val; if(max < val) max = val;
if(min > val) min = val; if(min > val) min = val;
if(val >= 65530) Noverld++; if(val >= 65530) ovrpriv++;
} }
#pragma omp critical
{
if(max < maxpriv) max = maxpriv;
if(min > minpriv) min = minpriv;
sum += sumpriv;
sum2 += sum2priv;
Noverld += ovrpriv;
}
}
double sz = (float)size;
double avr = sum/sz;
image->avr = avr;
image->std = sqrt(fabs(sum2/sz - avr*avr));
if(GP->verbose){ if(GP->verbose){
printf(_("Image stat:\n")); printf(_("Image stat:\n"));
float avr = sum/sz; printf("avr = %.1f, std = %.1f, Noverload = %ld\n", avr, image->std, Noverld);
printf("avr = %.1f, std = %.1f, Noverload = %ld\n", image->avr = avr,
image->std = sqrt(fabs(sum2/sz - avr*avr)), Noverld);
printf("max = %u, min = %u, size = %ld\n", max, min, size); printf("max = %u, min = %u, size = %ld\n", max, min, size);
} }
} }
@ -427,6 +444,22 @@ static void closeall(){
if(wheel){wheel->close(); wheel = NULL;} if(wheel){wheel->close(); wheel = NULL;}
} }
static capture_status capt(){
capture_status cs;
float tleave, tmpf;
while(camera->pollcapture(&cs, &tleave)){
if(cs != CAPTURE_PROCESS) break;
verbose(2, _("%.1f seconds till exposition ends"), tleave);
if(camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f", tmpf);
if(camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f", tmpf);
if(tleave > 6.) sleep(5);
else if(tleave > 0.9) sleep((int)(tleave+0.99));
else usleep((int)(1e6*tleave) + 1);
if(!camera) return CAPTURE_ABORTED;
}
return cs;
}
/* /*
* Find CCDs and work with each of them * Find CCDs and work with each of them
*/ */
@ -516,10 +549,6 @@ void ccds(){
} }
if(GP->exptime < 0.) goto retn; if(GP->exptime < 0.) goto retn;
/*********************** expose control ***********************/ /*********************** expose control ***********************/
#ifdef IMAGEVIEW
windowData *mainwin = NULL;
if(GP->showimage) imageview_init();
#endif
// cancel previous exp // cancel previous exp
camera->cancel(); camera->cancel();
int binh = 1, binv = 1; int binh = 1, binv = 1;
@ -562,25 +591,28 @@ void ccds(){
uint16_t *img = MALLOC(uint16_t, raw_width * raw_height); uint16_t *img = MALLOC(uint16_t, raw_width * raw_height);
IMG ima = {.data = img, .w = raw_width, .h = raw_height}; IMG ima = {.data = img, .w = raw_width, .h = raw_height};
#ifdef IMAGEVIEW
windowData *mainwin = NULL;
if(GP->showimage){
imageview_init();
DBG("Create new win");
mainwin = createGLwin("Sample window", raw_width, raw_height, NULL);
if(!mainwin){
WARNX(_("Can't open OpenGL window, image preview will be inaccessible"));
}else
pthread_create(&mainwin->thread, NULL, &image_thread, (void*)&ima);
}
#endif
for(int j = 0; j < GP->nframes; ++j){ for(int j = 0; j < GP->nframes; ++j){
// úÁÈ×ÁÔ ËÁÄÒÁ %d\n // úÁÈ×ÁÔ ËÁÄÒÁ %d\n
verbose(1, _("Capture frame %d"), j); verbose(1, _("Capture frame %d"), j);
capture_status cs; if(!camera) return;
float tleave = 1.; if(capt() != CAPTURE_READY){
while(camera->pollcapture(&cs, &tleave)){
if(cs != CAPTURE_PROCESS) break;
verbose(2, _("%.1f seconds till exposition ends"), tleave);
if(camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f", tmpf);
if(camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f", tmpf);
if(tleave > 6.) sleep(5);
else if(tleave > 0.9) sleep((int)(tleave+0.99));
else usleep((int)(1e6*tleave) + 99999);
}
if(cs != CAPTURE_READY){
WARNX(_("Can't capture image")); WARNX(_("Can't capture image"));
break; break;
} }
verbose(2, _("Read grabbed image")); verbose(2, _("Read grabbed image"));
if(!camera) return;
if(!camera->capture(&ima)){ if(!camera->capture(&ima)){
WARNX(_("Can't grab image")); WARNX(_("Can't grab image"));
break; break;
@ -589,14 +621,6 @@ void ccds(){
saveFITS(&ima, GP->outfile); saveFITS(&ima, GP->outfile);
#ifdef IMAGEVIEW #ifdef IMAGEVIEW
if(GP->showimage){ // display image if(GP->showimage){ // display image
if(!(mainwin = getWin())){
DBG("Create new win");
mainwin = createGLwin("Sample window", raw_width, raw_height, NULL);
if(!mainwin){
WARNX(_("Can't open OpenGL window, image preview will be inaccessible"));
}else
pthread_create(&mainwin->thread, NULL, &image_thread, (void*)&ima);
}
if((mainwin = getWin())){ if((mainwin = getWin())){
DBG("change image"); DBG("change image");
change_displayed_image(mainwin, &ima); change_displayed_image(mainwin, &ima);
@ -604,10 +628,19 @@ void ccds(){
if((mainwin->winevt & WINEVT_PAUSE) == 0) break; if((mainwin->winevt & WINEVT_PAUSE) == 0) break;
if(mainwin->winevt & WINEVT_GETIMAGE){ if(mainwin->winevt & WINEVT_GETIMAGE){
mainwin->winevt &= ~WINEVT_GETIMAGE; mainwin->winevt &= ~WINEVT_GETIMAGE;
if(!camera->capture(&ima)){ if(!camera) return;
WARNX(_("Can't grab image")); if(capt() != CAPTURE_READY){
WARNX(_("Can't capture image"));
}else{
if(!camera) return;
if(!camera->capture(&ima)){
WARNX(_("Can't grab image"));
}
else{
calculate_stat(&ima);
change_displayed_image(mainwin, &ima);
}
} }
change_displayed_image(mainwin, &ima);
} }
usleep(10000); usleep(10000);
} }
@ -621,24 +654,34 @@ void ccds(){
verbose(1, _("%d seconds till pause ends\n"), (int)delta); verbose(1, _("%d seconds till pause ends\n"), (int)delta);
if(camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f\n", tmpf); if(camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f\n", tmpf);
if(camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f\n", tmpf); if(camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f\n", tmpf);
if(delta > 10) sleep(10); if(delta > 6.) sleep(5);
else if(delta > 0.9) sleep((int)(delta+0.99));
else usleep((int)(delta*1e6 + 1)); else usleep((int)(delta*1e6 + 1));
} }
} }
} }
#ifdef IMAGEVIEW #ifdef IMAGEVIEW
if(GP->showimage){ if(GP->showimage){
mainwin->winevt |= WINEVT_PAUSE; if(mainwin) mainwin->winevt |= WINEVT_PAUSE;
DBG("Waiting"); DBG("Waiting");
while((mainwin = getWin())){ while((mainwin = getWin())){
if(mainwin->killthread) break; if(mainwin->killthread) break;
if(mainwin->winevt & WINEVT_GETIMAGE){ if(mainwin->winevt & WINEVT_GETIMAGE){
DBG("GRAB"); DBG("GRAB");
mainwin->winevt &= ~WINEVT_GETIMAGE; mainwin->winevt &= ~WINEVT_GETIMAGE;
if(!camera->capture(&ima)){ if(!camera) return;
WARNX(_("Can't grab image")); if(capt() != CAPTURE_READY){
WARNX(_("Can't capture image"));
}else{
if(!camera) return;
if(!camera->capture(&ima)){
WARNX(_("Can't grab image"));
}
else{
calculate_stat(&ima);
change_displayed_image(mainwin, &ima);
}
} }
change_displayed_image(mainwin, &ima);
} }
} }
DBG("Close window"); DBG("Close window");

View File

@ -38,7 +38,7 @@ static void processKeybrd(unsigned char key, int mod, _U_ int x, _U_ int y){
case 's': // save image case 's': // save image
win->winevt |= WINEVT_SAVEIMAGE; win->winevt |= WINEVT_SAVEIMAGE;
break; break;
case 'q': // exit case 17: case 'q': // exit
win->killthread = 1; win->killthread = 1;
break; break;
} }
@ -49,14 +49,17 @@ static void processKeybrd(unsigned char key, int mod, _U_ int x, _U_ int y){
win->zoom = 1; win->zoom = 1;
win->x = 0; win->y = 0; win->x = 0; win->y = 0;
break; break;
case 27: // esc - kill //case 27: // esc - kill
win->killthread = 1; // win->killthread = 1;
break; //break;
case 'c': // capture in pause mode case 'c': // capture in pause mode
DBG("winevt = %d", win->winevt); DBG("winevt = %d", win->winevt);
if(win->winevt & WINEVT_PAUSE) if(win->winevt & WINEVT_PAUSE)
win->winevt |= WINEVT_GETIMAGE; win->winevt |= WINEVT_GETIMAGE;
break; break;
case 'e': // equalize/not equalize
win->winevt |= WINEVT_EQUALIZE;
break;
case 'l': // flip left-right case 'l': // flip left-right
win->flip ^= WIN_FLIP_LR; win->flip ^= WIN_FLIP_LR;
break; break;
@ -163,13 +166,14 @@ typedef struct{
#define ALT_K(key) (key | (GLUT_ACTIVE_ALT<<8)) #define ALT_K(key) (key | (GLUT_ACTIVE_ALT<<8))
static const menuentry entries[] = { static const menuentry entries[] = {
{"Capture in pause mode (c)", 'c'}, {"Capture in pause mode (c)", 'c'},
{"Switch histogram equalization (e)", 'e'},
{"Flip image LR (l)", 'l'}, {"Flip image LR (l)", 'l'},
{"Flip image UD (u)", 'u'}, {"Flip image UD (u)", 'u'},
{"Make a pause/continue (p)", 'p'}, {"Make a pause/continue (p)", 'p'},
{"Restore zoom (0)", '0'}, {"Restore zoom (0)", '0'},
{"Roll colorfun (ctrl+r)", CTRL_K('r')}, {"Roll colorfun (ctrl+r)", CTRL_K('r')},
{"Save image (ctrl+s)", CTRL_K('s')}, {"Save image (ctrl+s)", CTRL_K('s')},
{"Close this window (ESC)", 27}, //{"Close this window (ESC)", 27},
{"Quit (ctrl+q)", CTRL_K('q')}, {"Quit (ctrl+q)", CTRL_K('q')},
{NULL, 0} {NULL, 0}
}; };

View File

@ -19,15 +19,18 @@
#include <X11/Xlib.h> // XInitThreads(); #include <X11/Xlib.h> // XInitThreads();
#include <math.h> // roundf(), log(), sqrt() #include <math.h> // roundf(), log(), sqrt()
#include <pthread.h> #include <pthread.h>
#include <signal.h>
#include <unistd.h> #include <unistd.h>
#include <usefull_macros.h> #include <usefull_macros.h>
#include "ccdfunc.h"
#include "cmdlnopts.h" #include "cmdlnopts.h"
#include "imageview.h" #include "imageview.h"
#include "omp.h"
static windowData *win = NULL; // main window static windowData *win = NULL; // main window
static pthread_t GLUTthread = 0; // main GLUT thread static pthread_t GLUTthread = 0; // main GLUT thread
static int imequalize = TRUE;
static int initialized = 0; // ==1 if GLUT is initialized; ==0 after clear_GL_context static int initialized = 0; // ==1 if GLUT is initialized; ==0 after clear_GL_context
static void *Redraw(_U_ void *p); static void *Redraw(_U_ void *p);
@ -112,13 +115,17 @@ int killwindow(){
// say threads to die // say threads to die
win->killthread = 1; win->killthread = 1;
} }
pthread_mutex_lock(&win->mutex); //DBG("Lock mutex");
//pthread_mutex_lock(&win->mutex);
//pthread_join(win->thread, NULL); // wait while thread dies //pthread_join(win->thread, NULL); // wait while thread dies
if(win->menu) glutDestroyMenu(win->menu); if(win->menu){
DBG("Destroy menu");
glutDestroyMenu(win->menu);
}
DBG("Destroy window");
glutDestroyWindow(win->ID); glutDestroyWindow(win->ID);
DBG("destroy menu, wundow & texture %d", win->Tex); DBG("Delete textures");
glDeleteTextures(1, &(win->Tex)); glDeleteTextures(1, &(win->Tex));
glutLeaveMainLoop();
DBG("Cancel"); DBG("Cancel");
windowData *old = win; windowData *old = win;
win = NULL; win = NULL;
@ -126,7 +133,7 @@ int killwindow(){
FREE(old->image->rawdata); FREE(old->image->rawdata);
DBG("free(image)"); DBG("free(image)");
FREE(old->image); FREE(old->image);
pthread_mutex_unlock(&old->mutex); //pthread_mutex_unlock(&old->mutex);
DBG("free(win)"); DBG("free(win)");
FREE(old); FREE(old);
DBG("return"); DBG("return");
@ -289,9 +296,12 @@ void clear_GL_context(){
FNAME(); FNAME();
if(!initialized) return; if(!initialized) return;
initialized = 0; initialized = 0;
cancel(); // cancel expositions
DBG("kill"); DBG("kill");
killwindow(); killwindow();
DBG("join"); DBG("join");
DBG("Leave mainloop");
glutLeaveMainLoop();
if(GLUTthread) pthread_join(GLUTthread, NULL); // wait while main thread exits if(GLUTthread) pthread_join(GLUTthread, NULL); // wait while main thread exits
DBG("main GL thread cancelled"); DBG("main GL thread cancelled");
} }
@ -362,6 +372,7 @@ typedef enum{
COLORFN_LINEAR, // linear COLORFN_LINEAR, // linear
COLORFN_LOG, // ln COLORFN_LOG, // ln
COLORFN_SQRT, // sqrt COLORFN_SQRT, // sqrt
COLORFN_POW, // power
COLORFN_MAX // end of list COLORFN_MAX // end of list
} colorfn_type; } colorfn_type;
@ -370,23 +381,31 @@ static colorfn_type ft = COLORFN_LINEAR;
// all colorfun's should get argument in [0, 1] and return in [0, 1] // all colorfun's should get argument in [0, 1] and return in [0, 1]
static double linfun(double arg){ return arg; } // bung for PREVIEW_LINEAR static double linfun(double arg){ return arg; } // bung for PREVIEW_LINEAR
static double logfun(double arg){ return log(1.+arg) / 0.6931472; } // for PREVIEW_LOG [log_2(x+1)] static double logfun(double arg){ return log(1.+arg) / 0.6931472; } // for PREVIEW_LOG [log_2(x+1)]
static double powfun(double arg){ return arg * arg;}
static double (*colorfun)(double) = linfun; // default function to convert color static double (*colorfun)(double) = linfun; // default function to convert color
static void change_colorfun(colorfn_type f){ static void change_colorfun(colorfn_type f){
DBG("New colorfn: %d", f); DBG("New colorfn: %d", f);
const char *cfn = NULL;
ft = f;
switch (f){ switch (f){
case COLORFN_LOG: case COLORFN_LOG:
colorfun = logfun; colorfun = logfun;
ft = COLORFN_LOG; cfn = "log";
break; break;
case COLORFN_SQRT: case COLORFN_SQRT:
colorfun = sqrt; colorfun = sqrt;
ft = COLORFN_SQRT; cfn = "sqrt";
break;
case COLORFN_POW:
colorfun = powfun;
cfn = "square";
break; break;
default: // linear default: // linear
colorfun = linfun; colorfun = linfun;
ft = COLORFN_LINEAR; cfn = "linear";
} }
verbose(1, _("Histogram conversion: %s"), cfn);
} }
// cycle switch between palettes // cycle switch between palettes
@ -407,13 +426,25 @@ static uint8_t *equalize(uint16_t *ori, int w, int h){
double orig_hysto[0x10000] = {0.}; // original hystogram double orig_hysto[0x10000] = {0.}; // original hystogram
uint8_t eq_levls[0x10000] = {0}; // levels to convert: newpix = eq_levls[oldpix] uint8_t eq_levls[0x10000] = {0}; // levels to convert: newpix = eq_levls[oldpix]
int s = w*h; int s = w*h;
for(int i = 0; i < s; ++i) ++orig_hysto[ori[i]]; #pragma omp parallel
{
//printf("%d\n", omp_get_thread_num());
size_t histogram_private[0x10000] = {0};
#pragma omp for nowait
for(int i = 0; i < s; ++i){
++histogram_private[ori[i]];
}
#pragma omp critical
{
for(int i = 0; i < 0x10000; ++i) orig_hysto[i] += histogram_private[i];
}
}
double part = (double)(s + 1) / 0x100, N = 0.; double part = (double)(s + 1) / 0x100, N = 0.;
for(int i = 0; i <= 0xffff; ++i){ for(int i = 0; i <= 0xffff; ++i){
N += orig_hysto[i]; N += orig_hysto[i];
eq_levls[i] = (uint8_t)(N/part); eq_levls[i] = (uint8_t)(N/part);
} }
OMP_FOR()
for(int i = 0; i < s; ++i){ for(int i = 0; i < s; ++i){
retn[i] = eq_levls[ori[i]]; retn[i] = eq_levls[ori[i]];
} }
@ -426,12 +457,21 @@ void change_displayed_image(windowData *win, IMG *img){
DBG("imh=%d, imw=%d, ch=%u, cw=%u", im->h, im->w, img->w, img->h); DBG("imh=%d, imw=%d, ch=%u, cw=%u", im->h, im->w, img->w, img->h);
pthread_mutex_lock(&win->mutex); pthread_mutex_lock(&win->mutex);
int w = img->w, h = img->h, s = w*h; int w = img->w, h = img->h, s = w*h;
uint8_t *newima = equalize(img->data, w, h); if(imequalize){
GLubyte *dst = im->rawdata; uint8_t *newima = equalize(img->data, w, h);
for(int i = 0; i < s; ++i, dst += 3){ GLubyte *dst = im->rawdata;
gray2rgb(colorfun(newima[i] / 256.), dst); OMP_FOR()
for(int i = 0; i < s; ++i){
gray2rgb(colorfun(newima[i] / 256.), &dst[i*3]);
}
FREE(newima);
}else{
GLubyte *dst = im->rawdata;
OMP_FOR()
for(int i = 0; i < s; ++i){
gray2rgb(colorfun(img->data[i] / 65536.), &dst[i*3]);
}
} }
FREE(newima);
win->image->changed = 1; win->image->changed = 1;
pthread_mutex_unlock(&win->mutex); pthread_mutex_unlock(&win->mutex);
} }
@ -457,7 +497,18 @@ void* image_thread(_U_ void *data){
win->winevt &= ~WINEVT_ROLLCOLORFUN; win->winevt &= ~WINEVT_ROLLCOLORFUN;
change_displayed_image(win, img); change_displayed_image(win, img);
} }
if(win->winevt & WINEVT_EQUALIZE){
win->winevt &= ~WINEVT_EQUALIZE;
imequalize = !imequalize;
verbose(1, _("Equalization of histogram: %s"), imequalize ? N_("on") : N_("off"));
}
} }
usleep(10000); usleep(10000);
} }
} }
void closeGL(){
windowData *win = getWin();
if(win) win->killthread = 1;
while(getWin()) usleep(1000);
}

View File

@ -44,6 +44,8 @@ typedef struct{
#define WINEVT_SAVEIMAGE (1<<2) #define WINEVT_SAVEIMAGE (1<<2)
// change color palette function // change color palette function
#define WINEVT_ROLLCOLORFUN (1<<3) #define WINEVT_ROLLCOLORFUN (1<<3)
// invert equalization status
#define WINEVT_EQUALIZE (1<<4)
// flip image // flip image
#define WIN_FLIP_LR (1<<0) #define WIN_FLIP_LR (1<<0)
@ -73,6 +75,7 @@ typedef enum{
} winIdType; } winIdType;
void imageview_init(); void imageview_init();
void closeGL();
windowData *createGLwin(char *title, int w, int h, rawimage *rawdata); windowData *createGLwin(char *title, int w, int h, rawimage *rawdata);
windowData *getWin(); windowData *getWin();
int killwindow(); int killwindow();

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-13 12:16+0300\n" "POT-Creation-Date: 2022-01-14 16:21+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,434 +17,457 @@ msgstr ""
"Content-Type: text/plain; charset=koi8-r\n" "Content-Type: text/plain; charset=koi8-r\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: cmdlnopts.c:68 #: cmdlnopts.c:40
msgid "camera device type (fli/zwo/etc)" msgid "camera device type (fli/zwo/etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:69 #: cmdlnopts.c:41
msgid "focuser device type (fli/zwo/etc)" msgid "focuser device type (fli/zwo/etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:70 #: cmdlnopts.c:42
msgid "wheel device type (fli/zwo/etc)" msgid "wheel device type (fli/zwo/etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:71 #: cmdlnopts.c:43
msgid "camera device number (if many: 0, 1, 2 etc)" msgid "camera device number (if many: 0, 1, 2 etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:72 #: cmdlnopts.c:44
msgid "filter wheel device number (if many: 0, 1, 2 etc)" msgid "filter wheel device number (if many: 0, 1, 2 etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:73 #: cmdlnopts.c:45
msgid "focuser device number (if many: 0, 1, 2 etc)" msgid "focuser device number (if many: 0, 1, 2 etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:74 #: cmdlnopts.c:46
msgid "show this help" msgid "show this help"
msgstr "" msgstr ""
#: cmdlnopts.c:75 #: cmdlnopts.c:47
msgid "rewrite output file if exists" msgid "rewrite output file if exists"
msgstr "" msgstr ""
#: cmdlnopts.c:76 #: cmdlnopts.c:48
msgid "verbose level (each -v increase it)" msgid "verbose level (each -v increase it)"
msgstr "" msgstr ""
#: cmdlnopts.c:77 #: cmdlnopts.c:49
msgid "not open shutter, when exposing (\"dark frames\")" msgid "not open shutter, when exposing (\"dark frames\")"
msgstr "" msgstr ""
#: cmdlnopts.c:78 #: cmdlnopts.c:50
msgid "run in 8-bit mode" msgid "run in 8-bit mode"
msgstr "" msgstr ""
#: cmdlnopts.c:79 #: cmdlnopts.c:51
msgid "fast (8MHz) readout mode" msgid "fast (8MHz) readout mode"
msgstr "" msgstr ""
#: cmdlnopts.c:80 #: cmdlnopts.c:52
msgid "set CCD temperature to given value (degr C)" msgid "set CCD temperature to given value (degr C)"
msgstr "" msgstr ""
#: cmdlnopts.c:81 #: cmdlnopts.c:53
msgid "set fan speed (0 - off, 1 - low, 2 - high)" msgid "set fan speed (0 - off, 1 - low, 2 - high)"
msgstr "" msgstr ""
#: cmdlnopts.c:83 #: cmdlnopts.c:55
msgid "program author" msgid "program author"
msgstr "" msgstr ""
#: cmdlnopts.c:84 #: cmdlnopts.c:56
msgid "object type (neon, object, flat etc)" msgid "object type (neon, object, flat etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:85 #: cmdlnopts.c:57
msgid "instrument name" msgid "instrument name"
msgstr "" msgstr ""
#: cmdlnopts.c:86 #: cmdlnopts.c:58
msgid "object name" msgid "object name"
msgstr "" msgstr ""
#: cmdlnopts.c:87 #: cmdlnopts.c:59
msgid "observers' names" msgid "observers' names"
msgstr "" msgstr ""
#: cmdlnopts.c:88 #: cmdlnopts.c:60
msgid "observing program name" msgid "observing program name"
msgstr "" msgstr ""
#: cmdlnopts.c:89 #: cmdlnopts.c:61
msgid "add records to header from given file[s]" msgid "add records to header from given file[s]"
msgstr "" msgstr ""
#: cmdlnopts.c:91 #: cmdlnopts.c:63
msgid "N flushes before exposing (default: 1)" msgid "N flushes before exposing (default: 1)"
msgstr "" msgstr ""
#: cmdlnopts.c:92 #: cmdlnopts.c:64
msgid "horizontal binning to N pixels" msgid "horizontal binning to N pixels"
msgstr "" msgstr ""
#: cmdlnopts.c:93 #: cmdlnopts.c:65
msgid "vertical binning to N pixels" msgid "vertical binning to N pixels"
msgstr "" msgstr ""
#: cmdlnopts.c:94 #: cmdlnopts.c:66
msgid "make series of N frames" msgid "make series of N frames"
msgstr "" msgstr ""
#: cmdlnopts.c:95 #: cmdlnopts.c:67
msgid "make pause for N seconds between expositions" msgid "make pause for N seconds between expositions"
msgstr "" msgstr ""
#: cmdlnopts.c:96 #: cmdlnopts.c:68
msgid "set exposure time to given value (ms)" msgid "set exposure time to given value (ms)"
msgstr "" msgstr ""
#: cmdlnopts.c:97 #: cmdlnopts.c:69
msgid "frame X0 coordinate (-1 - all with overscan)" msgid "frame X0 coordinate (-1 - all with overscan)"
msgstr "" msgstr ""
#: cmdlnopts.c:98 #: cmdlnopts.c:70
msgid "frame Y0 coordinate (-1 - all with overscan)" msgid "frame Y0 coordinate (-1 - all with overscan)"
msgstr "" msgstr ""
#: cmdlnopts.c:99 #: cmdlnopts.c:71
msgid "frame X1 coordinate (-1 - all with overscan)" msgid "frame X1 coordinate (-1 - all with overscan)"
msgstr "" msgstr ""
#: cmdlnopts.c:100 #: cmdlnopts.c:72
msgid "frame Y1 coordinate (-1 - all with overscan)" msgid "frame Y1 coordinate (-1 - all with overscan)"
msgstr "" msgstr ""
#: cmdlnopts.c:101 #: cmdlnopts.c:73
msgid "grab full frame (with overscans)" msgid "grab full frame (with overscans)"
msgstr "" msgstr ""
#: cmdlnopts.c:103 #: cmdlnopts.c:75
msgid "open shutter" msgid "open shutter"
msgstr "" msgstr ""
#: cmdlnopts.c:104 #: cmdlnopts.c:76
msgid "close shutter" msgid "close shutter"
msgstr "" msgstr ""
#: cmdlnopts.c:105 #: cmdlnopts.c:77
msgid "run exposition on LOW @ pin5 I/O port" msgid "run exposition on LOW @ pin5 I/O port"
msgstr "" msgstr ""
#: cmdlnopts.c:106 #: cmdlnopts.c:78
msgid "run exposition on HIGH @ pin5 I/O port" msgid "run exposition on HIGH @ pin5 I/O port"
msgstr "" msgstr ""
#: cmdlnopts.c:107 #: cmdlnopts.c:79
msgid "get value of I/O port pins" msgid "get value of I/O port pins"
msgstr "" msgstr ""
#: cmdlnopts.c:108 #: cmdlnopts.c:80
msgid "move stepper motor asynchronous" msgid "move stepper motor asynchronous"
msgstr "" msgstr ""
#: cmdlnopts.c:110 #: cmdlnopts.c:82
msgid "set I/O port pins to given value (decimal number, pin1 is LSB)" msgid "set I/O port pins to given value (decimal number, pin1 is LSB)"
msgstr "" msgstr ""
#: cmdlnopts.c:111 #: cmdlnopts.c:83
msgid "" msgid ""
"configure I/O port pins to given value (decimal number, pin1 is LSB, 1 == " "configure I/O port pins to given value (decimal number, pin1 is LSB, 1 == "
"output, 0 == input)" "output, 0 == input)"
msgstr "" msgstr ""
#: cmdlnopts.c:113 #: cmdlnopts.c:85
msgid "move focuser to absolute position, mm" msgid "move focuser to absolute position, mm"
msgstr "" msgstr ""
#: cmdlnopts.c:114 #: cmdlnopts.c:86
msgid "move focuser to relative position, mm" msgid "move focuser to relative position, mm"
msgstr "" msgstr ""
#: cmdlnopts.c:116 #: cmdlnopts.c:88
msgid "set wheel position" msgid "set wheel position"
msgstr "" msgstr ""
#: cmdlnopts.c:119 #: cmdlnopts.c:91
msgid "Display image in OpenGL window" msgid "Display image in OpenGL window"
msgstr "" msgstr ""
#. Не могу сохранить файл #. Не могу сохранить файл
#: ccdfunc.c:115 #: ccdfunc.c:110
msgid "Can't save file" msgid "Can't save file"
msgstr "" msgstr ""
#: ccdfunc.c:257 #: ccdfunc.c:252
#, c-format #, c-format
msgid "File saved as '%s'" msgid "File saved as '%s'"
msgstr "" msgstr ""
#: ccdfunc.c:259 #: ccdfunc.c:254
msgid "Error saving file" msgid "Error saving file"
msgstr "" msgstr ""
#. Статистика по изображению:\n #: ccdfunc.c:292
#: ccdfunc.c:279
#, c-format #, c-format
msgid "Image stat:\n" msgid "Image stat:\n"
msgstr "" msgstr ""
#: ccdfunc.c:291 #: ccdfunc.c:303
msgid "Focuser device not pointed, try to guess" msgid "Focuser device not pointed, try to guess"
msgstr "" msgstr ""
#: ccdfunc.c:307 #: ccdfunc.c:320
msgid "Focuser not found" msgid "Focuser not found"
msgstr "" msgstr ""
#: ccdfunc.c:312 #: ccdfunc.c:325
#, c-format #, c-format
msgid "Found %d focusers, you point number %d" msgid "Found %d focusers, you point number %d"
msgstr "" msgstr ""
#: ccdfunc.c:316 #: ccdfunc.c:329
msgid "Can't set active focuser number" msgid "Can't set active focuser number"
msgstr "" msgstr ""
#: ccdfunc.c:330 #: ccdfunc.c:343
msgid "Can't get focuser limit positions" msgid "Can't get focuser limit positions"
msgstr "" msgstr ""
#: ccdfunc.c:337 #: ccdfunc.c:350
msgid "Can't get current focuser position" msgid "Can't get current focuser position"
msgstr "" msgstr ""
#: ccdfunc.c:351 #: ccdfunc.c:364
#, c-format #, c-format
msgid "Can't set position %g: out of limits [%g, %g]" msgid "Can't set position %g: out of limits [%g, %g]"
msgstr "" msgstr ""
#: ccdfunc.c:355 #: ccdfunc.c:368
msgid "Can't home focuser" msgid "Can't home focuser"
msgstr "" msgstr ""
#: ccdfunc.c:357 #: ccdfunc.c:370
#, c-format #, c-format
msgid "Can't set position %g" msgid "Can't set position %g"
msgstr "" msgstr ""
#: ccdfunc.c:369 #: ccdfunc.c:382
msgid "Wheel device not pointed, try to guess" msgid "Wheel device not pointed, try to guess"
msgstr "" msgstr ""
#: ccdfunc.c:385 #: ccdfunc.c:399
msgid "Wheel not found" msgid "Wheel not found"
msgstr "" msgstr ""
#: ccdfunc.c:390 #: ccdfunc.c:404
#, c-format #, c-format
msgid "Found %d wheels, you point number %d" msgid "Found %d wheels, you point number %d"
msgstr "" msgstr ""
#: ccdfunc.c:394 #: ccdfunc.c:408
msgid "Can't set active wheel number" msgid "Can't set active wheel number"
msgstr "" msgstr ""
#: ccdfunc.c:406 #: ccdfunc.c:424
msgid "Can't get max wheel position" msgid "Can't get max wheel position"
msgstr "" msgstr ""
#: ccdfunc.c:413 #: ccdfunc.c:431
#, c-format #, c-format
msgid "Wheel position should be from 0 to %d" msgid "Wheel position should be from 0 to %d"
msgstr "" msgstr ""
#: ccdfunc.c:417 #: ccdfunc.c:435
#, c-format #, c-format
msgid "Can't set wheel position %d" msgid "Can't set wheel position %d"
msgstr "" msgstr ""
#: ccdfunc.c:436 #: ccdfunc.c:452
#, c-format
msgid "%.1f seconds till exposition ends"
msgstr ""
#: ccdfunc.c:470
msgid "Camera device not pointed, try to guess" msgid "Camera device not pointed, try to guess"
msgstr "" msgstr ""
#: ccdfunc.c:452 #: ccdfunc.c:487
msgid "Camera device not found" msgid "Camera not found"
msgstr ""
#: ccdfunc.c:457
#, c-format
msgid "Found %d cameras, you point number %d"
msgstr ""
#: ccdfunc.c:461
msgid "Can't set active camera number"
msgstr ""
#: ccdfunc.c:467
msgid "Can't set fan speed"
msgstr ""
#: ccdfunc.c:472
#, c-format
msgid "Camera model: %s"
msgstr ""
#: ccdfunc.c:473
#, c-format
msgid "Pixel size: %g x %g"
msgstr ""
#: ccdfunc.c:479
#, c-format
msgid "Full array: %s"
msgstr ""
#: ccdfunc.c:482
#, c-format
msgid "Field of view: %s"
msgstr ""
#: ccdfunc.c:485
#, c-format
msgid "Can't set T to %g degC"
msgstr "" msgstr ""
#: ccdfunc.c:492 #: ccdfunc.c:492
#, c-format #, c-format
msgid "Found %d cameras, you point number %d"
msgstr ""
#: ccdfunc.c:496
msgid "Can't set active camera number"
msgstr ""
#: ccdfunc.c:502
msgid "Can't set fan speed"
msgstr ""
#: ccdfunc.c:503
#, c-format
msgid "Set fan speed to %d"
msgstr ""
#: ccdfunc.c:508
#, c-format
msgid "Camera model: %s"
msgstr ""
#: ccdfunc.c:509
#, c-format
msgid "Pixel size: %g x %g"
msgstr ""
#: ccdfunc.c:515
#, c-format
msgid "Full array: %s"
msgstr ""
#: ccdfunc.c:518
#, c-format
msgid "Field of view: %s"
msgstr ""
#: ccdfunc.c:521
#, c-format
msgid "Can't set T to %g degC"
msgstr ""
#: ccdfunc.c:528
#, c-format
msgid "Shutter command: %s\n" msgid "Shutter command: %s\n"
msgstr "" msgstr ""
#: ccdfunc.c:494 #: ccdfunc.c:530
#, c-format #, c-format
msgid "Can't run shutter command %s (unsupported?)" msgid "Can't run shutter command %s (unsupported?)"
msgstr "" msgstr ""
#. "Попытка сконфигурировать порт I/O как %d\n" #. "Попытка сконфигурировать порт I/O как %d\n"
#: ccdfunc.c:498 #: ccdfunc.c:534
#, c-format #, c-format
msgid "Try to convfigure I/O port as %d" msgid "Try to configure I/O port as %d"
msgstr "" msgstr ""
#: ccdfunc.c:500 #: ccdfunc.c:536
msgid "Can't configure (unsupported?)" msgid "Can't configure (unsupported?)"
msgstr "" msgstr ""
#: ccdfunc.c:506 #: ccdfunc.c:542
msgid "Can't get IOport state (unsupported?)" msgid "Can't get IOport state (unsupported?)"
msgstr "" msgstr ""
#. "Попытка записи %d в порт I/O\n" #. "Попытка записи %d в порт I/O\n"
#: ccdfunc.c:510 #: ccdfunc.c:546
#, c-format #, c-format
msgid "Try to write %d to I/O port" msgid "Try to write %d to I/O port"
msgstr "" msgstr ""
#: ccdfunc.c:512 #: ccdfunc.c:548
msgid "Can't set IOport" msgid "Can't set IOport"
msgstr "" msgstr ""
#: ccdfunc.c:524 #: ccdfunc.c:556
#, c-format #, c-format
msgid "Can't set binning %dx%d" msgid "Can't set binning %dx%d"
msgstr "" msgstr ""
#: ccdfunc.c:526 #: ccdfunc.c:558
msgid "Can't get current binning" msgid "Can't get current binning"
msgstr "" msgstr ""
#: ccdfunc.c:541 #: ccdfunc.c:573
msgid "Can't set given geometry" msgid "Can't set given geometry"
msgstr "" msgstr ""
#: ccdfunc.c:544 #: ccdfunc.c:576
#, c-format #, c-format
msgid "Can't set %d flushes" msgid "Can't set %d flushes"
msgstr "" msgstr ""
#: ccdfunc.c:547 #: ccdfunc.c:579
#, c-format #, c-format
msgid "Can't set exposure time to %f seconds" msgid "Can't set exposure time to %f seconds"
msgstr "" msgstr ""
#: ccdfunc.c:550 #: ccdfunc.c:582
msgid "Can't change frame type" msgid "Can't change frame type"
msgstr "" msgstr ""
#: ccdfunc.c:553 #: ccdfunc.c:585
msgid "Can't set bit depth" msgid "Can't set bit depth"
msgstr "" msgstr ""
#: ccdfunc.c:556 #: ccdfunc.c:588
msgid "Can't set readout speed" msgid "Can't set readout speed"
msgstr "" msgstr ""
#: ccdfunc.c:557 #: ccdfunc.c:589
msgid "Fast readout mode" #, c-format
msgid "Readout mode: %s"
msgstr "" msgstr ""
#: ccdfunc.c:558 #: ccdfunc.c:590
msgid "Only show statistics" msgid "Only show statistics"
msgstr "" msgstr ""
#. Захват кадра %d\n #: ccdfunc.c:601
#: ccdfunc.c:565
#, c-format
msgid "Capture frame %d\n"
msgstr ""
#: ccdfunc.c:570
#, c-format
msgid "%.1f seconds till exposition ends"
msgstr ""
#: ccdfunc.c:578
msgid "Can't capture image"
msgstr ""
#: ccdfunc.c:581
msgid "Read grabbed image"
msgstr ""
#: ccdfunc.c:583 ccdfunc.c:606 ccdfunc.c:637
msgid "Can't grab image"
msgstr ""
#: ccdfunc.c:594
msgid "Can't open OpenGL window, image preview will be inaccessible" msgid "Can't open OpenGL window, image preview will be inaccessible"
msgstr "" msgstr ""
#. Захват кадра %d\n
#: ccdfunc.c:608
#, c-format
msgid "Capture frame %d"
msgstr ""
#: ccdfunc.c:611 ccdfunc.c:633 ccdfunc.c:674
msgid "Can't capture image"
msgstr ""
#: ccdfunc.c:614
msgid "Read grabbed image"
msgstr ""
#: ccdfunc.c:617 ccdfunc.c:637 ccdfunc.c:678
msgid "Can't grab image"
msgstr ""
#. %d секунд до окончания паузы\n #. %d секунд до окончания паузы\n
#: ccdfunc.c:619 #: ccdfunc.c:654
#, c-format #, c-format
msgid "%d seconds till pause ends\n" msgid "%d seconds till pause ends\n"
msgstr "" msgstr ""
#: imageview.c:257 #: imageview.c:264
msgid "Can't init mutex!" msgid "Can't init mutex!"
msgstr "" msgstr ""
#: imageview.c:275 #: imageview.c:282
msgid "Already initialized!" msgid "Already initialized!"
msgstr "" msgstr ""
#: imageview.c:408
#, c-format
msgid "Histogram conversion: %s"
msgstr ""
#: imageview.c:503
#, c-format
msgid "Equalization of histogram: %s"
msgstr ""
#: imageview.c:503
msgid "on"
msgstr ""
#: imageview.c:503
msgid "off"
msgstr ""

View File

@ -7,7 +7,7 @@
msgid "" msgid ""
msgstr "Project-Id-Version: PACKAGE VERSION\n" msgstr "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-13 12:15+0300\n" "POT-Creation-Date: 2022-01-14 16:21+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -16,433 +16,456 @@ msgstr "Project-Id-Version: PACKAGE VERSION\n"
"Content-Type: text/plain; charset=koi8-r\n" "Content-Type: text/plain; charset=koi8-r\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: ccdfunc.c:570 #: ccdfunc.c:452
#, c-format #, c-format
msgid "%.1f seconds till exposition ends" msgid "%.1f seconds till exposition ends"
msgstr "" msgstr ""
#. %d секунд до окончания паузы\n #. %d секунд до окончания паузы\n
#: ccdfunc.c:619 #: ccdfunc.c:654
#, c-format #, c-format
msgid "%d seconds till pause ends\n" msgid "%d seconds till pause ends\n"
msgstr "" msgstr ""
#: imageview.c:275 #: imageview.c:282
msgid "Already initialized!" msgid "Already initialized!"
msgstr "" msgstr ""
#: ccdfunc.c:452 #: ccdfunc.c:470
msgid "Camera device not found"
msgstr ""
#: ccdfunc.c:436
msgid "Camera device not pointed, try to guess" msgid "Camera device not pointed, try to guess"
msgstr "" msgstr ""
#: ccdfunc.c:472 #: ccdfunc.c:508
#, c-format #, c-format
msgid "Camera model: %s" msgid "Camera model: %s"
msgstr "" msgstr ""
#: ccdfunc.c:578 #: ccdfunc.c:487
msgid "Camera not found"
msgstr ""
#: ccdfunc.c:611 ccdfunc.c:633 ccdfunc.c:674
msgid "Can't capture image" msgid "Can't capture image"
msgstr "" msgstr ""
#: ccdfunc.c:550 #: ccdfunc.c:582
msgid "Can't change frame type" msgid "Can't change frame type"
msgstr "" msgstr ""
#: ccdfunc.c:500 #: ccdfunc.c:536
msgid "Can't configure (unsupported?)" msgid "Can't configure (unsupported?)"
msgstr "" msgstr ""
#: ccdfunc.c:506 #: ccdfunc.c:542
msgid "Can't get IOport state (unsupported?)" msgid "Can't get IOport state (unsupported?)"
msgstr "" msgstr ""
#: ccdfunc.c:526 #: ccdfunc.c:558
msgid "Can't get current binning" msgid "Can't get current binning"
msgstr "" msgstr ""
#: ccdfunc.c:337 #: ccdfunc.c:350
msgid "Can't get current focuser position" msgid "Can't get current focuser position"
msgstr "" msgstr ""
#: ccdfunc.c:330 #: ccdfunc.c:343
msgid "Can't get focuser limit positions" msgid "Can't get focuser limit positions"
msgstr "" msgstr ""
#: ccdfunc.c:406 #: ccdfunc.c:424
msgid "Can't get max wheel position" msgid "Can't get max wheel position"
msgstr "" msgstr ""
#: ccdfunc.c:583 ccdfunc.c:606 ccdfunc.c:637 #: ccdfunc.c:617 ccdfunc.c:637 ccdfunc.c:678
msgid "Can't grab image" msgid "Can't grab image"
msgstr "" msgstr ""
#: ccdfunc.c:355 #: ccdfunc.c:368
msgid "Can't home focuser" msgid "Can't home focuser"
msgstr "" msgstr ""
#: imageview.c:257 #: imageview.c:264
msgid "Can't init mutex!" msgid "Can't init mutex!"
msgstr "" msgstr ""
#: ccdfunc.c:594 #: ccdfunc.c:601
msgid "Can't open OpenGL window, image preview will be inaccessible" msgid "Can't open OpenGL window, image preview will be inaccessible"
msgstr "" msgstr ""
#: ccdfunc.c:494 #: ccdfunc.c:530
#, c-format #, c-format
msgid "Can't run shutter command %s (unsupported?)" msgid "Can't run shutter command %s (unsupported?)"
msgstr "" msgstr ""
#. Не могу сохранить файл #. Не могу сохранить файл
#: ccdfunc.c:115 #: ccdfunc.c:110
msgid "Can't save file" msgid "Can't save file"
msgstr "" msgstr ""
#: ccdfunc.c:544 #: ccdfunc.c:576
#, c-format #, c-format
msgid "Can't set %d flushes" msgid "Can't set %d flushes"
msgstr "" msgstr ""
#: ccdfunc.c:512 #: ccdfunc.c:548
msgid "Can't set IOport" msgid "Can't set IOport"
msgstr "" msgstr ""
#: ccdfunc.c:485 #: ccdfunc.c:521
#, c-format #, c-format
msgid "Can't set T to %g degC" msgid "Can't set T to %g degC"
msgstr "" msgstr ""
#: ccdfunc.c:461 #: ccdfunc.c:496
msgid "Can't set active camera number" msgid "Can't set active camera number"
msgstr "" msgstr ""
#: ccdfunc.c:316 #: ccdfunc.c:329
msgid "Can't set active focuser number" msgid "Can't set active focuser number"
msgstr "" msgstr ""
#: ccdfunc.c:394 #: ccdfunc.c:408
msgid "Can't set active wheel number" msgid "Can't set active wheel number"
msgstr "" msgstr ""
#: ccdfunc.c:524 #: ccdfunc.c:556
#, c-format #, c-format
msgid "Can't set binning %dx%d" msgid "Can't set binning %dx%d"
msgstr "" msgstr ""
#: ccdfunc.c:553 #: ccdfunc.c:585
msgid "Can't set bit depth" msgid "Can't set bit depth"
msgstr "" msgstr ""
#: ccdfunc.c:547 #: ccdfunc.c:579
#, c-format #, c-format
msgid "Can't set exposure time to %f seconds" msgid "Can't set exposure time to %f seconds"
msgstr "" msgstr ""
#: ccdfunc.c:467 #: ccdfunc.c:502
msgid "Can't set fan speed" msgid "Can't set fan speed"
msgstr "" msgstr ""
#: ccdfunc.c:541 #: ccdfunc.c:573
msgid "Can't set given geometry" msgid "Can't set given geometry"
msgstr "" msgstr ""
#: ccdfunc.c:357 #: ccdfunc.c:370
#, c-format #, c-format
msgid "Can't set position %g" msgid "Can't set position %g"
msgstr "" msgstr ""
#: ccdfunc.c:351 #: ccdfunc.c:364
#, c-format #, c-format
msgid "Can't set position %g: out of limits [%g, %g]" msgid "Can't set position %g: out of limits [%g, %g]"
msgstr "" msgstr ""
#: ccdfunc.c:556 #: ccdfunc.c:588
msgid "Can't set readout speed" msgid "Can't set readout speed"
msgstr "" msgstr ""
#: ccdfunc.c:417 #: ccdfunc.c:435
#, c-format #, c-format
msgid "Can't set wheel position %d" msgid "Can't set wheel position %d"
msgstr "" msgstr ""
#. Захват кадра %d\n #. Захват кадра %d\n
#: ccdfunc.c:565 #: ccdfunc.c:608
#, c-format #, c-format
msgid "Capture frame %d\n" msgid "Capture frame %d"
msgstr "" msgstr ""
#: cmdlnopts.c:119 #: cmdlnopts.c:91
msgid "Display image in OpenGL window" msgid "Display image in OpenGL window"
msgstr "" msgstr ""
#: ccdfunc.c:259 #: imageview.c:503
#, c-format
msgid "Equalization of histogram: %s"
msgstr ""
#: ccdfunc.c:254
msgid "Error saving file" msgid "Error saving file"
msgstr "" msgstr ""
#: ccdfunc.c:557 #: ccdfunc.c:518
msgid "Fast readout mode"
msgstr ""
#: ccdfunc.c:482
#, c-format #, c-format
msgid "Field of view: %s" msgid "Field of view: %s"
msgstr "" msgstr ""
#: ccdfunc.c:257 #: ccdfunc.c:252
#, c-format #, c-format
msgid "File saved as '%s'" msgid "File saved as '%s'"
msgstr "" msgstr ""
#: ccdfunc.c:291 #: ccdfunc.c:303
msgid "Focuser device not pointed, try to guess" msgid "Focuser device not pointed, try to guess"
msgstr "" msgstr ""
#: ccdfunc.c:307 #: ccdfunc.c:320
msgid "Focuser not found" msgid "Focuser not found"
msgstr "" msgstr ""
#: ccdfunc.c:457 #: ccdfunc.c:492
#, c-format #, c-format
msgid "Found %d cameras, you point number %d" msgid "Found %d cameras, you point number %d"
msgstr "" msgstr ""
#: ccdfunc.c:312 #: ccdfunc.c:325
#, c-format #, c-format
msgid "Found %d focusers, you point number %d" msgid "Found %d focusers, you point number %d"
msgstr "" msgstr ""
#: ccdfunc.c:390 #: ccdfunc.c:404
#, c-format #, c-format
msgid "Found %d wheels, you point number %d" msgid "Found %d wheels, you point number %d"
msgstr "" msgstr ""
#: ccdfunc.c:479 #: ccdfunc.c:515
#, c-format #, c-format
msgid "Full array: %s" msgid "Full array: %s"
msgstr "" msgstr ""
#. Статистика по изображению:\n #: imageview.c:408
#: ccdfunc.c:279 #, c-format
msgid "Histogram conversion: %s"
msgstr ""
#: ccdfunc.c:292
#, c-format #, c-format
msgid "Image stat:\n" msgid "Image stat:\n"
msgstr "" msgstr ""
#: cmdlnopts.c:91 #: cmdlnopts.c:63
msgid "N flushes before exposing (default: 1)" msgid "N flushes before exposing (default: 1)"
msgstr "" msgstr ""
#: ccdfunc.c:558 #: ccdfunc.c:590
msgid "Only show statistics" msgid "Only show statistics"
msgstr "" msgstr ""
#: ccdfunc.c:473 #: ccdfunc.c:509
#, c-format #, c-format
msgid "Pixel size: %g x %g" msgid "Pixel size: %g x %g"
msgstr "" msgstr ""
#: ccdfunc.c:581 #: ccdfunc.c:614
msgid "Read grabbed image" msgid "Read grabbed image"
msgstr "" msgstr ""
#: ccdfunc.c:492 #: ccdfunc.c:589
#, c-format
msgid "Readout mode: %s"
msgstr ""
#: ccdfunc.c:503
#, c-format
msgid "Set fan speed to %d"
msgstr ""
#: ccdfunc.c:528
#, c-format #, c-format
msgid "Shutter command: %s\n" msgid "Shutter command: %s\n"
msgstr "" msgstr ""
#. "Попытка сконфигурировать порт I/O как %d\n" #. "Попытка сконфигурировать порт I/O как %d\n"
#: ccdfunc.c:498 #: ccdfunc.c:534
#, c-format #, c-format
msgid "Try to convfigure I/O port as %d" msgid "Try to configure I/O port as %d"
msgstr "" msgstr ""
#. "Попытка записи %d в порт I/O\n" #. "Попытка записи %d в порт I/O\n"
#: ccdfunc.c:510 #: ccdfunc.c:546
#, c-format #, c-format
msgid "Try to write %d to I/O port" msgid "Try to write %d to I/O port"
msgstr "" msgstr ""
#: ccdfunc.c:369 #: ccdfunc.c:382
msgid "Wheel device not pointed, try to guess" msgid "Wheel device not pointed, try to guess"
msgstr "" msgstr ""
#: ccdfunc.c:385 #: ccdfunc.c:399
msgid "Wheel not found" msgid "Wheel not found"
msgstr "" msgstr ""
#: ccdfunc.c:413 #: ccdfunc.c:431
#, c-format #, c-format
msgid "Wheel position should be from 0 to %d" msgid "Wheel position should be from 0 to %d"
msgstr "" msgstr ""
#: cmdlnopts.c:89 #: cmdlnopts.c:61
msgid "add records to header from given file[s]" msgid "add records to header from given file[s]"
msgstr "" msgstr ""
#: cmdlnopts.c:71 #: cmdlnopts.c:43
msgid "camera device number (if many: 0, 1, 2 etc)" msgid "camera device number (if many: 0, 1, 2 etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:68 #: cmdlnopts.c:40
msgid "camera device type (fli/zwo/etc)" msgid "camera device type (fli/zwo/etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:104 #: cmdlnopts.c:76
msgid "close shutter" msgid "close shutter"
msgstr "" msgstr ""
#: cmdlnopts.c:111 #: cmdlnopts.c:83
msgid "configure I/O port pins to given value (decimal number, pin1 is LSB, " msgid "configure I/O port pins to given value (decimal number, pin1 is LSB, "
"1 == output, 0 == input)" "1 == output, 0 == input)"
msgstr "" msgstr ""
#: cmdlnopts.c:79 #: cmdlnopts.c:51
msgid "fast (8MHz) readout mode" msgid "fast (8MHz) readout mode"
msgstr "" msgstr ""
#: cmdlnopts.c:72 #: cmdlnopts.c:44
msgid "filter wheel device number (if many: 0, 1, 2 etc)" msgid "filter wheel device number (if many: 0, 1, 2 etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:73 #: cmdlnopts.c:45
msgid "focuser device number (if many: 0, 1, 2 etc)" msgid "focuser device number (if many: 0, 1, 2 etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:69 #: cmdlnopts.c:41
msgid "focuser device type (fli/zwo/etc)" msgid "focuser device type (fli/zwo/etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:97 #: cmdlnopts.c:69
msgid "frame X0 coordinate (-1 - all with overscan)" msgid "frame X0 coordinate (-1 - all with overscan)"
msgstr "" msgstr ""
#: cmdlnopts.c:99 #: cmdlnopts.c:71
msgid "frame X1 coordinate (-1 - all with overscan)" msgid "frame X1 coordinate (-1 - all with overscan)"
msgstr "" msgstr ""
#: cmdlnopts.c:98 #: cmdlnopts.c:70
msgid "frame Y0 coordinate (-1 - all with overscan)" msgid "frame Y0 coordinate (-1 - all with overscan)"
msgstr "" msgstr ""
#: cmdlnopts.c:100 #: cmdlnopts.c:72
msgid "frame Y1 coordinate (-1 - all with overscan)" msgid "frame Y1 coordinate (-1 - all with overscan)"
msgstr "" msgstr ""
#: cmdlnopts.c:107 #: cmdlnopts.c:79
msgid "get value of I/O port pins" msgid "get value of I/O port pins"
msgstr "" msgstr ""
#: cmdlnopts.c:101 #: cmdlnopts.c:73
msgid "grab full frame (with overscans)" msgid "grab full frame (with overscans)"
msgstr "" msgstr ""
#: cmdlnopts.c:92 #: cmdlnopts.c:64
msgid "horizontal binning to N pixels" msgid "horizontal binning to N pixels"
msgstr "" msgstr ""
#: cmdlnopts.c:85 #: cmdlnopts.c:57
msgid "instrument name" msgid "instrument name"
msgstr "" msgstr ""
#: cmdlnopts.c:95 #: cmdlnopts.c:67
msgid "make pause for N seconds between expositions" msgid "make pause for N seconds between expositions"
msgstr "" msgstr ""
#: cmdlnopts.c:94 #: cmdlnopts.c:66
msgid "make series of N frames" msgid "make series of N frames"
msgstr "" msgstr ""
#: cmdlnopts.c:113 #: cmdlnopts.c:85
msgid "move focuser to absolute position, mm" msgid "move focuser to absolute position, mm"
msgstr "" msgstr ""
#: cmdlnopts.c:114 #: cmdlnopts.c:86
msgid "move focuser to relative position, mm" msgid "move focuser to relative position, mm"
msgstr "" msgstr ""
#: cmdlnopts.c:108 #: cmdlnopts.c:80
msgid "move stepper motor asynchronous" msgid "move stepper motor asynchronous"
msgstr "" msgstr ""
#: cmdlnopts.c:77 #: cmdlnopts.c:49
msgid "not open shutter, when exposing (\"dark frames\")" msgid "not open shutter, when exposing (\"dark frames\")"
msgstr "" msgstr ""
#: cmdlnopts.c:86 #: cmdlnopts.c:58
msgid "object name" msgid "object name"
msgstr "" msgstr ""
#: cmdlnopts.c:84 #: cmdlnopts.c:56
msgid "object type (neon, object, flat etc)" msgid "object type (neon, object, flat etc)"
msgstr "" msgstr ""
#: cmdlnopts.c:87 #: cmdlnopts.c:59
msgid "observers' names" msgid "observers' names"
msgstr "" msgstr ""
#: cmdlnopts.c:88 #: cmdlnopts.c:60
msgid "observing program name" msgid "observing program name"
msgstr "" msgstr ""
#: cmdlnopts.c:103 #: imageview.c:503
msgid "open shutter" msgid "off"
msgstr "" msgstr ""
#: cmdlnopts.c:83 #: imageview.c:503
msgid "program author" msgid "on"
msgstr "" msgstr ""
#: cmdlnopts.c:75 #: cmdlnopts.c:75
msgid "open shutter"
msgstr ""
#: cmdlnopts.c:55
msgid "program author"
msgstr ""
#: cmdlnopts.c:47
msgid "rewrite output file if exists" msgid "rewrite output file if exists"
msgstr "" msgstr ""
#: cmdlnopts.c:106 #: cmdlnopts.c:78
msgid "run exposition on HIGH @ pin5 I/O port" msgid "run exposition on HIGH @ pin5 I/O port"
msgstr "" msgstr ""
#: cmdlnopts.c:105 #: cmdlnopts.c:77
msgid "run exposition on LOW @ pin5 I/O port" msgid "run exposition on LOW @ pin5 I/O port"
msgstr "" msgstr ""
#: cmdlnopts.c:78 #: cmdlnopts.c:50
msgid "run in 8-bit mode" msgid "run in 8-bit mode"
msgstr "" msgstr ""
#: cmdlnopts.c:80 #: cmdlnopts.c:52
msgid "set CCD temperature to given value (degr C)" msgid "set CCD temperature to given value (degr C)"
msgstr "" msgstr ""
#: cmdlnopts.c:110 #: cmdlnopts.c:82
msgid "set I/O port pins to given value (decimal number, pin1 is LSB)" msgid "set I/O port pins to given value (decimal number, pin1 is LSB)"
msgstr "" msgstr ""
#: cmdlnopts.c:96 #: cmdlnopts.c:68
msgid "set exposure time to given value (ms)" msgid "set exposure time to given value (ms)"
msgstr "" msgstr ""
#: cmdlnopts.c:81 #: cmdlnopts.c:53
msgid "set fan speed (0 - off, 1 - low, 2 - high)" msgid "set fan speed (0 - off, 1 - low, 2 - high)"
msgstr "" msgstr ""
#: cmdlnopts.c:116 #: cmdlnopts.c:88
msgid "set wheel position" msgid "set wheel position"
msgstr "" msgstr ""
#: cmdlnopts.c:74 #: cmdlnopts.c:46
msgid "show this help" msgid "show this help"
msgstr "" msgstr ""
#: cmdlnopts.c:76 #: cmdlnopts.c:48
msgid "verbose level (each -v increase it)" msgid "verbose level (each -v increase it)"
msgstr "" msgstr ""
#: cmdlnopts.c:93 #: cmdlnopts.c:65
msgid "vertical binning to N pixels" msgid "vertical binning to N pixels"
msgstr "" msgstr ""
#: cmdlnopts.c:70 #: cmdlnopts.c:42
msgid "wheel device type (fli/zwo/etc)" msgid "wheel device type (fli/zwo/etc)"
msgstr "" msgstr ""

17
main.c
View File

@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <omp.h>
#include <signal.h> #include <signal.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -30,16 +30,27 @@
#ifdef IMAGEVIEW #ifdef IMAGEVIEW
#include "imageview.h" #include "imageview.h"
#endif #endif
#include "omp.h"
void signals(int signo){ void signals(int signo){
WARNX("Get signal %d - exit", signo);
DBG("Cancel capturing");
cancel(); cancel();
#ifdef IMAGEVIEW
DBG("KILL GL");
closeGL();
usleep(100000);
#endif
exit(signo); exit(signo);
} }
extern const char *__progname;
int main(int argc, char **argv){ int main(int argc, char **argv){
initial_setup(); initial_setup();
/*
int cpunumber = sysconf(_SC_NPROCESSORS_ONLN);
if(omp_get_max_threads() != cpunumber)
omp_set_num_threads(cpunumber);
*/
parse_args(argc, argv); parse_args(argc, argv);
signal(SIGINT, signals); signal(SIGINT, signals);
signal(SIGQUIT, signals); signal(SIGQUIT, signals);

37
omp.h Normal file
View File

@ -0,0 +1,37 @@
/*
* This file is part of the CCD_Capture project.
* Copyright 2022 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/>.
*/
#pragma once
#ifndef OMP_H__
#define OMP_H__
#ifdef OMP_FOUND
#include <omp.h>
#ifndef OMP_FOR
#define Stringify(x) #x
#define OMP_FOR(x) _Pragma(Stringify(omp parallel for x))
#endif
#else
#define OMP_FOR(x)
#endif
#endif // OMP_H__