From e5c5b90cadf0314d0ef785e8504c8ed341e44be2 Mon Sep 17 00:00:00 2001 From: Steffen Pohle Date: Tue, 29 Nov 2022 22:13:35 +0100 Subject: [PATCH] closing and reopening windows will works. As well as the menus for some settings --- ChangeLog | 4 ++ configuration.cc | 24 +++++++++- configuration.h | 10 ++++- convert.cc | 4 +- gui.cc | 34 +++++++++++++++ gui.h | 10 ++++- histogram.cc | 19 +++++--- simpleskycam.ui | 111 ++++++++++++----------------------------------- 8 files changed, 118 insertions(+), 98 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8d1b16a..256a3bc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2022-11-29: +- closing and reopening of windows is working now. +- RGB16 debayer mode simple/bilinear can now be choosen in the settings menu + 2022-11-26: - adding histogram diff --git a/configuration.cc b/configuration.cc index f67e6e7..6f2e376 100644 --- a/configuration.cc +++ b/configuration.cc @@ -78,8 +78,9 @@ void Configuration::SaveConfig(std::string filename) { // - // histogram settings + // histogram settings and debayer mode jp.AddObject("histogram_log", histogram_log); + jp.AddObject("debayer_mode", debayer_mode); // @@ -143,7 +144,11 @@ void Configuration::LoadConfig(std::string filename) { gtk_entry_set_text(GTK_ENTRY(cbdevice), vstr.c_str()); } - jp.GetValueInt("histogram_log", &histogram_log); + jp.GetValueInt("histogram_log", &i); + SetHistogramLog(i); + + jp.GetValueInt("debayer_mode", &i); + SetDebayerMode(i); // // start streaming if a device was selected. @@ -200,3 +205,18 @@ list Configuration::GetPresetButton (int btn) { }; +void Configuration::SetHistogramLog(int trueorfalse) { + GtkWidget *cfg_logh = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "menu-settings-loghistogram")); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(cfg_logh), (trueorfalse == 1)); + histogram_log = trueorfalse; +}; + + + +void Configuration::SetDebayerMode(int trueorfalse) { + GtkWidget *cfg_debayer = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "menu-settings-bilinearrgb")); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(cfg_debayer), (trueorfalse == 1)); + debayer_mode = trueorfalse; +}; + + diff --git a/configuration.h b/configuration.h index 7154b62..ad8a135 100644 --- a/configuration.h +++ b/configuration.h @@ -17,14 +17,15 @@ class Configuration { private: + int histogram_log = 1; // logarithmic or linear scale + JSONParse config; std::string GetDefaultFileName(); list presetbtn[BTN_PRESET_MAX]; public: char *debugpath; char *readdumppath; - int histogram_log = 1; // logarithmic or linear scale - + int debayer_mode = 0; // 0..simple mode, 1..bilinear Configuration(); ~Configuration(); @@ -35,6 +36,11 @@ public: void LoadConfig(std::string filename); void SaveConfig(std::string filename); + void SetDebayerMode(int trueorfalse); + + void SetHistogramLog(int trueorfalse); + int GetHistogramLog() { return histogram_log; }; + void SetPresetButton (int btn, list *parameters); list GetPresetButton (int btn); }; diff --git a/convert.cc b/convert.cc index 5275987..7a4b2d9 100644 --- a/convert.cc +++ b/convert.cc @@ -347,8 +347,8 @@ int Convert (ConvertData *cdata, VideoFrame *dest, unsigned char *ptrsrc, int sr break; case (V4L2_PIX_FMT_SGRBG16): - //debayer_grbg16_simple ((uint16_t *)ptrsrc, srcw, srch, ptrdst, dest->w, dest->h); - debayer_grbg16_bilinear ((uint16_t *)ptrsrc, srcw, srch, ptrdst, dest->w, dest->h); + if (config.debayer_mode == 0) debayer_grbg16_simple ((uint16_t *)ptrsrc, srcw, srch, ptrdst, dest->w, dest->h); + else debayer_grbg16_bilinear ((uint16_t *)ptrsrc, srcw, srch, ptrdst, dest->w, dest->h); break; case (V4L2_PIX_FMT_UYVY): diff --git a/gui.cc b/gui.cc index 56a033b..b255976 100644 --- a/gui.cc +++ b/gui.cc @@ -81,7 +81,12 @@ void cb_window_show (GtkWidget *widget, gpointer data) { detect.SetObjectSize(300, 300); cb_video_btnrefreshlist (NULL, NULL); + + // + // load config and setup elements config.LoadDefault(); + GtkWidget *cfg_rgbenc = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "menu-settings-bilinearrgb")); + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(cfg_rgbenc), (config.debayer_mode != 0)); // // update the input video controls every 2 seconds. @@ -89,6 +94,12 @@ void cb_window_show (GtkWidget *widget, gpointer data) { }; +void cb_menu_set_rgbenc (GtkCheckMenuItem *checkmenuitem, gpointer user_data) { + if (gtk_check_menu_item_get_active(checkmenuitem) == TRUE) config.debayer_mode = 1; + else config.debayer_mode = 1; +} + + void displayerror (std::string error) { GtkWidget *dialog; GtkWidget *window = GTK_WIDGET (gtk_builder_get_object (_builder_, "main-window")); @@ -359,3 +370,26 @@ void cb_detect_btnsetpos (GtkWidget *widget, gpointer data) { }; +void cb_output_show_window (GtkWidget *widget, gpointer data) { + printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__); + + GtkWidget *wnd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "window-output")); + gtk_widget_show(wnd); +}; + + +void cb_detect_show_window (GtkWidget *widget, gpointer data) { + printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__); + + GtkWidget *wnd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "window-detect")); + gtk_widget_show(wnd); +}; + + +void cb_input_show_window (GtkWidget *widget, gpointer data) { + printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__); + + GtkWidget *wnd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "window-input")); + gtk_widget_show(wnd); +}; + diff --git a/gui.h b/gui.h index ce54796..321c4c4 100644 --- a/gui.h +++ b/gui.h @@ -79,6 +79,7 @@ gboolean video_pre_long(gpointer data); // // thread new inframe G_MODULE_EXPORT gboolean cb_thread_video (gpointer data); +G_MODULE_EXPORT void cb_input_show_window (GtkWidget *widget, gpointer data); // @@ -88,15 +89,17 @@ G_MODULE_EXPORT gboolean cb_thread_filter (gpointer data); G_MODULE_EXPORT gboolean cb_thread_detect (gpointer data); G_MODULE_EXPORT void cb_image_btnnew (GtkWidget *widget, gpointer data); G_MODULE_EXPORT void cb_image_btnsave (GtkWidget *widget, gpointer data); -G_MODULE_EXPORT void cb_detect_bright (GtkRange *range, gpointer data); +G_MODULE_EXPORT void cb_output_show_window (GtkWidget *widget, gpointer data); // // detection elements +G_MODULE_EXPORT void cb_detect_bright (GtkRange *range, gpointer data); G_MODULE_EXPORT void cb_detect_btnsetpos (GtkWidget *widget, gpointer data); G_MODULE_EXPORT void cb_detect_btnsetsize (GtkWidget *widget, gpointer data); G_MODULE_EXPORT void cb_detect_followtype (GtkWidget *widget, gpointer data); G_MODULE_EXPORT void cb_detect_detecttype (GtkWidget *widget, gpointer data); +G_MODULE_EXPORT void cb_detect_show_window (GtkWidget *widget, gpointer data); // @@ -106,8 +109,13 @@ G_MODULE_EXPORT void cb_histogramda_motion (GtkWidget *widget, GdkEvent *event, G_MODULE_EXPORT void cb_histogramda_btnpress (GtkWidget *widget, gpointer data); G_MODULE_EXPORT void cb_histogramda_btnrelease (GtkWidget *widget, gpointer data); G_MODULE_EXPORT void cb_histogramda_keypress (GtkWidget *widget, GdkEventKey *event, gpointer data); +G_MODULE_EXPORT void cb_histogram_show_window (GtkWidget *widget, gpointer data); +// +// menu elements +G_MODULE_EXPORT void cb_menu_set_rgbenc (GtkCheckMenuItem *checkmenuitem, gpointer user_data); + #ifdef __cplusplus } diff --git a/histogram.cc b/histogram.cc index a38cfeb..1aa1b7e 100644 --- a/histogram.cc +++ b/histogram.cc @@ -72,7 +72,7 @@ void cb_histogramda_draw(GtkWidget *area, cairo_t *cr, int w, int h, gpointer da int histogram_scale = histogram_width - 1 > 0 ? histogram_width - 1 : 1; for (int i = 0; i < histogram_width; i++) { px = HISTOGRAM_MARGIN + ((clientw-HISTOGRAM_MARGIN*2) * i) / histogram_scale; - if (config.histogram_log) + if (config.GetHistogramLog()) py2 = (clienth-HISTOGRAM_MARGIN) - ((clienth-HISTOGRAM_MARGIN*2) * log10(histogram[chan][histogram_zoom_start+i]+1) / log10(histogram_max)); else py2 = (clienth-HISTOGRAM_MARGIN) - ((clienth-HISTOGRAM_MARGIN*2) * histogram[chan][histogram_zoom_start+i] / histogram_max); @@ -98,7 +98,7 @@ void cb_histogramda_draw(GtkWidget *area, cairo_t *cr, int w, int h, gpointer da } // draw some text - if (config.histogram_log) snprintf (txt, 255, "%d - Log", histogram_max); + if (config.GetHistogramLog()) snprintf (txt, 255, "%d - Log", histogram_max); else snprintf (txt, 255, "%d - Lin", histogram_max); for (int i = 0; i < 5; i++) { @@ -227,14 +227,19 @@ void cb_histogramda_btnrelease (GtkWidget *widget, gpointer data) { void cb_histogramda_keypress (GtkWidget *widget, GdkEventKey *event, gpointer data) { - printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__); if (event == NULL) return; - else if (event->keyval == 'l') { - if (config.histogram_log == 0) config.histogram_log = 1; - else config.histogram_log = 0; - } + else if (event->keyval == 'l') config.SetHistogramLog(config.GetHistogramLog() == 0); +}; + + +void cb_histogram_show_window (GtkWidget *widget, gpointer data) { + printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__); + + GtkWidget *wnd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "window-histogram")); + gtk_widget_show(wnd); }; + diff --git a/simpleskycam.ui b/simpleskycam.ui index 4a0428b..6da08d5 100644 --- a/simpleskycam.ui +++ b/simpleskycam.ui @@ -14,6 +14,7 @@ Detect 440 250 + True @@ -469,6 +470,7 @@ False Histogram + True @@ -487,6 +489,7 @@ Input 400 300 + True @@ -520,61 +523,46 @@ True False - _Datei + _Window True True False - - gtk-new + True False + _Detect True - True + - - gtk-open + True False + _Input True - True + - - gtk-save + True False + _Output True - True + - - gtk-save-as + True False + _Histogram True - True - - - - - True - False - - - - - gtk-quit - True - False - True - True + @@ -585,77 +573,31 @@ True False - _Bearbeiten + _Settings True True False - - gtk-cut + True False + Encoding of +BB GG BB GG +GG RR GG RR +Image Data + _Bilinear RGB Encoding (RAW8/RAW16) True - True + - - gtk-copy - True - False - True - True - - - - - gtk-paste - True - False - True - True - - - - - gtk-delete - True - False - True - True - - - - - - - - - True - False - _Ansicht - True - - - - - True - False - _Hilfe - True - - - True - False - - - gtk-about + True False + _Log-Histogram True - True @@ -1013,6 +955,7 @@ Output 400 300 + True