diff --git a/acinclude.m4 b/acinclude.m4 index 264e5fefb..6e422347f 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -458,7 +458,7 @@ AC_ARG_WITH(boxtype, AC_ARG_WITH(boxmodel, AS_HELP_STRING([--with-boxmodel], [valid for generic: generic, raspi]) AS_HELP_STRING([], [valid for coolstream: hd1, hd2]) -AS_HELP_STRING([], [valid for armbox: hd60, hd61, hd51, bre2ze4k, h7, osmini4k, osmio4k, osmio4kplus, vusolo4k, vuduo4k, vuduo4kse, vuultimo4k, vuuno4k, vuuno4kse, vuzero4k]) +AS_HELP_STRING([], [valid for armbox: hd60, hd61, multiboxse, hd51, bre2ze4k, h7, osmini4k, osmio4k, osmio4kplus, vusolo4k, vuduo4k, vuduo4kse, vuultimo4k, vuuno4k, vuuno4kse, vuzero4k]) AS_HELP_STRING([], [valid for mipsbox: vuduo, vuduo2]), [case "${withval}" in generic|raspi) @@ -487,7 +487,7 @@ AS_HELP_STRING([], [valid for mipsbox: vuduo, vuduo2]), AC_MSG_ERROR([unknown model $withval for boxtype $BOXTYPE]) fi ;; - hd60|hd61|hd51|bre2ze4k|h7|osmini4k|osmio4k|osmio4kplus|vusolo4k|vuduo4k|vuduo4kse|vuultimo4k|vuuno4k|vuuno4kse|vuzero4k) + hd60|hd61|multiboxse|hd51|bre2ze4k|h7|osmini4k|osmio4k|osmio4kplus|vusolo4k|vuduo4k|vuduo4kse|vuultimo4k|vuuno4k|vuuno4kse|vuzero4k) if test "$BOXTYPE" = "armbox"; then BOXMODEL="$withval" else @@ -527,6 +527,7 @@ AM_CONDITIONAL(BOXMODEL_CST_HD2, test "$BOXMODEL" = "hd2") # armbox AM_CONDITIONAL(BOXMODEL_HD60, test "$BOXMODEL" = "hd60") AM_CONDITIONAL(BOXMODEL_HD61, test "$BOXMODEL" = "hd61") +AM_CONDITIONAL(BOXMODEL_MULTIBOXSE, test "$BOXMODEL" = "multiboxse") AM_CONDITIONAL(BOXMODEL_HD51, test "$BOXMODEL" = "hd51") AM_CONDITIONAL(BOXMODEL_BRE2ZE4K, test "$BOXMODEL" = "bre2ze4k") @@ -595,6 +596,8 @@ elif test "$BOXMODEL" = "hd60"; then AC_DEFINE(BOXMODEL_HD60, 1, [hd60]) elif test "$BOXMODEL" = "hd61"; then AC_DEFINE(BOXMODEL_HD61, 1, [hd61]) +elif test "$BOXMODEL" = "multiboxse"; then + AC_DEFINE(BOXMODEL_MULTIBOXSE, 1, [multiboxse]) elif test "$BOXMODEL" = "hd51"; then AC_DEFINE(BOXMODEL_HD51, 1, [hd51]) @@ -680,7 +683,7 @@ AM_CONDITIONAL(BOXMODEL_VUPLUS_MIPS, test "$vuplus_mips" = "true") # all hisilicon BOXMODELs case "$BOXMODEL" in - hd60|hd61) + hd60|hd61|multiboxse) AC_DEFINE(BOXMODEL_HISILICON, 1, [hisilicon]) hisilicon=true ;; @@ -692,7 +695,7 @@ AM_CONDITIONAL(BOXMODEL_HISILICON, test "$hisilicon" = "true") # BOXMODELs that allows to change osd resolution case "$BOXMODEL" in - hd2|hd60|hd61|hd51|bre2ze4k|h7|osmini4k|osmio4k|osmio4kplus|vusolo4k|vuduo4k|vuduo4kse|vuultimo4k|vuuno4k|vuuno4kse|vuzero4k|vuduo|vuduo2|gb800se|osnino|osninoplus|osninopro) + hd2|hd60|hd61|multiboxse|hd51|bre2ze4k|h7|osmini4k|osmio4k|osmio4kplus|vusolo4k|vuduo4k|vuduo4kse|vuultimo4k|vuuno4k|vuuno4kse|vuzero4k|vuduo|vuduo2|gb800se|osnino|osninoplus|osninopro) AC_DEFINE(ENABLE_CHANGE_OSD_RESOLUTION, 1, [enable to change osd resolution]) ;; esac diff --git a/data/y-web/Y_Blocks.txt b/data/y-web/Y_Blocks.txt index 4f83fcc18..422800cd2 100644 --- a/data/y-web/Y_Blocks.txt +++ b/data/y-web/Y_Blocks.txt @@ -545,10 +545,11 @@ start-block~rc_variables {=var-set:_rc_vuplus_uno4kse=17=} {=var-set:_rc_vuplus_zero4k=18=} {=var-set:_rc_vuplus_duo=19=} -{=var-set:_rc_zgemma_h7=20=} +{=var-set:_rc_airdigital_zgemma_h7=20=} {=var-set:_rc_ax_hd60=21=} {=var-set:_rc_mutant_hd60=22=} {=var-set:_rc_ax_hd61=23=} +{=var-set:_rc_maxytec_multiboxse=24=} end-block~rc_variables # ------- Remote @@ -584,39 +585,41 @@ start-block~remote {=if-equal:{=var-get:boxtype=}~AX HD60~ {=include-block:Y_Blocks.txt;rc_ax_hd51=}~ {=if-equal:{=var-get:boxtype=}~Mutant HD60~ {=include-block:Y_Blocks.txt;rc_mutant_hd60=}~ {=if-equal:{=var-get:boxtype=}~AX HD61~ {=include-block:Y_Blocks.txt;rc_ax_hd61=}~ + {=if-equal:{=var-get:boxtype=}~Maxytec Multibox SE 4K~ {=include-block:Y_Blocks.txt;rc_mutant_hd60=}~ {=comment:fallback~=} {=include-block:Y_Blocks.txt;rc_cst_v1=} - =}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=} + =}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=} =}=} ~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_dbox_philips=}~ {=include-block:Y_Blocks.txt;rc_dbox_philips=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_dbox_nokia_old=}~ {=include-block:Y_Blocks.txt;rc_dbox_nokia_old=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_neo=}~ {=include-block:Y_Blocks.txt;rc_cst_v1=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_zee=}~ {=include-block:Y_Blocks.txt;rc_cst_v2=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_neo2=}~ {=include-block:Y_Blocks.txt;rc_cst_v3=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_tank=}~ {=include-block:Y_Blocks.txt;rc_cst_v4=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_trinity=}~ {=include-block:Y_Blocks.txt;rc_cst_v5=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_zee2=}~ {=include-block:Y_Blocks.txt;rc_cst_v6=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_link=}~ {=include-block:Y_Blocks.txt;rc_cst_v4=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_trinity_duo=}~ {=include-block:Y_Blocks.txt;rc_cst_v6=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_ax_hd51=}~ {=include-block:Y_Blocks.txt;rc_ax_hd51=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_mutant_hd51=}~ {=include-block:Y_Blocks.txt;rc_mutant_hd51=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_wwio_breeze4k=}~ {=include-block:Y_Blocks.txt;rc_wwio_bre2ze4k=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_solo4k=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_duo4k=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_duo4kse=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_ultimo4k=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_uno4k=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_uno4kse=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_zero4k=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_duo=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_zgemma_h7=}~ {=include-block:Y_Blocks.txt;rc_zgemma_h7=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_ax_hd60=}~ {=include-block:Y_Blocks.txt;rc_ax_hd51=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_mutant_hd60=}~ {=include-block:Y_Blocks.txt;rc_mutant_hd60=}~ - {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_ax_hd61=}~ {=include-block:Y_Blocks.txt;rc_ax_hd61=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_dbox_philips=}~ {=include-block:Y_Blocks.txt;rc_dbox_philips=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_dbox_nokia_old=}~ {=include-block:Y_Blocks.txt;rc_dbox_nokia_old=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_neo=}~ {=include-block:Y_Blocks.txt;rc_cst_v1=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_zee=}~ {=include-block:Y_Blocks.txt;rc_cst_v2=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_neo2=}~ {=include-block:Y_Blocks.txt;rc_cst_v3=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_tank=}~ {=include-block:Y_Blocks.txt;rc_cst_v4=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_trinity=}~ {=include-block:Y_Blocks.txt;rc_cst_v5=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_zee2=}~ {=include-block:Y_Blocks.txt;rc_cst_v6=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_link=}~ {=include-block:Y_Blocks.txt;rc_cst_v4=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_cst_trinity_duo=}~ {=include-block:Y_Blocks.txt;rc_cst_v6=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_ax_hd51=}~ {=include-block:Y_Blocks.txt;rc_ax_hd51=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_mutant_hd51=}~ {=include-block:Y_Blocks.txt;rc_mutant_hd51=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_wwio_breeze4k=}~ {=include-block:Y_Blocks.txt;rc_wwio_bre2ze4k=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_solo4k=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_duo4k=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_duo4kse=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_ultimo4k=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_uno4k=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_uno4kse=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_zero4k=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_vuplus_duo=}~ {=include-block:Y_Blocks.txt;rc_vuplus=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_airdigital_zgemma_h7=}~ {=include-block:Y_Blocks.txt;rc_zgemma_h7=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_ax_hd60=}~ {=include-block:Y_Blocks.txt;rc_ax_hd51=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_mutant_hd60=}~ {=include-block:Y_Blocks.txt;rc_mutant_hd60=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_ax_hd61=}~ {=include-block:Y_Blocks.txt;rc_ax_hd61=}~ + {=if-equal:{=var-get:yfbtype=}~{=var-get:_rc_maxytec_multiboxse=}~ {=include-block:Y_Blocks.txt;rc_mutant_hd60=}~ - {=comment:fallback~=} {=include-block:Y_Blocks.txt;rc_cst_v1=} - =}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=} + {=comment:fallback~=} {=include-block:Y_Blocks.txt;rc_cst_v1=} + =}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=}=} =} end-block~remote @@ -1297,7 +1300,7 @@ start-block~rc_zgemma_h7 end-block~rc_zgemma_h7 -# ------ Remote Mutant HD60 +# ------ Remote Mutant HD60, Maxytec Multibox SE 4K start-block~rc_mutant_hd60 diff --git a/data/y-web/Y_Settings_yWeb.yhtm b/data/y-web/Y_Settings_yWeb.yhtm index 32b0f30c8..6e61d47c3 100644 --- a/data/y-web/Y_Settings_yWeb.yhtm +++ b/data/y-web/Y_Settings_yWeb.yhtm @@ -157,10 +157,11 @@ select { - + + - + diff --git a/lib/hardware/coolstream/hardware_caps.cpp b/lib/hardware/coolstream/hardware_caps.cpp index 9fc2bb13e..d5f7fbdb0 100644 --- a/lib/hardware/coolstream/hardware_caps.cpp +++ b/lib/hardware/coolstream/hardware_caps.cpp @@ -14,17 +14,21 @@ static int initialized = 0; static hw_caps_t caps; -hw_caps_t *get_hwcaps(void) { +hw_caps_t *get_hwcaps(void) +{ if (initialized) return ∩︀ + int rev = cs_get_revision(); int chip = cs_get_chip_type(); + caps.has_fan = (rev < 8); // see dirty part of hw_caps in neutrino.cpp caps.has_HDMI = 1; caps.has_HDMI_input = 0; caps.has_SCART = (rev != 10); caps.has_SCART_input = 0; caps.has_YUV_cinch = 1; + caps.can_pip = 1; caps.can_cpufreq = (rev < 9); caps.can_shutdown = (rev > 7); caps.can_cec = 1; @@ -98,6 +102,7 @@ hw_caps_t *get_hwcaps(void) { strcpy(caps.boxarch, "Unknown"); fprintf(stderr, "[%s] unhandled box revision %d\n", __func__, rev); } + initialized = 1; return ∩︀ } diff --git a/lib/hardware/coolstream/hardware_caps.h b/lib/hardware/coolstream/hardware_caps.h index cacd52ee1..9ebac9a30 100644 --- a/lib/hardware/coolstream/hardware_caps.h +++ b/lib/hardware/coolstream/hardware_caps.h @@ -27,6 +27,7 @@ typedef struct hw_caps int has_SCART; int has_SCART_input; int has_YUV_cinch; + int can_pip; int can_cpufreq; int can_shutdown; int can_cec; diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 88148612b..2632ee0d9 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -1757,7 +1757,7 @@ int CRCInput::translate(int code) case KEY_CHANNELDOWN: return RC_page_down; #if HAVE_ARM_HARDWARE || HAVE_MIPS_HARDWARE -#if BOXMODEL_HD51 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 +#if BOXMODEL_HD51 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_MULTIBOXSE case KEY_VIDEO: return RC_favorites; case KEY_TV2: diff --git a/src/gui/videosettings.cpp b/src/gui/videosettings.cpp index 4869dc231..73cfabff8 100644 --- a/src/gui/videosettings.cpp +++ b/src/gui/videosettings.cpp @@ -285,7 +285,7 @@ CMenuOptionChooser::keyval_ext VIDEOMENU_VIDEOMODE_OPTIONS[VIDEOMENU_VIDEOMODE_O { -1, NONEXISTANT_LOCALE, "2160p 50Hz" }, { -1, NONEXISTANT_LOCALE, "Auto" } }; -#elif BOXMODEL_HD51 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_H7 || BOXMODEL_BRE2ZE4K || BOXMODEL_VUPLUS_ALL +#elif BOXMODEL_HD51 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_MULTIBOXSE || BOXMODEL_VUPLUS_ALL CMenuOptionChooser::keyval_ext VIDEOMENU_VIDEOMODE_OPTIONS[VIDEOMENU_VIDEOMODE_OPTION_COUNT] = { { -1, NONEXISTANT_LOCALE, "NTSC" }, @@ -530,7 +530,7 @@ int CVideoSettings::showVideoSetup() #endif #ifdef ENABLE_PIP CPipSetup pip; - CMenuForwarder * pipsetup = new CMenuForwarder(LOCALE_VIDEOMENU_PIP, true, NULL, &pip); + CMenuForwarder * pipsetup = new CMenuForwarder(LOCALE_VIDEOMENU_PIP, g_info.hw_caps->can_pip, NULL, &pip); pipsetup->setHint("", LOCALE_MENU_HINT_VIDEO_PIP); videosetup->addItem(pipsetup); #endif @@ -690,7 +690,8 @@ bool CVideoSettings::changeNotify(const neutrino_locale_t OptionName, void * /* g_Zapit->setMode43(g_settings.video_43mode); videoDecoder->setAspectRatio(g_settings.video_Format, -1); #ifdef ENABLE_PIP - pipDecoder->setAspectRatio(g_settings.video_Format, g_settings.video_43mode); + if (pipDecoder != NULL) + pipDecoder->setAspectRatio(g_settings.video_Format, g_settings.video_43mode); #endif } else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_VIDEOMENU_VIDEOMODE)) @@ -758,7 +759,8 @@ void CVideoSettings::next43Mode(void) g_settings.video_43mode = videomenu_43mode_options[curmode].key; g_Zapit->setMode43(g_settings.video_43mode); #ifdef ENABLE_PIP - pipDecoder->setAspectRatio(-1, g_settings.video_43mode); + if (pipDecoder != NULL) + pipDecoder->setAspectRatio(-1, g_settings.video_43mode); #endif ShowHint(LOCALE_VIDEOMENU_43MODE, g_Locale->getText(text), 450, 2); } @@ -785,7 +787,8 @@ void CVideoSettings::SwitchFormat() videoDecoder->setAspectRatio(g_settings.video_Format, -1); #ifdef ENABLE_PIP - pipDecoder->setAspectRatio(g_settings.video_Format, -1); + if (pipDecoder != NULL) + pipDecoder->setAspectRatio(g_settings.video_Format, -1); #endif ShowHint(LOCALE_VIDEOMENU_VIDEOFORMAT, g_Locale->getText(text), 450, 2); } diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 89f77154d..60252d765 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -344,7 +344,7 @@ static SNeutrinoSettings::usermenu_t usermenu_default[] = { { CRCInput::RC_green, "6", "", "green" }, { CRCInput::RC_yellow, "7,35", "", "yellow" }, { CRCInput::RC_blue, "27,28,21,20,1,39,10,11,24,19,14", "", "blue" }, -#if BOXMODEL_HD51 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 +#if BOXMODEL_HD51 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_MULTIBOXSE { CRCInput::RC_playpause, "9", "", "5" }, #else { CRCInput::RC_play, "9", "", "5" }, @@ -3422,7 +3422,7 @@ void CNeutrinoApp::RealRun() CRecordManager::getInstance()->StartTimeshift(); } #ifdef ENABLE_PIP - else if (msg == (neutrino_msg_t) g_settings.key_pip_close) { + else if ((msg == (neutrino_msg_t) g_settings.key_pip_close) && g_info.hw_caps->can_pip) { int boxmode = getBoxMode(); if (boxmode > -1 && boxmode != 12) ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_BOXMODE12_NOT_ACTIVATED, CMsgBox::mbrOk, CMsgBox::mbOk, NEUTRINO_ICON_ERROR); @@ -3436,7 +3436,7 @@ void CNeutrinoApp::RealRun() } } #if !HAVE_CST_HARDWARE && !HAVE_GENERIC_HARDWARE - else if ((msg == (neutrino_msg_t) g_settings.key_pip_close_avinput) && ((g_info.hw_caps->has_SCART_input) || (g_info.hw_caps->has_HDMI_input))) { + else if ((msg == (neutrino_msg_t) g_settings.key_pip_close_avinput) && ((g_info.hw_caps->has_SCART_input) || (g_info.hw_caps->has_HDMI_input)) && g_info.hw_caps->can_pip) { int boxmode = getBoxMode(); if (boxmode > -1 && boxmode != 12) ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_BOXMODE12_NOT_ACTIVATED, CMsgBox::mbrOk, CMsgBox::mbOk, NEUTRINO_ICON_ERROR); @@ -3452,11 +3452,11 @@ void CNeutrinoApp::RealRun() } } #endif - else if (msg == (neutrino_msg_t) g_settings.key_pip_setup) { + else if ((msg == (neutrino_msg_t) g_settings.key_pip_setup) && g_info.hw_caps->can_pip) { CPipSetup pipsetup; pipsetup.exec(NULL, ""); } - else if (msg == (neutrino_msg_t) g_settings.key_pip_swap) { + else if ((msg == (neutrino_msg_t) g_settings.key_pip_swap) && g_info.hw_caps->can_pip) { t_channel_id pip_channel_id = CZapit::getInstance()->GetPipChannelID(); t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); if (pip_channel_id && (pip_channel_id != live_channel_id)) { @@ -4826,9 +4826,12 @@ void CNeutrinoApp::tvMode( bool rezap ) } #ifdef ENABLE_PIP - pipDecoder->Pig(g_settings.pip_x, g_settings.pip_y, + if (g_info.hw_caps->can_pip) + { + pipDecoder->Pig(g_settings.pip_x, g_settings.pip_y, g_settings.pip_width, g_settings.pip_height, frameBuffer->getScreenWidth(true), frameBuffer->getScreenHeight(true)); + } #endif #if 0 if(mode != NeutrinoModes::mode_ts /*&& autoshift*/) { @@ -5107,9 +5110,12 @@ void CNeutrinoApp::radioMode( bool rezap) } #ifdef ENABLE_PIP - pipDecoder->Pig(g_settings.pip_radio_x, g_settings.pip_radio_y, + if (g_info.hw_caps->can_pip) + { + pipDecoder->Pig(g_settings.pip_radio_x, g_settings.pip_radio_y, g_settings.pip_radio_width, g_settings.pip_radio_height, frameBuffer->getScreenWidth(true), frameBuffer->getScreenHeight(true)); + } #endif CRecordManager::getInstance()->StopAutoRecord(); @@ -5173,6 +5179,9 @@ void CNeutrinoApp::switchTvRadioMode(const int prev_mode) #ifdef ENABLE_PIP #if !HAVE_CST_HARDWARE && !HAVE_GENERIC_HARDWARE void CNeutrinoApp::StartAVInputPiP() { + if (!g_info.hw_caps->can_pip) + return; + if (!pipDemux) { pipDemux = new cDemux(1); pipDemux->Open(DMX_PIP_CHANNEL); @@ -5191,6 +5200,9 @@ void CNeutrinoApp::StartAVInputPiP() { } void CNeutrinoApp::StopAVInputPiP() { + if (!g_info.hw_caps->can_pip) + return; + pipDecoder->ShowPig(0); pipDemux->Stop(); pipDecoder->Stop(); @@ -5673,7 +5685,7 @@ void CNeutrinoApp::loadKeys(const char * fname) g_settings.key_list_start = tconfig->getInt32( "key_list_start", (unsigned int)CRCInput::RC_nokey ); g_settings.key_list_end = tconfig->getInt32( "key_list_end", (unsigned int)CRCInput::RC_nokey ); -#if BOXMODEL_HD51 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 || BOXMODEL_OSMIO4K || BOXMODEL_OSMIO4KPLUS +#if BOXMODEL_HD51 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_MULTIBOXSE || BOXMODEL_OSMIO4K || BOXMODEL_OSMIO4KPLUS g_settings.key_timeshift = tconfig->getInt32( "key_timeshift", CRCInput::RC_nokey ); // FIXME #elif BOXMODEL_VUPLUS_ALL g_settings.key_timeshift = tconfig->getInt32( "key_timeshift", CRCInput::RC_playpause ); @@ -5709,7 +5721,7 @@ void CNeutrinoApp::loadKeys(const char * fname) g_settings.mpkey_rewind = tconfig->getInt32( "mpkey.rewind", CRCInput::RC_rewind ); g_settings.mpkey_forward = tconfig->getInt32( "mpkey.forward", CRCInput::RC_forward ); g_settings.mpkey_stop = tconfig->getInt32( "mpkey.stop", CRCInput::RC_stop ); -#if BOXMODEL_HD51 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 +#if BOXMODEL_HD51 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_MULTIBOXSE g_settings.mpkey_play = tconfig->getInt32( "mpkey.play", CRCInput::RC_playpause ); g_settings.mpkey_pause = tconfig->getInt32( "mpkey.pause", CRCInput::RC_playpause ); #elif BOXMODEL_VUPLUS_ALL @@ -5979,6 +5991,9 @@ void CNeutrinoApp::getAnnounceEpgName(CTimerd::RecordingInfo * eventinfo, std::s bool CNeutrinoApp::StartPip(const t_channel_id channel_id) { bool ret = false; + if (!g_info.hw_caps->can_pip) + return ret; + CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(channel_id); if (!channel) return ret; diff --git a/src/neutrino_menue.cpp b/src/neutrino_menue.cpp index 583075145..bb6157139 100644 --- a/src/neutrino_menue.cpp +++ b/src/neutrino_menue.cpp @@ -174,7 +174,7 @@ void CNeutrinoApp::InitMenuMain() personalize.addItem(MENU_MAIN, avinputmode, &g_settings.personalize[SNeutrinoSettings::P_MAIN_AVINPUT]); #ifdef ENABLE_PIP - CMenuForwarder *avinputmode_pip = new CMenuForwarder(LOCALE_MAINMENU_AVINPUTMODE_PIP, true, NULL, this, "avinput_pip"); + CMenuForwarder *avinputmode_pip = new CMenuForwarder(LOCALE_MAINMENU_AVINPUTMODE_PIP, g_info.hw_caps->can_pip, NULL, this, "avinput_pip"); avinputmode_pip->setHint(NEUTRINO_ICON_HINT_AVINPUTMODE_PIP, LOCALE_MENU_HINT_AVINPUTMODE_PIP); personalize.addItem(MENU_MAIN, avinputmode_pip, &g_settings.personalize[SNeutrinoSettings::P_MAIN_AVINPUT_PIP]); #endif diff --git a/src/nhttpd/tuxboxapi/controlapi.cpp b/src/nhttpd/tuxboxapi/controlapi.cpp index 28f7e8c4b..fd35b5348 100644 --- a/src/nhttpd/tuxboxapi/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/controlapi.cpp @@ -899,7 +899,7 @@ unsigned int revert_translate(unsigned int code) case RC_page_down: return KEY_CHANNELDOWN; #ifdef HAVE_ARM_HARDWARE -#if BOXMODEL_HD51 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 || BOXMODEL_OSMIO4K || BOXMODEL_OSMIO4KPLUS +#if BOXMODEL_HD51 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_MULTIBOXSE || BOXMODEL_OSMIO4K || BOXMODEL_OSMIO4KPLUS case RC_favorites: return KEY_VIDEO; #endif diff --git a/src/system/helpers.cpp b/src/system/helpers.cpp index 0f5b25283..e585910cc 100644 --- a/src/system/helpers.cpp +++ b/src/system/helpers.cpp @@ -2108,7 +2108,7 @@ int getActivePartition() } fclose(f); } -#elif BOXMODEL_HD51 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 || BOXMODEL_OSMIO4K || BOXMODEL_OSMIO4KPLUS +#elif BOXMODEL_HD51 || BOXMODEL_BRE2ZE4K || BOXMODEL_H7 || BOXMODEL_HD60 || BOXMODEL_HD61 || BOXMODEL_MULTIBOXSE || BOXMODEL_OSMIO4K || BOXMODEL_OSMIO4KPLUS FILE *f; // first check for subdirboot layout f = fopen("/sys/firmware/devicetree/base/chosen/bootargs", "r"); diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index 3f51fa9a9..51566ff9d 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -667,6 +667,9 @@ bool CZapit::ZapIt(const t_channel_id channel_id, bool forupdate, bool startplay #ifdef ENABLE_PIP bool CZapit::StopPip() { + if (!g_info.hw_caps->can_pip) + return false; + #if !HAVE_CST_HARDWARE && !HAVE_GENERIC_HARDWARE if (CNeutrinoApp::getInstance()->avinput_pip) { CNeutrinoApp::getInstance()->StopAVInputPiP(); @@ -690,6 +693,9 @@ bool CZapit::StopPip() bool CZapit::StartPip(const t_channel_id channel_id) { + if (!g_info.hw_caps->can_pip) + return false; + CZapitChannel* newchannel; bool transponder_change; /* do lock if live is running, or in record mode - @@ -2577,10 +2583,13 @@ bool CZapit::Start(Z_start_arg *ZapStart_arg) audioDecoder->SetVideo(videoDecoder); #ifdef ENABLE_PIP - pipDemux = new cDemux(dnum); - pipDemux->Open(DMX_PIP_CHANNEL); - pipDecoder = cVideo::GetDecoder(1); - pipDecoder->SetDemux(pipDemux); + if (g_info.hw_caps->can_pip) + { + pipDemux = new cDemux(dnum); + pipDemux->Open(DMX_PIP_CHANNEL); + pipDecoder = cVideo::GetDecoder(1); + pipDecoder->SetDemux(pipDemux); + } #endif #else #if HAVE_CST_HARDWARE @@ -2595,14 +2604,17 @@ bool CZapit::Start(Z_start_arg *ZapStart_arg) audioDecoder = new cAudio(audioDemux->getBuffer(), videoDecoder->GetTVEnc(), NULL /*videoDecoder->GetTVEncSD()*/); #ifdef ENABLE_PIP + if (g_info.hw_caps->can_pip) + { #if HAVE_CST_HARDWARE - pipDemux = new cDemux(dnum); - pipDemux->Open(DMX_PIP_CHANNEL); - pipDecoder = new cVideo(video_mode, pipDemux->getChannel(), pipDemux->getBuffer(), 1); + pipDemux = new cDemux(dnum); + pipDemux->Open(DMX_PIP_CHANNEL); + pipDecoder = new cVideo(video_mode, pipDemux->getChannel(), pipDemux->getBuffer(), 1); #else - pipDecoder = new cVideo(0, NULL, NULL, 1); - pipDecoder->ShowPig(0); + pipDecoder = new cVideo(0, NULL, NULL, 1); + pipDecoder->ShowPig(0); #endif + } #endif #endif @@ -2818,8 +2830,10 @@ void CZapit::run() delete audioDemux; #ifdef ENABLE_PIP StopPip(); - delete pipDecoder; - delete pipDemux; + if (pipDecoder) + delete pipDecoder; + if (pipDemux) + delete pipDemux; #endif INFO("demuxes/decoders deleted");