diff --git a/src/gui/mediaplayer.cpp b/src/gui/mediaplayer.cpp index c7f99c153..c8d819ea6 100644 --- a/src/gui/mediaplayer.cpp +++ b/src/gui/mediaplayer.cpp @@ -101,7 +101,7 @@ void CMediaPlayerMenu::showMenu() media->addItem(new CMenuForwarder(LOCALE_INETRADIO_NAME, true, NULL, new CAudioPlayerGui(true), NULL, CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); //movieplayer - CMenuWidget *moviePlayer = new CMenuWidget(LOCALE_MAINMENU_MOVIEPLAYER, NEUTRINO_ICON_MULTIMEDIA, width); + CMenuWidget *moviePlayer = new CMenuWidget(LOCALE_MAINMENU_MEDIA, NEUTRINO_ICON_MULTIMEDIA, width); showMoviePlayer(moviePlayer); media->addItem(new CMenuForwarder(LOCALE_MAINMENU_MOVIEPLAYER, true, NULL, moviePlayer, NULL, CRCInput::RC_yellow, NEUTRINO_ICON_BUTTON_YELLOW)); @@ -120,12 +120,12 @@ void CMediaPlayerMenu::showMenu() //show movieplayer submenu with selectable items for moviebrowser or filebrowser void CMediaPlayerMenu::showMoviePlayer(CMenuWidget *moviePlayer) { - CMoviePlayerGui *movieplayer_gui = new CMoviePlayerGui(); - - moviePlayer->addIntroItems(); + CMoviePlayerGui *movieplayer_gui = &CMoviePlayerGui::getInstance(); + + moviePlayer->addIntroItems(LOCALE_MAINMENU_MOVIEPLAYER); moviePlayer->addItem(new CMenuForwarder(LOCALE_MOVIEBROWSER_HEAD, true, NULL, movieplayer_gui, "tsmoviebrowser", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED)); moviePlayer->addItem(new CMenuForwarder(LOCALE_MOVIEPLAYER_FILEPLAYBACK, true, NULL, movieplayer_gui, "fileplayback", CRCInput::RC_green, NEUTRINO_ICON_BUTTON_GREEN)); - + // #if 0 // //moviePlayer->addItem(new CMenuForwarder(LOCALE_MOVIEPLAYER_PESPLAYBACK, true, NULL, moviePlayerGui, "pesplayback")); // //moviePlayer->addItem(new CMenuForwarder(LOCALE_MOVIEPLAYER_TSPLAYBACK_PC, true, NULL, moviePlayerGui, "tsplayback_pc")); diff --git a/src/gui/movieplayer.cpp b/src/gui/movieplayer.cpp index c474b4a4d..afa36708f 100644 --- a/src/gui/movieplayer.cpp +++ b/src/gui/movieplayer.cpp @@ -78,6 +78,7 @@ #include #include "libtuxtxt/teletext.h" + int dvbsub_start(int pid); int dvbsub_pause(); @@ -141,6 +142,31 @@ int CAPIDSelectExec::exec(CMenuTarget * /*parent*/, const std::string & actionKe return menu_return::RETURN_EXIT; } +CMoviePlayerGui* CMoviePlayerGui::instance_mp = NULL; + +CMoviePlayerGui& CMoviePlayerGui::getInstance() +{ + if ( !instance_mp ) + { + instance_mp = new CMoviePlayerGui(); + printf("[neutrino CMoviePlayerGui] Instance created...\n"); + } + + return *instance_mp; +} + +void CMoviePlayerGui::Delete() +{ + if ( instance_mp ) + { + delete instance_mp; + printf("[neutrino CMoviePlayerGui] Instance removed...\n"); + } + + instance_mp = NULL; +} + + CMoviePlayerGui::CMoviePlayerGui() { Init(); diff --git a/src/gui/movieplayer.h b/src/gui/movieplayer.h index 3f15bc92f..8a6bc16b5 100644 --- a/src/gui/movieplayer.h +++ b/src/gui/movieplayer.h @@ -111,9 +111,17 @@ class CMoviePlayerGui : public CMenuTarget void showHelpVLC(void); void callInfoViewer(const std::string & epg_title, const std::string & epg_info1, const std::string & epg_channel, const int duration, const int pos); + + static CMoviePlayerGui* instance_mp; + CMoviePlayerGui(const CMoviePlayerGui&) {}; + public: CMoviePlayerGui(); ~CMoviePlayerGui(); + + static CMoviePlayerGui& getInstance(); + static void Delete(); + int exec(CMenuTarget* parent, const std::string & actionKey); void updateLcd(const std::string & sel_filename); bool Playing(); diff --git a/src/neutrino.cpp b/src/neutrino.cpp index 309a10cbe..dea24546e 100644 --- a/src/neutrino.cpp +++ b/src/neutrino.cpp @@ -236,7 +236,6 @@ CBouquetList * RADIOallList; CPlugins * g_PluginList; CRemoteControl * g_RemoteControl; SMSKeyInput * c_SMSKeyInput; -CMoviePlayerGui* moviePlayerGui; CAudioSelectMenuHandler *audio_menu; CPictureViewer * g_PicViewer; CCAMMenuHandler * g_CamHandler; @@ -2523,7 +2522,7 @@ printf("[neutrino] timeshift try, recordingstatus %d, rec dir %s, timeshift dir if(g_RemoteControl->is_video_started) { if(recordingstatus) { //StopSubtitles(); - moviePlayerGui->exec(NULL, tmode); + CMoviePlayerGui::getInstance().exec(NULL, tmode); //StartSubtitles(); } else if(msg != CRCInput::RC_rewind) { //StopSubtitles(); @@ -2535,7 +2534,7 @@ printf("[neutrino] timeshift try, recordingstatus %d, rec dir %s, timeshift dir } if(recordingstatus) { //StopSubtitles(); - moviePlayerGui->exec(NULL, tmode); + CMoviePlayerGui::getInstance().exec(NULL, tmode); //StartSubtitles(); } } @@ -2590,7 +2589,7 @@ printf("[neutrino] direct record\n"); //StopSubtitles(); if( mode == mode_radio ) videoDecoder->StopPicture(); - moviePlayerGui->exec(NULL, "tsmoviebrowser"); + CMoviePlayerGui::getInstance().exec(NULL, "tsmoviebrowser"); if( mode == mode_radio ) videoDecoder->ShowPicture(DATADIR "/neutrino/icons/radiomode.jpg"); //StartSubtitles(); @@ -3380,7 +3379,7 @@ skip_message: lastMode=mode; mode=mode_pic; } - if((data & mode_mask)== mode_ts && moviePlayerGui->Playing()) { + if((data & mode_mask)== mode_ts && CMoviePlayerGui::getInstance().Playing()) { if(mode == mode_radio) videoDecoder->StopPicture(); lastMode=mode; @@ -3529,7 +3528,7 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode) delete powerManager; } - delete moviePlayerGui; + delete &CMoviePlayerGui::getInstance(); shutdown_cs_api(); system("/etc/init.d/rcK"); @@ -4465,7 +4464,7 @@ void stop_daemons(bool stopall) printf("zapit shutdown done\n"); CVFD::getInstance()->Clear(); if(stopall) { - delete moviePlayerGui; + CMoviePlayerGui::Delete(); //remove instance if (cpuFreq) cpuFreq->SetCpuFreq(g_settings.cpufreq * 1000 * 1000); if (powerManager) { diff --git a/src/neutrino_menue.cpp b/src/neutrino_menue.cpp index 4d4d61e59..d3452f1f9 100644 --- a/src/neutrino_menue.cpp +++ b/src/neutrino_menue.cpp @@ -1499,7 +1499,7 @@ bool CNeutrinoApp::showUserMenu(int button) menu_items++; menu_prev = SNeutrinoSettings::ITEM_MOVIEPLAYER_MB; keyhelper.get(&key,&icon,CRCInput::RC_green); - menu_item = new CMenuForwarder(LOCALE_MOVIEBROWSER_HEAD, true, NULL, new CMoviePlayerGui(), "tsmoviebrowser", key, icon); + menu_item = new CMenuForwarder(LOCALE_MOVIEBROWSER_HEAD, true, NULL, &CMoviePlayerGui::getInstance(), "tsmoviebrowser", key, icon); menu->addItem(menu_item, false); break;