diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index f7fa62bcf..60081061e 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -1860,9 +1860,11 @@ menu.hint_video_mode Wählen Sie den Modus des Ausgangssignals für den HDMI-Ans menu.hint_video_modes Definiert, welche Videosysteme mit der VF-Taste der Fernbedienung ausgewählt werden können menu.hint_video_modes_auto Definiert, welche Videosysteme automatisch ausgewählt werden können menu.hint_video_pip Bild in Bild Größe und Position +menu.hint_video_psi_step Setzt die Schrittweite für das On-Screen-Menü menu.hint_video_saturation Ändert die Farbsättigung menu.hint_video_scart_mode Wählen Sie den Modus des Ausgangssignals für den SCART-Anschluss menu.hint_video_sdosd Aktivieren/Deaktivieren der OSD Anzeige am Analogausgang (Scart, Cinch) +menu.hint_video_tint Ändert den Farbton menu.hint_video_zappingmode Wählen Sie, ob ein schwarzes Bild oder ein Standbild beim Umschalten gezeigt werden soll menu.hint_volume Wählen Sie die Anzeigeoptionen für die Lautstärke menu.hint_volume_digits Zifferndarstellung der Lautstärkeanzeige ein- oder ausschalten @@ -1886,6 +1888,7 @@ menu.hint_zap_cycle Wählen Sie, ob nur innerhalb des aktiven Bouquets umgeschal menu.next Weiter message.frame_enable Rahmen für Meldungen und Hinweisfenster message.frame_enable_hint Aktivieren von Rahmen für Meldungen und Hinweisfenster. +messagebox.accept Wollen Sie die Änderungen beibehalten? messagebox.back Zurück messagebox.cancel Abbruch messagebox.discard Wollen Sie die Änderungen verwerfen? @@ -2968,6 +2971,13 @@ videomenu.panscan Pan & Scan videomenu.panscan2 14:9 Pan & Scan videomenu.pip PiP Setup videomenu.pip_error PiP Startfehler +videomenu.psi Farbeinstellungen +videomenu.psi.brightness Helligkeit +videomenu.psi.contrast Kontrast +videomenu.psi.reset Standard-Einstellungen +videomenu.psi.saturation Sättigung +videomenu.psi.step Videoregler-Schrittweite +videomenu.psi.tint Farbton videomenu.saturation Sättigung videomenu.scart Scart videomenu.screensetup Bildbereich diff --git a/data/locale/english.locale b/data/locale/english.locale index c30210874..ab6818f5f 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -1807,9 +1807,11 @@ menu.hint_video_mode HDMI output video mode menu.hint_video_modes VF key will cycle between enabled modes menu.hint_video_modes_auto Enable modes to auto-select based on content menu.hint_video_pip Picture in picture size and position +menu.hint_video_psi_step Set the increment for the on-screen menu menu.hint_video_saturation Change picture saturation menu.hint_video_scart_mode Select analog output mode for SCART connectors menu.hint_video_sdosd Enable/disable OSD display on SD output (scart, cinch) +menu.hint_video_tint Change picture tint menu.hint_video_zappingmode Select black screen or still picture while zapping menu.hint_volume Configure Volume GUI options menu.hint_volume_digits Numeric display of the volumebar on/off @@ -1832,6 +1834,7 @@ menu.hint_zap_cycle When swithing channels, stay in current bouquet menu.next Next message.frame_enable Message and hint box frames message.frame_enable_hint Enable frames around message and hint boxes. +messagebox.accept Do you want to keep the changes? messagebox.back Back messagebox.cancel Cancel messagebox.discard Discard changes? @@ -2914,6 +2917,13 @@ videomenu.panscan Pan & Scan videomenu.panscan2 14:9 Pan & Scan videomenu.pip PiP setup videomenu.pip_error PiP start failed +videomenu.psi Color settings +videomenu.psi.brightness Brightness +videomenu.psi.contrast Contrast +videomenu.psi.reset Standard settings +videomenu.psi.saturation Saturation +videomenu.psi.step Video slider step size +videomenu.psi.tint Tint videomenu.saturation Saturation videomenu.scart Scart videomenu.screensetup Screen Setup diff --git a/src/gui/Makefile.am b/src/gui/Makefile.am index 2c649b328..025ecd214 100644 --- a/src/gui/Makefile.am +++ b/src/gui/Makefile.am @@ -137,6 +137,11 @@ libneutrino_gui_a_SOURCES += \ update_ext.cpp endif +if BOXTYPE_ARMBOX +libneutrino_gui_a_SOURCES += \ + psisetup.cpp +endif + #NI if ENABLE_TESTING libneutrino_gui_a_SOURCES += \ test_menu.cpp diff --git a/src/gui/psisetup.cpp b/src/gui/psisetup.cpp new file mode 100644 index 000000000..5a12390b4 --- /dev/null +++ b/src/gui/psisetup.cpp @@ -0,0 +1,312 @@ +/* + (C)2012-2013 by martii + + License: GPL + + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#include +#include + +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include + +extern cVideo * videoDecoder; + +struct PSI_list +{ + int control; + const neutrino_locale_t loc; + bool selected; + CProgressBar *scale; + unsigned char value; + unsigned char value_old; + int x; + int y; + int xLoc; + int yLoc; + int xBox; + int yBox; +}; + +#define PSI_SCALE_COUNT 5 +static PSI_list + psi_list[PSI_SCALE_COUNT] = { +#define PSI_CONTRAST 0 + { VIDEO_CONTROL_CONTRAST, LOCALE_VIDEOMENU_PSI_CONTRAST, true, NULL, 0, 0, 0, 0, 0, 0, 0, 0 } +#define PSI_SATURATION 1 + , { VIDEO_CONTROL_SATURATION, LOCALE_VIDEOMENU_PSI_SATURATION, false, NULL, 0, 0, 0, 0, 0, 0, 0, 0 } +#define PSI_BRIGHTNESS 2 + , { VIDEO_CONTROL_BRIGHTNESS, LOCALE_VIDEOMENU_PSI_BRIGHTNESS, false, NULL, 0, 0, 0, 0, 0, 0, 0, 0 } +#define PSI_TINT 3 + , { VIDEO_CONTROL_HUE, LOCALE_VIDEOMENU_PSI_TINT, false, NULL, 0, 0, 0, 0, 0, 0, 0, 0 } +#define PSI_RESET 4 + , { -1, LOCALE_VIDEOMENU_PSI_RESET, false, NULL, 0, 0, 0, 0, 0, 0, 0, 0 } +}; + +#define SLIDERWIDTH 200 +#define SLIDERHEIGHT 15 +#define LOCGAP 5 + +CPSISetup::CPSISetup (const neutrino_locale_t Name) +{ + frameBuffer = CFrameBuffer::getInstance (); + name = Name; + selected = 0; + + for (int i = 0; i < PSI_RESET; i++) + psi_list[i].scale = new CProgressBar(); + + psi_list[PSI_CONTRAST].value = g_settings.psi_contrast; + psi_list[PSI_SATURATION].value = g_settings.psi_saturation; + psi_list[PSI_BRIGHTNESS].value = g_settings.psi_brightness; + psi_list[PSI_TINT].value = g_settings.psi_tint; + + for (int i = 0; i < PSI_RESET; i++) + videoDecoder->SetControl (psi_list[i].control, psi_list[i].value); + + needsBlit = true; +} + +void CPSISetup::blankScreen(bool blank) { + for (int i = 0; i < PSI_RESET; i++) + videoDecoder->SetControl(psi_list[i].control, blank ? 0 : psi_list[i].value); +} + +int CPSISetup::exec (CMenuTarget * parent, const std::string &) +{ + neutrino_msg_t msg; + neutrino_msg_data_t data; + + locWidth = 0; + for (int i = 0; i < PSI_RESET; i++) + { + int w = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getRenderWidth (g_Locale->getText(psi_list[i].loc)) + 3; // UTF-8 + if (w > locWidth) + locWidth = w; + } + locHeight = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]->getHeight (); + if (locHeight < SLIDERHEIGHT) + locHeight = SLIDERHEIGHT + 2; + + sliderOffset = (locHeight - SLIDERHEIGHT) >> 1; + + // [ SLIDERWIDTH ][5][locwidth ] + // [locHeight][XXXXXXXXXXXXX] [XXXXXXXXXXXX] + // [locHeight][XXXXXXXXXXXXX] [XXXXXXXXXXXX] + // [locHeight][XXXXXXXXXXXXX] [XXXXXXXXXXXX] + // [locHeight][XXXXXXXXXXXXX] [XXXXXXXXXXXX] + // [locHeight] [XXXXXXXXXXXX] + + dx = SLIDERWIDTH + LOCGAP + locWidth; + dy = PSI_SCALE_COUNT * locHeight + (PSI_SCALE_COUNT - 1) * 2; + + x = frameBuffer->getScreenX() + ((frameBuffer->getScreenWidth() - dx) >> 1); + y = frameBuffer->getScreenY() + ((frameBuffer->getScreenHeight() - dy) >> 1); + + int res = menu_return::RETURN_REPAINT; + if (parent) + parent->hide (); + + for (int i = 0; i < PSI_SCALE_COUNT; i++) + { + psi_list[i].value = psi_list[i].value_old = 128; + psi_list[i].x = x; + psi_list[i].y = y + locHeight * i + i * 2; + psi_list[i].xBox = psi_list[i].x + SLIDERWIDTH + LOCGAP; + psi_list[i].yBox = psi_list[i].y; + psi_list[i].xLoc = psi_list[i].x + SLIDERWIDTH + LOCGAP + 2; + psi_list[i].yLoc = psi_list[i].y + locHeight - 1; + } + + psi_list[PSI_RESET].xLoc = x + 20; + psi_list[PSI_RESET].xBox = x; + + for (int i = 0; i < PSI_RESET; i++) + psi_list[i].scale->reset (); + + psi_list[PSI_CONTRAST].value = g_settings.psi_contrast; + psi_list[PSI_SATURATION].value = g_settings.psi_saturation; + psi_list[PSI_BRIGHTNESS].value = g_settings.psi_brightness; + psi_list[PSI_TINT].value = g_settings.psi_tint; + + for (int i = 0; i < PSI_RESET; i++) + psi_list[i].value_old = psi_list[i].value; + + paint(); + + uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] ? g_settings.timing[SNeutrinoSettings::TIMING_MENU] : 0xffff); + bool loop = true; + while (loop) + { + if(needsBlit) { + frameBuffer->blit(); + needsBlit = false; + } + g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd, true); + if ( msg <= CRCInput::RC_MaxRC ) + timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_MENU] ? g_settings.timing[SNeutrinoSettings::TIMING_MENU] : 0xffff); + int i; + int direction = 1; // down + switch (msg) + { + case CRCInput::RC_up: + direction = -1; + /* fall through */ + case CRCInput::RC_down: + if (selected + direction > -1 && selected + direction < PSI_SCALE_COUNT) + { + psi_list[selected].selected = false; + paintSlider (selected); + selected += direction; + psi_list[selected].selected = true; + paintSlider (selected); + } + break; + case CRCInput::RC_right: + if (selected < PSI_RESET && psi_list[selected].value < 255) + { + int val = psi_list[selected].value + g_settings.psi_step; + psi_list[selected].value = (val > 255) ? 255 : val; + paintSlider (selected); + videoDecoder->SetControl(psi_list[selected].control, psi_list[selected].value); + } + break; + case CRCInput::RC_left: + if (selected < PSI_RESET && psi_list[selected].value > 0) + { + int val = psi_list[selected].value - g_settings.psi_step; + psi_list[selected].value = (val < 0) ? 0 : val; + paintSlider (selected); + videoDecoder->SetControl(psi_list[selected].control, psi_list[selected].value); + } + break; + case CRCInput::RC_home: // exit -> revert changes + for (i = 0; (i < PSI_RESET) && (psi_list[i].value == psi_list[i].value_old); i++); + if (ShowMsg(name, LOCALE_MESSAGEBOX_ACCEPT, CMsgBox::mbrYes, CMsgBox::mbYes | CMsgBox::mbCancel) == CMsgBox::mbrCancel) + for (i = 0; i < PSI_RESET; i++) + { + psi_list[i].value = psi_list[i].value_old; + videoDecoder->SetControl(psi_list[selected].control, psi_list[selected].value); + } + /* fall through */ + case CRCInput::RC_ok: + if (selected != PSI_RESET) + { + loop = false; + g_settings.psi_contrast = psi_list[PSI_CONTRAST].value; + g_settings.psi_saturation = psi_list[PSI_SATURATION].value; + g_settings.psi_brightness = psi_list[PSI_BRIGHTNESS].value; + g_settings.psi_tint = psi_list[PSI_TINT].value; + break; + } + /* fall through */ + case CRCInput::RC_red: + for (i = 0; i < PSI_RESET; i++) + { + psi_list[i].value = 128; + videoDecoder->SetControl(psi_list[i].control, psi_list[i].value); + paintSlider (i); + } + break; + default: + ; + } + } + + hide (); + + return res; +} + +void CPSISetup::hide () +{ + frameBuffer->paintBackgroundBoxRel (x, y, dx, dy); + frameBuffer->blit(); +} + +void CPSISetup::paint () +{ + for (int i = 0; i < PSI_SCALE_COUNT; i++) + paintSlider (i); +} + +void CPSISetup::paintSlider (int i) +{ + Font *f = g_Font[SNeutrinoSettings::FONT_TYPE_MENU]; + fb_pixel_t fg_col[] = { COL_MENUCONTENT_TEXT, COL_MENUHEAD_TEXT }; + + if (i < PSI_RESET) + { + psi_list[i].scale->setProgress(psi_list[i].x, psi_list[i].y + sliderOffset, SLIDERWIDTH, SLIDERHEIGHT, psi_list[i].value, 255); + psi_list[i].scale->paint(); + f->RenderString (psi_list[i].xLoc, psi_list[i].yLoc, locWidth, g_Locale->getText(psi_list[i].loc), fg_col[psi_list[i].selected]); + } + else + { + int fh = f->getHeight(); + f->RenderString (psi_list[i].x + 2 + fh + fh/8, psi_list[i].yLoc, dx - 2 - fh, g_Locale->getText(psi_list[i].loc), fg_col[psi_list[i].selected]); + frameBuffer->paintIcon (NEUTRINO_ICON_BUTTON_RED, psi_list[i].x + 2, psi_list[i].yLoc - fh + fh/4, 0, (6 * fh)/8); + } + needsBlit = true; +} + +bool CPSISetup::changeNotify (const neutrino_locale_t OptionName, void *Data) +{ + for (int i = 0; i < PSI_RESET; i++) + if (OptionName == psi_list[i].loc) + { + psi_list[i].value = *((int *) Data); + videoDecoder->SetControl(psi_list[i].control, psi_list[i].value); + return true; + } + return false; +} + +static CPSISetup *inst = NULL; + +CPSISetup *CPSISetup::getInstance() +{ + if (!inst) + inst = new CPSISetup(LOCALE_VIDEOMENU_PSI); + return inst; +} diff --git a/src/gui/psisetup.h b/src/gui/psisetup.h new file mode 100644 index 000000000..21cb92817 --- /dev/null +++ b/src/gui/psisetup.h @@ -0,0 +1,62 @@ +/* + (C)2012 by martii + + License: GPL + + 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 2 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#ifndef __psisetup__ +#define __psisetup__ + +#include +#include +#include +#include +#include + +class CPSISetup : public CMenuTarget, public CChangeObserver +{ + private: + CFrameBuffer * frameBuffer; + int x; + int y; + int dx; + int dy; + int width; + int locWidth; + int locHeight; + int lineHeight; + int sliderOffset; + int selected; + bool needsBlit; + neutrino_locale_t name; + + void paint (); + void setPSI (); + void paintSlider (int i); + // unsigned char readProcPSI(int); + CPSISetup (const neutrino_locale_t Name); + void writeProcPSI (); + void writeProcPSI (int); + + public: + int exec (CMenuTarget * parent, const std::string & actionKey); + void hide (); + void blankScreen (bool b = true); + bool changeNotify(const neutrino_locale_t, void *); + static CPSISetup *getInstance(); +}; +#endif diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index d6333de63..bd0a6c1e0 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -47,6 +47,9 @@ #include #include #include +#if HAVE_ARM_HARDWARE +#include +#endif #include #include @@ -530,7 +533,7 @@ int CVideoSettings::showVideoSetup() if (vs_videomodes_fw != NULL) videosetup->addItem(vs_videomodes_fw); //video modes submenue #ifdef BOXMODEL_CS_HD2 - videosetup->addItem(vs_automodes_fw); //video auto modes submenue + videosetup->addItem(vs_automodes_fw); //video auto modes submenue #endif #ifdef BOXMODEL_CS_HD2 @@ -561,6 +564,33 @@ int CVideoSettings::showVideoSetup() zm->setHint("", LOCALE_MENU_HINT_VIDEO_ZAPPINGMODE); videosetup->addItem(zm); } + +#if HAVE_ARM_HARDWARE + videosetup->addItem(new CMenuSeparator(CMenuSeparator::LINE | CMenuSeparator::STRING, LOCALE_VIDEOMENU_PSI)); + CMenuOptionNumberChooser *mc; + CPSISetup *psiSetup = CPSISetup::getInstance(); + + mc = new CMenuOptionNumberChooser(LOCALE_VIDEOMENU_PSI_STEP, (int *)&g_settings.psi_step, true, 1, 100, NULL); + mc->setHint("", LOCALE_MENU_HINT_VIDEO_PSI_STEP); + videosetup->addItem(mc); + + mc = new CMenuOptionNumberChooser(LOCALE_VIDEOMENU_PSI_CONTRAST, (int *)&g_settings.psi_contrast, true, 0, 255, psiSetup); + mc->setHint("", LOCALE_MENU_HINT_VIDEO_CONTRAST); + videosetup->addItem(mc); + + mc = new CMenuOptionNumberChooser(LOCALE_VIDEOMENU_PSI_SATURATION, (int *)&g_settings.psi_saturation, true, 0, 255, psiSetup); + mc->setHint("", LOCALE_MENU_HINT_VIDEO_SATURATION); + videosetup->addItem(mc); + + mc = new CMenuOptionNumberChooser(LOCALE_VIDEOMENU_PSI_BRIGHTNESS, (int *)&g_settings.psi_brightness, true, 0, 255, psiSetup); + mc->setHint("", LOCALE_MENU_HINT_VIDEO_BRIGHTNESS); + videosetup->addItem(mc); + + mc = new CMenuOptionNumberChooser(LOCALE_VIDEOMENU_PSI_TINT, (int *)&g_settings.psi_tint, true, 0, 255, psiSetup); + mc->setHint("", LOCALE_MENU_HINT_VIDEO_TINT); + videosetup->addItem(mc); +#endif + int res = videosetup->exec(NULL, ""); selected = videosetup->getSelected(); delete videosetup; diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 2dd03f6d0..cf70d0542 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -64,6 +64,9 @@ #include #include +#if HAVE_ARM_HARDWARE +#include "gui/psisetup.h" +#endif #include "gui/adzap.h" #include "gui/audiomute.h" #include "gui/audioplayer.h" @@ -417,6 +420,14 @@ int CNeutrinoApp::loadSetup(const char * fname) g_settings.hdmi_cec_standby = configfile.getInt32("hdmi_cec_standby", 0); // default off g_settings.hdmi_cec_volume = configfile.getInt32("hdmi_cec_volume", 0); +#if HAVE_ARM_HARDWARE + g_settings.psi_contrast = configfile.getInt32("video_psi_contrast", 128); + g_settings.psi_saturation = configfile.getInt32("video_psi_saturation", 128); + g_settings.psi_brightness = configfile.getInt32("video_psi_brightness", 128); + g_settings.psi_tint = configfile.getInt32("video_psi_tint", 128); + g_settings.psi_step = configfile.getInt32("video_psi_step", 2); +#endif + g_settings.video_Format = configfile.getInt32("video_Format", DISPLAY_AR_16_9); g_settings.video_43mode = configfile.getInt32("video_43mode", DISPLAY_AR_MODE_LETTERBOX); g_settings.current_volume = configfile.getInt32("current_volume", 60); //NI @@ -1463,6 +1474,14 @@ void CNeutrinoApp::saveSetup(const char * fname) configfile.setInt32( "hdmi_cec_standby", g_settings.hdmi_cec_standby ); configfile.setInt32( "hdmi_cec_volume", g_settings.hdmi_cec_volume ); +#if HAVE_ARM_HARDWARE + configfile.setInt32( "video_psi_contrast", g_settings.psi_contrast ); + configfile.setInt32( "video_psi_saturation", g_settings.psi_saturation ); + configfile.setInt32( "video_psi_brightness", g_settings.psi_brightness ); + configfile.setInt32( "video_psi_tint", g_settings.psi_tint ); + configfile.setInt32( "video_psi_step", g_settings.psi_step ); +#endif + if (!g_settings.hdmi_cec_volume) configfile.setInt32( "current_volume", g_settings.current_volume ); configfile.setInt32( "current_volume_step", g_settings.current_volume_step ); @@ -3004,6 +3023,9 @@ TIMER_START(); #endif //InitZapper(); +#if HAVE_ARM_HARDWARE + CPSISetup::getInstance()->blankScreen(false); +#endif SHTDCNT::getInstance()->init(); LCD4l = new CLCD4l(); diff --git a/src/system/locals.h b/src/system/locals.h index 6f8f8d368..adefc6c68 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -1887,9 +1887,11 @@ typedef enum LOCALE_MENU_HINT_VIDEO_MODES, LOCALE_MENU_HINT_VIDEO_MODES_AUTO, LOCALE_MENU_HINT_VIDEO_PIP, + LOCALE_MENU_HINT_VIDEO_PSI_STEP, LOCALE_MENU_HINT_VIDEO_SATURATION, LOCALE_MENU_HINT_VIDEO_SCART_MODE, LOCALE_MENU_HINT_VIDEO_SDOSD, + LOCALE_MENU_HINT_VIDEO_TINT, LOCALE_MENU_HINT_VIDEO_ZAPPINGMODE, LOCALE_MENU_HINT_VOLUME, LOCALE_MENU_HINT_VOLUME_DIGITS, @@ -1913,6 +1915,7 @@ typedef enum LOCALE_MENU_NEXT, LOCALE_MESSAGE_FRAME_ENABLE, LOCALE_MESSAGE_FRAME_ENABLE_HINT, + LOCALE_MESSAGEBOX_ACCEPT, LOCALE_MESSAGEBOX_BACK, LOCALE_MESSAGEBOX_CANCEL, LOCALE_MESSAGEBOX_DISCARD, @@ -2995,6 +2998,13 @@ typedef enum LOCALE_VIDEOMENU_PANSCAN2, LOCALE_VIDEOMENU_PIP, LOCALE_VIDEOMENU_PIP_ERROR, + LOCALE_VIDEOMENU_PSI, + LOCALE_VIDEOMENU_PSI_BRIGHTNESS, + LOCALE_VIDEOMENU_PSI_CONTRAST, + LOCALE_VIDEOMENU_PSI_RESET, + LOCALE_VIDEOMENU_PSI_SATURATION, + LOCALE_VIDEOMENU_PSI_STEP, + LOCALE_VIDEOMENU_PSI_TINT, LOCALE_VIDEOMENU_SATURATION, LOCALE_VIDEOMENU_SCART, LOCALE_VIDEOMENU_SCREENSETUP, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index bff24220d..49764403a 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -1887,9 +1887,11 @@ const char * locale_real_names[] = "menu.hint_video_modes", "menu.hint_video_modes_auto", "menu.hint_video_pip", + "menu.hint_video_psi_step", "menu.hint_video_saturation", "menu.hint_video_scart_mode", "menu.hint_video_sdosd", + "menu.hint_video_tint", "menu.hint_video_zappingmode", "menu.hint_volume", "menu.hint_volume_digits", @@ -1913,6 +1915,7 @@ const char * locale_real_names[] = "menu.next", "message.frame_enable", "message.frame_enable_hint", + "messagebox.accept", "messagebox.back", "messagebox.cancel", "messagebox.discard", @@ -2995,6 +2998,13 @@ const char * locale_real_names[] = "videomenu.panscan2", "videomenu.pip", "videomenu.pip_error", + "videomenu.psi", + "videomenu.psi.brightness", + "videomenu.psi.contrast", + "videomenu.psi.reset", + "videomenu.psi.saturation", + "videomenu.psi.step", + "videomenu.psi.tint", "videomenu.saturation", "videomenu.scart", "videomenu.screensetup", diff --git a/src/system/settings.h b/src/system/settings.h index 0896fedd5..e88ae1c30 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -294,6 +294,15 @@ struct SNeutrinoSettings int analog_mode1; int analog_mode2; int video_43mode; + +#if HAVE_ARM_HARDWARE + int psi_contrast; + int psi_saturation; + int psi_brightness; + int psi_tint; + int psi_step; +#endif + #ifdef BOXMODEL_CS_HD2 int brightness; int contrast;