diff --git a/data/locale/deutsch.locale b/data/locale/deutsch.locale index 130d2832c..4e74ac40f 100644 --- a/data/locale/deutsch.locale +++ b/data/locale/deutsch.locale @@ -565,6 +565,7 @@ extra.key_next43mode Nächstes Seitenformat extra.key_pic_mode Bildschirmformat extra.key_pic_size 4:3 Anzeigeverhalten extra.key_pip_close Stop/Start PiP +extra.key_pip_close_avinput Stop/Start PiP (HDMI) extra.key_pip_setup PiP Konfiguration extra.key_pip_swap Umschalten PiP/live extra.key_record Aufnahme @@ -1257,6 +1258,8 @@ mainmenu.reboot Neustart mainmenu.recording Aufnehmen mainmenu.recording_start Start mainmenu.recording_stop Stopp +mainmenu.avinputmode HDMI-Eingang (Modus) +mainmenu.avinputmode_pip HDMI-Eingang (PiP) mainmenu.scripts Skripte mainmenu.service Service mainmenu.settings Einstellungen diff --git a/data/locale/english.locale b/data/locale/english.locale index ebea12996..989da8258 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -565,6 +565,7 @@ extra.key_next43mode Next aspect ratio extra.key_pic_mode Screen format extra.key_pic_size 4:3 Display behavior extra.key_pip_close Stop/Start PiP +extra.key_pip_close_avinput Stop/Start PiP (HDMI) extra.key_pip_setup Configure PiP extra.key_pip_swap Swap PiP/live extra.key_record Record @@ -1257,6 +1258,8 @@ mainmenu.reboot Reboot mainmenu.recording Recording mainmenu.recording_start Start mainmenu.recording_stop Stop +mainmenu.avinputmode HDMI Input (Mode) +mainmenu.avinputmode_pip HDMI Input (PiP) mainmenu.scripts Scripts mainmenu.service Installation (service) mainmenu.settings System settings diff --git a/lib/libtuxtxt/tuxtxt.cpp b/lib/libtuxtxt/tuxtxt.cpp index 23050fdbd..1950243aa 100644 --- a/lib/libtuxtxt/tuxtxt.cpp +++ b/lib/libtuxtxt/tuxtxt.cpp @@ -1716,7 +1716,7 @@ int tuxtx_main(int pid, int page, int source) case RC_TEXT: break; - case RC_HELP: /* switch to scart input and back */ + case RC_HELP: /* switch to hdmi input and back */ { continue; /* otherwise ignore exit key */ } diff --git a/src/driver/glcd/glcd.cpp b/src/driver/glcd/glcd.cpp index dfbbce87f..bbf33c484 100644 --- a/src/driver/glcd/glcd.cpp +++ b/src/driver/glcd/glcd.cpp @@ -1769,3 +1769,25 @@ std::string cGLCD::GetConfigName(int driver) driver = 0; return GLCD::Config.driverConfigs[driver].name; } + +void cGLCD::AVInputMode(bool b) +{ + if (cglcd) + { + bool mo = cglcd->doMirrorOSD; + if (b) + { + cglcd->doScrollChannel = false; + cglcd->doScrollEpg = false; + cglcd->MirrorOSD(false); + cglcd->lockChannel(g_info.hw_caps->boxname, g_Locale->getText(LOCALE_MAINMENU_AVINPUTMODE), 0); + } + else + { + cglcd->doScrollChannel = true; + cglcd->doScrollEpg = true; + cglcd->MirrorOSD(mo); + cglcd->unlockChannel(); + } + } +} diff --git a/src/driver/glcd/glcd.h b/src/driver/glcd/glcd.h index bba426a2a..0de4d13e3 100644 --- a/src/driver/glcd/glcd.h +++ b/src/driver/glcd/glcd.h @@ -230,6 +230,7 @@ class cGLCD static void TogglePower(); int GetConfigSize(); std::string GetConfigName(int); + static void AVInputMode(bool); bool dumpBuffer(fb_pixel_t *s, int format, const char *filename); void UpdateBrightness(); int handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data); diff --git a/src/driver/lcd4l.cpp b/src/driver/lcd4l.cpp index 358a27c99..171d80c63 100644 --- a/src/driver/lcd4l.cpp +++ b/src/driver/lcd4l.cpp @@ -678,6 +678,11 @@ void CLCD4l::ParseInfo(uint64_t parseID, bool newID, bool firstRun) { Service = g_Locale->getText(LOCALE_PICTUREVIEWER_HEAD); } + else if (parseID == NeutrinoModes::mode_avinput) + { + Logo = LCD_ICONSDIR "/avinput" ICONSEXT; + Service = g_Locale->getText(LOCALE_MAINMENU_AVINPUTMODE); + } else if (parseID == NeutrinoModes::mode_ts) { if (ModeTshift) diff --git a/src/driver/lcdd.cpp b/src/driver/lcdd.cpp index 6b64ffb68..d6712a7ad 100644 --- a/src/driver/lcdd.cpp +++ b/src/driver/lcdd.cpp @@ -664,7 +664,7 @@ void CLCD::showVolume(const char vol, const bool perform_update) if ( ((mode == MODE_TVRADIO) && (g_settings.lcd_setting[SNeutrinoSettings::LCD_SHOW_VOLUME])) || ((mode == MODE_MOVIE) && (g_settings.lcd_setting[SNeutrinoSettings::LCD_SHOW_VOLUME])) || - (mode == MODE_SCART) || + (mode == MODE_AVINPUT) || (mode == MODE_AUDIO) ) { @@ -956,8 +956,12 @@ void CLCD::setMode(const MODES m, const char * const title) showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ break; } - case MODE_SCART: - display.load_screen(&(background[BACKGROUND_LCD])); + case MODE_AVINPUT: + display.clear_screen(); // clear lcd + drawBanner(); + display.load_screen_element(&(element[ELEMENT_SCART]), (lcd_width-element[ELEMENT_SCART].header.width)/2, 12); + display.load_screen_element(&(element[ELEMENT_SPEAKER]), 0, lcd_height-element[ELEMENT_SPEAKER].header.height-1); + showVolume(volume, false); showclock = true; showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ diff --git a/src/driver/lcdd.h b/src/driver/lcdd.h index 874a075f2..bedab8d7e 100644 --- a/src/driver/lcdd.h +++ b/src/driver/lcdd.h @@ -126,7 +126,7 @@ class CLCD enum MODES { MODE_TVRADIO, - MODE_SCART, + MODE_AVINPUT, MODE_SHUTDOWN, MODE_STANDBY, MODE_MENU_UTF8, diff --git a/src/driver/simple_display.h b/src/driver/simple_display.h index 6e7480608..5714380b6 100644 --- a/src/driver/simple_display.h +++ b/src/driver/simple_display.h @@ -115,7 +115,7 @@ class CLCD enum MODES { MODE_TVRADIO, - MODE_SCART, + MODE_AVINPUT, MODE_SHUTDOWN, MODE_STANDBY, MODE_MENU_UTF8, diff --git a/src/driver/vfd.cpp b/src/driver/vfd.cpp index 6e72e73e4..5af4f7825 100644 --- a/src/driver/vfd.cpp +++ b/src/driver/vfd.cpp @@ -618,7 +618,7 @@ void CVFD::setMode(const MODES m, const char * const title) //showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ break; } - case MODE_SCART: + case MODE_AVINPUT: showVolume(volume, false); showclock = true; //showTime(); /* "showclock = true;" implies that "showTime();" does a "displayUpdate();" */ diff --git a/src/driver/vfd.h b/src/driver/vfd.h index 5f5d5bf74..2a6eefbfb 100644 --- a/src/driver/vfd.h +++ b/src/driver/vfd.h @@ -52,7 +52,7 @@ class CVFD enum MODES { MODE_TVRADIO, - MODE_SCART, + MODE_AVINPUT, MODE_SHUTDOWN, MODE_STANDBY, MODE_MENU_UTF8, diff --git a/src/gui/audiomute.cpp b/src/gui/audiomute.cpp index 803da7024..10b0e30d5 100644 --- a/src/gui/audiomute.cpp +++ b/src/gui/audiomute.cpp @@ -77,7 +77,7 @@ void CAudioMute::AudioMute(int newValue, bool isEvent) #endif g_Zapit->muteAudio(newValue); - if( isEvent && ( neutrino->getMode() != NeutrinoModes::mode_scart ) && ( neutrino->getMode() != NeutrinoModes::mode_pic)) + if (isEvent && (neutrino->getMode() != NeutrinoModes::mode_avinput) && (neutrino->getMode() != NeutrinoModes::mode_pic)) { if (doInit) CVolumeHelper::getInstance()->refresh(); diff --git a/src/gui/keybind_setup.cpp b/src/gui/keybind_setup.cpp index 66c053142..ebf96eca4 100644 --- a/src/gui/keybind_setup.cpp +++ b/src/gui/keybind_setup.cpp @@ -212,6 +212,7 @@ const key_settings_struct_t key_settings[CKeybindSetup::KEYBINDS_COUNT] = {LOCALE_EXTRA_KEY_SWITCHFORMAT, &g_settings.key_switchformat, NONEXISTANT_LOCALE}, {LOCALE_EXTRA_KEY_SCREENSHOT, &g_settings.key_screenshot, LOCALE_MENU_HINT_KEY_SCREENSHOT }, {LOCALE_EXTRA_KEY_PIP_CLOSE, &g_settings.key_pip_close, LOCALE_MENU_HINT_KEY_PIP_CLOSE }, + {LOCALE_EXTRA_KEY_PIP_CLOSE_AVINPUT, &g_settings.key_pip_close_avinput, NONEXISTANT_LOCALE /*LOCALE_MENU_HINT_KEY_PIP_CLOSE_AVINPUT*/ }, {LOCALE_EXTRA_KEY_PIP_SETUP, &g_settings.key_pip_setup, LOCALE_MENU_HINT_KEY_PIP_SETUP }, {LOCALE_EXTRA_KEY_PIP_SWAP, &g_settings.key_pip_swap, LOCALE_MENU_HINT_KEY_PIP_CLOSE }, {LOCALE_EXTRA_KEY_FORMAT_MODE, &g_settings.key_format_mode_active, LOCALE_MENU_HINT_KEY_FORMAT_MODE_ACTIVE }, @@ -459,6 +460,9 @@ void CKeybindSetup::showKeyBindSetup(CMenuWidget *bindSettings) // pip mf = new CMenuForwarder(key_settings[NKEY_PIP_CLOSE].keydescription, true, keychooser[NKEY_PIP_CLOSE]->getKeyName(), keychooser[NKEY_PIP_CLOSE]); mf->setHint("", key_settings[NKEY_PIP_CLOSE].hint); + bindSettings->addItem(mf); + mf = new CMenuForwarder(key_settings[NKEY_PIP_CLOSE_AVINPUT].keydescription, true, keychooser[NKEY_PIP_CLOSE_AVINPUT]->getKeyName(), keychooser[NKEY_PIP_CLOSE_AVINPUT]); +// mf->setHint("", key_settings[NKEY_PIP_CLOSE_AVINPUT].hint); bindSettings->addItem(mf); mf = new CMenuForwarder(key_settings[NKEY_PIP_SETUP].keydescription, true, keychooser[NKEY_PIP_SETUP]->getKeyName(), keychooser[NKEY_PIP_SETUP]); mf->setHint("", key_settings[NKEY_PIP_SETUP].hint); diff --git a/src/gui/keybind_setup.h b/src/gui/keybind_setup.h index 3c6e9bce4..d016c85ad 100644 --- a/src/gui/keybind_setup.h +++ b/src/gui/keybind_setup.h @@ -86,6 +86,7 @@ class CKeybindSetup : public CMenuTarget, public CChangeObserver NKEY_SWITCHFORMAT, NKEY_SCREENSHOT, NKEY_PIP_CLOSE, + NKEY_PIP_CLOSE_AVINPUT, NKEY_PIP_SETUP, NKEY_PIP_SWAP, NKEY_FORMAT_MODE, diff --git a/src/gui/lua/luainstance.cpp b/src/gui/lua/luainstance.cpp index c7e208278..4b0971901 100644 --- a/src/gui/lua/luainstance.cpp +++ b/src/gui/lua/luainstance.cpp @@ -390,7 +390,7 @@ static void set_lua_variables(lua_State *L) { "UNKNOWN", (lua_Integer)NeutrinoModes::mode_unknown }, { "TV", (lua_Integer)NeutrinoModes::mode_tv }, { "RADIO", (lua_Integer)NeutrinoModes::mode_radio }, - { "SCART", (lua_Integer)NeutrinoModes::mode_scart }, + { "AVINPUT", (lua_Integer)NeutrinoModes::mode_avinput }, { "STANDBY", (lua_Integer)NeutrinoModes::mode_standby }, { "AUDIO", (lua_Integer)NeutrinoModes::mode_audio }, { "PIC", (lua_Integer)NeutrinoModes::mode_pic }, diff --git a/src/gui/volumebar.cpp b/src/gui/volumebar.cpp index b67bce4b3..1ec459ec6 100644 --- a/src/gui/volumebar.cpp +++ b/src/gui/volumebar.cpp @@ -124,7 +124,7 @@ void CVolumeBar::initVolumeBarPosition() { case VOLUMEBAR_POS_TOP_RIGHT:{ int x_corr = 0; - if (( neutrino->getMode() != NeutrinoModes::mode_scart ) && ( neutrino->getMode() != NeutrinoModes::mode_audio) && ( neutrino->getMode() != NeutrinoModes::mode_pic)) { + if ((neutrino->getMode() != NeutrinoModes::mode_avinput) && (neutrino->getMode() != NeutrinoModes::mode_audio) && (neutrino->getMode() != NeutrinoModes::mode_pic)) { if ((neutrino->isMuted()) && (!g_settings.mode_clock)) x_corr = mute_dx + h_spacer; if (CNeutrinoApp::getInstance()->getChannellistIsVisible() == true) diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 72b2ff84e..c2c43d51b 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -198,6 +198,8 @@ void * nhttpd_main_thread(void *data); extern cVideo * videoDecoder; #ifdef ENABLE_PIP extern cVideo *pipDecoder; +extern cDemux *pipDemux; +static bool avinput_pip = false; #endif extern cDemux *videoDemux; extern cAudio * audioDecoder; @@ -3419,6 +3421,24 @@ void CNeutrinoApp::RealRun() StartPip(CZapit::getInstance()->GetCurrentChannelID()); } } + 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))) { + int boxmode = getBoxMode(); + if (boxmode > -1 && boxmode != 12) + ShowMsg(LOCALE_MESSAGEBOX_ERROR, LOCALE_BOXMODE12_NOT_ACTIVATED, CMsgBox::mbrOk, CMsgBox::mbOk, NEUTRINO_ICON_ERROR); + else + { + if (!avinput_pip) { + if (CZapit::getInstance()->GetPipChannelID()) + CZapit::getInstance()->StopPip(); + StartAVInputPiP(); + } else { + if (CZapit::getInstance()->GetPipChannelID()) + CZapit::getInstance()->StopPip(); + else + StopAVInputPiP(); + } + } + } else if (msg == (neutrino_msg_t) g_settings.key_pip_setup) { CPipSetup pipsetup; pipsetup.exec(NULL, ""); @@ -3569,7 +3589,7 @@ void CNeutrinoApp::RealRun() Timerlist.exec(NULL, ""); } else if (msg == CRCInput::RC_aux) - scartMode(true); + AVInputMode(true); else { if (msg == CRCInput::RC_home) { @@ -3585,11 +3605,11 @@ void CNeutrinoApp::RealRun() } } else { - // mode == NeutrinoModes::mode_scart + // mode == NeutrinoModes::mode_avinput if (msg == CRCInput::RC_home || msg == CRCInput::RC_aux) { - if( mode == NeutrinoModes::mode_scart ) { - // Scart-Mode verlassen - scartMode( false ); + if( mode == NeutrinoModes::mode_avinput ) { + // AVInput-Mode verlassen + AVInputMode(false); } } else { @@ -4094,9 +4114,9 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) else if( msg == NeutrinoMessages::EVT_VCRCHANGED ) { if (g_settings.vcr_AutoSwitch) { if( data != VCR_STATUS_OFF ) - g_RCInput->postMsg( NeutrinoMessages::VCR_ON, 0 ); + g_RCInput->postMsg( NeutrinoMessages::AVINPUT_ON, 0 ); else - g_RCInput->postMsg( NeutrinoMessages::VCR_OFF, 0 ); + g_RCInput->postMsg( NeutrinoMessages::AVINPUT_OFF, 0 ); } return messages_return::handled | messages_return::cancel_info; } @@ -4262,7 +4282,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) if( mode == NeutrinoModes::mode_standby ) { standbyMode( false ); } - if( mode != NeutrinoModes::mode_scart ) { + if( mode != NeutrinoModes::mode_avinput ) { CTimerd::RecordingInfo * eventinfo = (CTimerd::RecordingInfo *) data; std::string name = g_Locale->getText(LOCALE_ZAPTOTIMER_ANNOUNCE); getAnnounceEpgName( eventinfo, name); @@ -4292,7 +4312,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) CRecordManager::getInstance()->StopAutoRecord(); zapTo(eventinfo->channel_id); } - if(( mode != NeutrinoModes::mode_scart ) && ( mode != NeutrinoModes::mode_standby ) && g_settings.recording_startstop_msg) { + if(( mode != NeutrinoModes::mode_avinput ) && ( mode != NeutrinoModes::mode_standby ) && g_settings.recording_startstop_msg) { std::string name = g_Locale->getText(LOCALE_RECORDTIMER_ANNOUNCE); getAnnounceEpgName(eventinfo, name); ShowHint(LOCALE_MESSAGEBOX_INFO, name.c_str()); @@ -4301,7 +4321,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) return messages_return::handled; } else if( msg == NeutrinoMessages::ANNOUNCE_SLEEPTIMER) { - if( mode != NeutrinoModes::mode_scart && mode != NeutrinoModes::mode_standby) + if( mode != NeutrinoModes::mode_avinput && mode != NeutrinoModes::mode_standby) skipSleepTimer = (ShowMsg(LOCALE_MESSAGEBOX_INFO, g_settings.shutdown_real ? LOCALE_SHUTDOWNTIMER_ANNOUNCE:LOCALE_SLEEPTIMERBOX_ANNOUNCE,CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 30, true) == CMsgBox::mbrYes); return messages_return::handled; } @@ -4363,7 +4383,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) return messages_return::handled; } else if( msg == NeutrinoMessages::ANNOUNCE_SHUTDOWN) { - if( mode != NeutrinoModes::mode_scart ) + if( mode != NeutrinoModes::mode_avinput ) skipShutdownTimer = (ShowMsg(LOCALE_MESSAGEBOX_INFO, LOCALE_SHUTDOWNTIMER_ANNOUNCE, CMsgBox::mbrNo, CMsgBox::mbYes | CMsgBox::mbNo, NULL, 450, 30) == CMsgBox::mbrYes); } else if( msg == NeutrinoMessages::SHUTDOWN ) { @@ -4381,7 +4401,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) ExitRun(CNeutrinoApp::EXIT_REBOOT); } else if (msg == NeutrinoMessages::EVT_POPUP || msg == NeutrinoMessages::EVT_EXTMSG) { - if (mode != NeutrinoModes::mode_scart && mode != NeutrinoModes::mode_standby) { + if (mode != NeutrinoModes::mode_avinput && mode != NeutrinoModes::mode_standby) { int timeout = DEFAULT_TIMEOUT; std::string text = (char*)data; std::string::size_type pos; @@ -4416,7 +4436,7 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) { text[pos] = '\n'; } - if( mode != NeutrinoModes::mode_scart ) + if( mode != NeutrinoModes::mode_avinput ) ShowMsg(LOCALE_TIMERLIST_TYPE_REMIND, text, CMsgBox::mbrBack, CMsgBox::mbBack, NEUTRINO_ICON_INFO); // UTF-8 delete[] (unsigned char*) data; return messages_return::handled; @@ -4481,17 +4501,17 @@ int CNeutrinoApp::handleMsg(const neutrino_msg_t _msg, neutrino_msg_data_t data) } } } - else if( msg == NeutrinoMessages::VCR_ON ) { - if( mode != NeutrinoModes::mode_scart ) { - scartMode( true ); + else if( msg == NeutrinoMessages::AVINPUT_ON ) { + if( mode != NeutrinoModes::mode_avinput ) { + AVInputMode( true ); } else - CVFD::getInstance()->setMode(CVFD::MODE_SCART); + CVFD::getInstance()->setMode(CVFD::MODE_AVINPUT); } - else if( msg == NeutrinoMessages::VCR_OFF ) { - if( mode == NeutrinoModes::mode_scart ) { - scartMode( false ); + else if( msg == NeutrinoMessages::AVINPUT_OFF ) { + if( mode == NeutrinoModes::mode_avinput ) { + AVInputMode( false ); } } else if (msg == NeutrinoMessages::EVT_START_PLUGIN) { @@ -4821,33 +4841,44 @@ void CNeutrinoApp::tvMode( bool rezap ) audioDecoder->SetSyncMode((AVSYNC_TYPE)g_settings.avsync); } -void CNeutrinoApp::scartMode( bool bOnOff ) +void CNeutrinoApp::AVInputMode(bool bOnOff) { - //printf( ( bOnOff ) ? "mode: scart on\n" : "mode: scart off\n" ); + //printf( (bOnOff) ? "mode: avinput on\n" : "mode: avinput off\n" ); - if( bOnOff ) { - // SCART AN + if (bOnOff) { + // AVInput AN frameBuffer->useBackground(false); frameBuffer->paintBackground(); - //g_Controld->setScartMode( 1 ); - CVFD::getInstance()->setMode(CVFD::MODE_SCART); + CVFD::getInstance()->setMode(CVFD::MODE_AVINPUT); lastMode = mode; - mode = NeutrinoModes::mode_scart; + mode = NeutrinoModes::mode_avinput; + + videoDecoder->setAVInput(1); + audioDecoder->setAVInput(1); +#ifdef ENABLE_GRAPHLCD + cGLCD::AVInputMode(true); +#endif } else { - // SCART AUS - //g_Controld->setScartMode( 0 ); + // AVInput AUS mode = NeutrinoModes::mode_unknown; //re-set mode if( lastMode == NeutrinoModes::mode_radio || lastMode == NeutrinoModes::mode_webradio) { - radioMode( false ); + radioMode(false); } else if( lastMode == NeutrinoModes::mode_tv || lastMode == NeutrinoModes::mode_webtv) { - tvMode( false ); + tvMode(false); } else if( lastMode == NeutrinoModes::mode_standby ) { - standbyMode( true ); + standbyMode(true); } + + videoDecoder->setAVInput(0); + audioDecoder->setAVInput(0); + tvMode(true); +#ifdef ENABLE_GRAPHLCD + cGLCD::AVInputMode(false); +#endif } } @@ -4869,9 +4900,8 @@ void CNeutrinoApp::standbyMode( bool bOnOff, bool fromDeepStandby ) #ifdef ENABLE_GRAPHLCD cGLCD::StandbyMode(true); #endif - CVFD::getInstance()->ShowText("Standby ..."); - if( mode == NeutrinoModes::mode_scart ) { - //g_Controld->setScartMode( 0 ); + CVFD::getInstance()->ShowText("standby..."); + if( mode == NeutrinoModes::mode_avinput ) { } g_InfoViewer->setUpdateTimer(0); // delete timer StopSubtitles(); @@ -5123,6 +5153,33 @@ void CNeutrinoApp::switchTvRadioMode(const int prev_mode) } } +#ifdef ENABLE_PIP +void CNeutrinoApp::StartAVInputPiP() { + if (!pipDemux) { + pipDemux = new cDemux(1); + pipDemux->Open(DMX_PIP_CHANNEL); + if (!pipDecoder) { + pipDecoder = new cVideo(0, NULL, NULL, 1); + } + } + pipDemux->SetSource(1, 2); + pipDecoder->SetStreamType((VIDEO_FORMAT) 1); + pipDemux->Start(); + pipDecoder->Start(0, 0, 0); + pipDecoder->open_AVInput_Device(); + pipDecoder->Pig(g_settings.pip_x,g_settings.pip_y,g_settings.pip_width,g_settings.pip_height,g_settings.screen_width,g_settings.screen_height); + pipDecoder->ShowPig(1); + avinput_pip = true; +} + +void CNeutrinoApp::StopAVInputPiP() { + pipDecoder->ShowPig(0); + pipDemux->Stop(); + pipDecoder->Stop(); + pipDecoder->close_AVInput_Device(); + avinput_pip = false; +} +#endif /************************************************************************************** * CNeutrinoApp - exec, menuitem callback (shutdown) * @@ -5133,10 +5190,10 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) // printf("ac: %s\n", actionKey.c_str()); int returnval = menu_return::RETURN_REPAINT; - if(actionKey == "help_recording") { + if (actionKey == "help_recording") { ShowMsg(LOCALE_SETTINGS_HELP, LOCALE_RECORDINGMENU_HELP, CMsgBox::mbrBack, CMsgBox::mbBack); } - else if(actionKey=="shutdown") + else if (actionKey=="shutdown") { ExitRun(g_info.hw_caps->can_shutdown); } @@ -5146,7 +5203,7 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) if (reboot_now == CMsgBox::mbrYes) CNeutrinoApp::getInstance()->exec(NULL, "reboot"); } - else if(actionKey=="reboot") + else if (actionKey=="reboot") { ExitRun(CNeutrinoApp::EXIT_REBOOT); returnval = menu_return::RETURN_NONE; @@ -5171,11 +5228,28 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) switchTvRadioMode(NeutrinoModes::mode_radio); returnval = menu_return::RETURN_EXIT_ALL; } - else if(actionKey=="scart") { - g_RCInput->postMsg( NeutrinoMessages::VCR_ON, 0 ); + else if (actionKey=="avinput") { + g_RCInput->postMsg( NeutrinoMessages::AVINPUT_ON, 0 ); returnval = menu_return::RETURN_EXIT_ALL; } - else if(actionKey=="savesettings") { + +#ifdef ENABLE_PIP + else if (actionKey=="avinput_pip") { + if (!avinput_pip) { + if (CZapit::getInstance()->GetPipChannelID()) + CZapit::getInstance()->StopPip(); + StartAVInputPiP(); + } else { + if (CZapit::getInstance()->GetPipChannelID()) + CZapit::getInstance()->StopPip(); + else + StopAVInputPiP(); + } + returnval = menu_return::RETURN_EXIT_ALL; + } +#endif + + else if (actionKey=="savesettings") { CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_MAINSETTINGS_SAVESETTINGSNOW_HINT)); // UTF-8 hintBox.paint(); @@ -5192,10 +5266,10 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) sleep(1); // small delay for very fast hardware hintBox.hide(); } - else if(actionKey=="recording") { + else if (actionKey=="recording") { setupRecordingDevice(); } - else if(actionKey=="reloadplugins") { + else if (actionKey=="reloadplugins") { CHintBox hintBox(LOCALE_MESSAGEBOX_INFO, g_Locale->getText(LOCALE_SERVICEMENU_GETPLUGINS_HINT)); hintBox.paint(); @@ -5203,7 +5277,6 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) hintBox.hide(); } - //NI else if (actionKey=="restarttuner") { CHintBox * hintBox = new CHintBox(LOCALE_SERVICEMENU_RESTART_TUNER, g_Locale->getText(LOCALE_SERVICEMENU_RESTARTING_TUNER)); @@ -5261,7 +5334,7 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) return menu_return::RETURN_EXIT_ALL; } - else if(actionKey=="ytplayback" || actionKey=="tsmoviebrowser" || actionKey=="fileplayback_video" || actionKey=="fileplayback_audio") + else if (actionKey=="ytplayback" || actionKey=="tsmoviebrowser" || actionKey=="fileplayback_video" || actionKey=="fileplayback_audio") { frameBuffer->Clear(); if (mode == NeutrinoModes::NeutrinoModes::mode_radio || mode == NeutrinoModes::NeutrinoModes::mode_webradio) @@ -5277,13 +5350,13 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) #endif return menu_return::RETURN_EXIT_ALL; } - else if(actionKey=="audioplayer" || actionKey == "inetplayer") { + else if (actionKey=="audioplayer" || actionKey == "inetplayer") { frameBuffer->Clear(); CMediaPlayerMenu * media = CMediaPlayerMenu::getInstance(); media->exec(NULL, actionKey); return menu_return::RETURN_EXIT_ALL; } - else if(actionKey=="restart") { + else if (actionKey=="restart") { //usage of slots from any classes OnBeforeRestart(); @@ -5328,20 +5401,20 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey) exit(CNeutrinoApp::EXIT_REBOOT); // should never be reached } } - else if(actionKey == "moviedir") { + else if (actionKey == "moviedir") { parent->hide(); chooserDir(g_settings.network_nfs_moviedir, false, NULL); return menu_return::RETURN_REPAINT; } - else if(actionKey == "clearSectionsd") + else if (actionKey == "clearSectionsd") { g_Sectionsd->freeMemory(); } - else if(actionKey == "channels") + else if (actionKey == "channels") return showChannelList(CRCInput::RC_ok, true); - else if(actionKey == "standby") + else if (actionKey == "standby") { g_RCInput->postMsg(NeutrinoMessages::STANDBY_ON, 0); return menu_return::RETURN_EXIT_ALL; @@ -5592,6 +5665,7 @@ void CNeutrinoApp::loadKeys(const char * fname) g_settings.key_screenshot = tconfig->getInt32( "key_screenshot", (unsigned int)CRCInput::RC_games ); //NI #ifdef ENABLE_PIP g_settings.key_pip_close = tconfig->getInt32( "key_pip_close", CRCInput::RC_prev ); + g_settings.key_pip_close_avinput = tconfig->getInt32( "key_pip_close_avinput", CRCInput::RC_nokey ); g_settings.key_pip_setup = tconfig->getInt32( "key_pip_setup", CRCInput::RC_nokey ); g_settings.key_pip_swap = tconfig->getInt32( "key_pip_swap", CRCInput::RC_next ); #endif @@ -5690,6 +5764,7 @@ void CNeutrinoApp::saveKeys(const char * fname) tconfig->setInt32( "key_screenshot", g_settings.key_screenshot ); #ifdef ENABLE_PIP tconfig->setInt32( "key_pip_close", g_settings.key_pip_close ); + tconfig->setInt32( "key_pip_close_avinput", g_settings.key_pip_close_avinput ); tconfig->setInt32( "key_pip_setup", g_settings.key_pip_setup ); tconfig->setInt32( "key_pip_swap", g_settings.key_pip_swap ); #endif diff --git a/src/neutrino.h b/src/neutrino.h index 64d050ab4..1641c9d54 100644 --- a/src/neutrino.h +++ b/src/neutrino.h @@ -118,7 +118,7 @@ private: void tvMode( bool rezap = true ); void radioMode( bool rezap = true ); - void scartMode( bool bOnOff ); + void AVInputMode( bool bOnOff ); void standbyMode( bool bOnOff, bool fromDeepStandby = false ); void getAnnounceEpgName(CTimerd::RecordingInfo * eventinfo, std::string &name); @@ -170,6 +170,10 @@ public: void channelsInit(bool bOnly = false); int run(int argc, char **argv); + bool avinput_pip; + void StartAVInputPiP(); + void StopAVInputPiP(); + //callback stuff only.... int exec(CMenuTarget* parent, const std::string & actionKey); diff --git a/src/neutrinoMessages.h b/src/neutrinoMessages.h index 808218986..26d0bd546 100644 --- a/src/neutrinoMessages.h +++ b/src/neutrinoMessages.h @@ -53,8 +53,8 @@ struct NeutrinoMessages { { SHOW_EPG = CRCInput::RC_Messages + 1, SHOW_INFOBAR = CRCInput::RC_Messages + 2, - VCR_ON = CRCInput::RC_Messages + 3, - VCR_OFF = CRCInput::RC_Messages + 4, + AVINPUT_ON = CRCInput::RC_Messages + 3, + AVINPUT_OFF = CRCInput::RC_Messages + 4, STANDBY_ON = CRCInput::RC_Messages + 5, STANDBY_OFF = CRCInput::RC_Messages + 6, STANDBY_TOGGLE = CRCInput::RC_Messages + 7, @@ -179,7 +179,7 @@ struct NeutrinoModes mode_unknown = -1, mode_tv = 1, mode_radio = 2, - mode_scart = 3, + mode_avinput = 3, mode_standby = 4, mode_audio = 5, mode_pic = 6, diff --git a/src/neutrino_menue.cpp b/src/neutrino_menue.cpp index 446456bfb..0af4fd512 100644 --- a/src/neutrino_menue.cpp +++ b/src/neutrino_menue.cpp @@ -156,6 +156,19 @@ void CNeutrinoApp::InitMenuMain() radioswitch->setHint(NEUTRINO_ICON_HINT_RADIOMODE, LOCALE_MENU_HINT_RADIOMODE); personalize.addItem(MENU_MAIN, radioswitch, &g_settings.personalize[SNeutrinoSettings::P_MAIN_RADIO_MODE], false, CPersonalizeGui::PERSONALIZE_SHOW_AS_ITEM_OPTION, tvradio_switch, DCOND_MODE_RADIO | DCOND_MODE_TS); //observed + //avinput mode + if ((g_info.hw_caps->has_SCART_input) || (g_info.hw_caps->has_HDMI_input)) { + CMenuForwarder *avinputmode = new CMenuForwarder(LOCALE_MAINMENU_AVINPUTMODE, true, NULL, this, "avinput", g_settings.personalize[SNeutrinoSettings::P_MAIN_TV_RADIO_MODE] != 0 ? CRCInput::RC_green : CRCInput::RC_nokey); + //avinputmode->setHint(NEUTRINO_ICON_HINT_AVINPUTMODE, LOCALE_MAINMENU_HINT_AVINPUTMODE); + 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", false /*CRCInput::RC_nokey*/); + //avinputmode_pip->setHint(NEUTRINO_ICON_HINT_AVINPUTMODE_PIP, LOCALE_MAINMENU_HINT_AVINPUTMODE_PIP); + personalize.addItem(MENU_MAIN, avinputmode_pip, &g_settings.personalize[SNeutrinoSettings::P_MAIN_AVINPUT_PIP]); +#endif + } + //timer CMenuForwarder *timerlist = new CMenuForwarder(LOCALE_TIMERLIST_NAME, true, NULL, new CTimerList(), NULL, CRCInput::RC_yellow); timerlist->setHint(NEUTRINO_ICON_HINT_TIMERS, LOCALE_MENU_HINT_TIMERS); diff --git a/src/nhttpd/tuxboxapi/controlapi.cpp b/src/nhttpd/tuxboxapi/controlapi.cpp index 1c2b21e9e..28f7e8c4b 100644 --- a/src/nhttpd/tuxboxapi/controlapi.cpp +++ b/src/nhttpd/tuxboxapi/controlapi.cpp @@ -223,7 +223,7 @@ const CControlAPI::TyCgiCall CControlAPI::yCgiCallList[]= {"videoformat", &CControlAPI::VideoFormatCGI, "text/plain"}, {"videooutput", &CControlAPI::VideoOutputCGI, "text/plain"}, {"vcroutput", &CControlAPI::VCROutputCGI, "text/plain"}, - {"scartmode", &CControlAPI::ScartModeCGI, "text/plain"}, + {"avinputmode", &CControlAPI::AVInputModeCGI, "text/plain"}, {"audio", &CControlAPI::AudioCGI, "text/plain"}, {"crypt", &CControlAPI::CryptCGI, "text/plain"}, // timer @@ -479,8 +479,8 @@ void CControlAPI::GetModeCGI(CyhookHandler *hh) result = "tv"; else if (mode == NeutrinoModes::mode_radio) result = "radio"; - else if (mode == NeutrinoModes::mode_scart) - result = "scart"; + else if (mode == NeutrinoModes::mode_avinput) + result = "avinput"; else if (mode == NeutrinoModes::mode_standby) result = "standby"; else if (mode == NeutrinoModes::mode_audio) @@ -1033,7 +1033,7 @@ void CControlAPI::VCROutputCGI(CyhookHandler *hh) } //----------------------------------------------------------------------------- -void CControlAPI::ScartModeCGI(CyhookHandler *hh) +void CControlAPI::AVInputModeCGI(CyhookHandler *hh) { // FIXME: not implemented hh->SendOk(); diff --git a/src/nhttpd/tuxboxapi/controlapi.h b/src/nhttpd/tuxboxapi/controlapi.h index 534e9afb5..4748c7ca0 100644 --- a/src/nhttpd/tuxboxapi/controlapi.h +++ b/src/nhttpd/tuxboxapi/controlapi.h @@ -116,7 +116,7 @@ private: void VideoFormatCGI(CyhookHandler *hh); void VideoOutputCGI(CyhookHandler *hh); void VCROutputCGI(CyhookHandler *hh); - void ScartModeCGI(CyhookHandler *hh); + void AVInputModeCGI(CyhookHandler *hh); void AudioCGI(CyhookHandler *hh); void CryptCGI(CyhookHandler *hh); void setBouquetCGI(CyhookHandler *hh); diff --git a/src/system/locals.h b/src/system/locals.h index 3bec21b65..fcd6fbe3a 100644 --- a/src/system/locals.h +++ b/src/system/locals.h @@ -592,6 +592,7 @@ typedef enum LOCALE_EXTRA_KEY_PIC_MODE, LOCALE_EXTRA_KEY_PIC_SIZE, LOCALE_EXTRA_KEY_PIP_CLOSE, + LOCALE_EXTRA_KEY_PIP_CLOSE_AVINPUT, LOCALE_EXTRA_KEY_PIP_SETUP, LOCALE_EXTRA_KEY_PIP_SWAP, LOCALE_EXTRA_KEY_RECORD, @@ -1284,6 +1285,8 @@ typedef enum LOCALE_MAINMENU_RECORDING, LOCALE_MAINMENU_RECORDING_START, LOCALE_MAINMENU_RECORDING_STOP, + LOCALE_MAINMENU_AVINPUTMODE, + LOCALE_MAINMENU_AVINPUTMODE_PIP, LOCALE_MAINMENU_SCRIPTS, LOCALE_MAINMENU_SERVICE, LOCALE_MAINMENU_SETTINGS, diff --git a/src/system/locals_intern.h b/src/system/locals_intern.h index af5a22b5a..31db06750 100644 --- a/src/system/locals_intern.h +++ b/src/system/locals_intern.h @@ -592,6 +592,7 @@ const char * locale_real_names[] = "extra.key_pic_mode", "extra.key_pic_size", "extra.key_pip_close", + "extra.key_pip_close_avinput", "extra.key_pip_setup", "extra.key_pip_swap", "extra.key_record", @@ -1284,6 +1285,8 @@ const char * locale_real_names[] = "mainmenu.recording", "mainmenu.recording_start", "mainmenu.recording_stop", + "mainmenu.avinputmode", + "mainmenu.avinputmode_pip", "mainmenu.scripts", "mainmenu.service", "mainmenu.settings", diff --git a/src/system/settings.cpp b/src/system/settings.cpp index 547fe2662..f2f3eefd4 100644 --- a/src/system/settings.cpp +++ b/src/system/settings.cpp @@ -49,6 +49,8 @@ const struct personalize_settings_t personalize_settings[SNeutrinoSettings::P_SE {"personalize_games" , CPersonalizeGui::PERSONALIZE_MODE_NOTVISIBLE}, {"personalize_tools" , CPersonalizeGui::PERSONALIZE_MODE_NOTVISIBLE}, + {"personalize_avinput" , CPersonalizeGui::PERSONALIZE_MODE_VISIBLE}, + {"personalize_avinput_pip" , CPersonalizeGui::PERSONALIZE_MODE_VISIBLE}, {"personalize_scripts" , CPersonalizeGui::PERSONALIZE_MODE_NOTVISIBLE}, {"personalize_lua" , CPersonalizeGui::PERSONALIZE_MODE_NOTVISIBLE}, {"personalize_settings" , CPersonalizeGui::PERSONALIZE_PROTECT_MODE_NOT_PROTECTED}, diff --git a/src/system/settings.h b/src/system/settings.h index 1e6ee0aed..53110ae85 100644 --- a/src/system/settings.h +++ b/src/system/settings.h @@ -483,6 +483,8 @@ struct SNeutrinoSettings P_MAIN_GAMES, P_MAIN_TOOLS, + P_MAIN_AVINPUT, + P_MAIN_AVINPUT_PIP, P_MAIN_SCRIPTS, P_MAIN_LUA, P_MAIN_SETTINGS, @@ -739,6 +741,7 @@ struct SNeutrinoSettings int key_current_transponder; int key_pip_close; + int key_pip_close_avinput; int key_pip_setup; int key_pip_swap; int key_format_mode_active; diff --git a/src/zapit/src/zapit.cpp b/src/zapit/src/zapit.cpp index 9acb048de..288f9d440 100644 --- a/src/zapit/src/zapit.cpp +++ b/src/zapit/src/zapit.cpp @@ -667,6 +667,10 @@ bool CZapit::ZapIt(const t_channel_id channel_id, bool forupdate, bool startplay #ifdef ENABLE_PIP bool CZapit::StopPip() { + if (CNeutrinoApp::getInstance()->avinput_pip) { + CNeutrinoApp::getInstance()->StopAVInputPiP(); + } + if (pip_channel_id) { INFO("[pip] stop %llx", pip_channel_id); #if !HAVE_CST_HARDWARE