diff options
| author | phintuka <phintuka> | 2012-03-18 19:17:07 +0000 |
|---|---|---|
| committer | phintuka <phintuka> | 2012-03-18 19:17:07 +0000 |
| commit | 650ba49b5314351f351e4c57be7c5f3b2b9b9b45 (patch) | |
| tree | 53a7f5e588c5dc55ad74f56ebe6af1d53193584d | |
| parent | 52b3c5757b607d7cfdc7a2098f1450cd9752aa56 (diff) | |
| download | xineliboutput-650ba49b5314351f351e4c57be7c5f3b2b9b9b45.tar.gz xineliboutput-650ba49b5314351f351e4c57be7c5f3b2b9b9b45.tar.bz2 | |
Bind plugin menu to device instance
| -rw-r--r-- | equalizer.c | 11 | ||||
| -rw-r--r-- | equalizer.h | 8 | ||||
| -rw-r--r-- | media_player.c | 4 | ||||
| -rw-r--r-- | menu.c | 115 | ||||
| -rw-r--r-- | menu.h | 10 | ||||
| -rw-r--r-- | xineliboutput.c | 11 |
6 files changed, 87 insertions, 72 deletions
diff --git a/equalizer.c b/equalizer.c index c6e755c7..bf09faa6 100644 --- a/equalizer.c +++ b/equalizer.c @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: equalizer.c,v 1.7 2011-10-30 16:54:26 phintuka Exp $ + * $Id: equalizer.c,v 1.8 2012-03-18 19:17:07 phintuka Exp $ * */ @@ -14,8 +14,9 @@ #include "device.h" #include "equalizer.h" -cEqualizer::cEqualizer() : cOsdObject() +cEqualizer::cEqualizer(cXinelibDevice *Dev) : cOsdObject() { + m_Dev = Dev; m_Values = new int[AUDIO_EQ_count]; memcpy(m_Values, xc.audio_equalizer, sizeof(xc.audio_equalizer)); m_Osd = NULL; @@ -66,14 +67,14 @@ eOSState cEqualizer::ProcessKey(eKeys key) if(m_Values[m_Current] < ADJUST_MIN) m_Values[m_Current] = ADJUST_MIN; DrawBar(m_Current,true); - cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, m_Values, xc.audio_surround, xc.speaker_type); + m_Dev->ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, m_Values, xc.audio_surround, xc.speaker_type); break; case kUp: m_Values[m_Current] += ADJUST_STEP; if(m_Values[m_Current] > ADJUST_MAX) m_Values[m_Current] = ADJUST_MAX; DrawBar(m_Current,true); - cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, m_Values, xc.audio_surround, xc.speaker_type); + m_Dev->ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, m_Values, xc.audio_surround, xc.speaker_type); break; case kLeft: if(m_Current>0) { @@ -90,7 +91,7 @@ eOSState cEqualizer::ProcessKey(eKeys key) } break; case kBack: - cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, xc.audio_equalizer, xc.audio_surround, xc.speaker_type); + m_Dev->ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, xc.audio_compression, xc.audio_equalizer, xc.audio_surround, xc.speaker_type); return osEnd; case kOk: memcpy(xc.audio_equalizer, m_Values, sizeof(xc.audio_equalizer)); diff --git a/equalizer.h b/equalizer.h index e2c7a9fa..34c2da1c 100644 --- a/equalizer.h +++ b/equalizer.h @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: equalizer.h,v 1.1 2006-06-03 09:50:54 phintuka Exp $ + * $Id: equalizer.h,v 1.2 2012-03-18 19:17:07 phintuka Exp $ * */ @@ -14,16 +14,20 @@ #include <vdr/config.h> #include <vdr/osdbase.h> +class cXinelibDevice; + class cEqualizer : public cOsdObject { private: + cXinelibDevice *m_Dev; + int *m_Values; int m_Current; cOsd *m_Osd; public: - cEqualizer(); + cEqualizer(cXinelibDevice *Dev); virtual ~cEqualizer(); virtual void Show(); diff --git a/media_player.c b/media_player.c index 55e1301e..03abb324 100644 --- a/media_player.c +++ b/media_player.c @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: media_player.c,v 1.90 2012-01-16 11:57:53 phintuka Exp $ + * $Id: media_player.c,v 1.91 2012-03-18 19:17:07 phintuka Exp $ * */ @@ -396,7 +396,7 @@ eOSState cPlaylistMenu::ProcessKey(eKeys Key) SetHelpButtons(); return osContinue; case kGreen: - return AddSubMenu(cMenuXinelib::CreateMenuBrowseFiles(ShowMusic)); + return AddSubMenu(cMenuXinelib::CreateMenuBrowseFiles(&(cXinelibDevice::Instance()),ShowMusic)); case kYellow: if(m_Playlist.Count() > 1) { eOSState result = osContinue; cPlaylistItem *i = m_Playlist.Current(); @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: menu.c,v 1.93 2012-03-15 23:48:07 rofafor Exp $ + * $Id: menu.c,v 1.94 2012-03-18 19:17:07 phintuka Exp $ * */ @@ -122,6 +122,8 @@ eOSState cMenuBluray::ProcessKey(eKeys Key) class cMenuBrowseFiles : public cOsdMenu { protected: + cXinelibDevice *m_Dev; + const eMainMenuMode m_Mode; bool m_OnlyQueue; cString m_CurrentDir; @@ -139,7 +141,7 @@ class cMenuBrowseFiles : public cOsdMenu char *GetLastDir(void); public: - cMenuBrowseFiles(eMainMenuMode mode = ShowFiles, bool OnlyQueue=false); + cMenuBrowseFiles(cXinelibDevice *Dev, eMainMenuMode mode = ShowFiles, bool OnlyQueue=false); ~cMenuBrowseFiles(); virtual eOSState ProcessKey(eKeys Key); @@ -166,13 +168,14 @@ static cString LastDir(const char *dir) return cString(NULL); } -cMenuBrowseFiles::cMenuBrowseFiles(eMainMenuMode mode, bool OnlyQueue) : +cMenuBrowseFiles::cMenuBrowseFiles(cXinelibDevice *Dev, eMainMenuMode mode, bool OnlyQueue) : cOsdMenu( ( mode==ShowImages ? tr("Images") : mode==ShowMusic ? (!OnlyQueue ? tr("Play music") : tr("Add to playlist")) : /*mode==ShowFiles ?*/ tr("Play file")), 2, 4), m_Mode(mode) { + m_Dev = Dev; m_OnlyQueue = OnlyQueue; m_ConfigLastDir = GetLastDir(); @@ -571,15 +574,16 @@ eOSState cMenuBrowseFiles::ProcessKey(eKeys Key) time_t cMenuXinelib::g_LastHotkeyTime = 0; eKeys cMenuXinelib::g_LastHotkey = kNone; -cMenuXinelib::cMenuXinelib() +cMenuXinelib::cMenuXinelib(cXinelibDevice *Dev) { + m_Dev = Dev; compression = xc.audio_compression; autocrop = xc.autocrop; overscan = xc.overscan; hotkey_state = hkInit; - novideo = cXinelibDevice::Instance().GetPlayMode() == pmAudioOnlyBlack ? 1 : 0; + novideo = m_Dev->GetPlayMode() == pmAudioOnlyBlack ? 1 : 0; Add(SeparatorItem(tr("Media"))); if (xc.media_menu_items & MEDIA_MENU_FILES) @@ -614,9 +618,9 @@ cMenuXinelib::cMenuXinelib() } switch (xc.main_menu_mode) { - case ShowFiles: AddSubMenu(new cMenuBrowseFiles(ShowFiles)); break; - case ShowMusic: AddSubMenu(new cMenuBrowseFiles(ShowMusic)); break; - case ShowImages: AddSubMenu(new cMenuBrowseFiles(ShowImages)); break; + case ShowFiles: + case ShowMusic: + case ShowImages: AddSubMenu(new cMenuBrowseFiles(m_Dev, xc.main_menu_mode)); break; default: break; } @@ -626,28 +630,28 @@ cMenuXinelib::cMenuXinelib() cMenuXinelib::~cMenuXinelib() { if (xc.audio_compression != compression) - cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, - xc.audio_compression, xc.audio_equalizer, - xc.audio_surround, xc.speaker_type); + m_Dev->ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, + xc.audio_compression, xc.audio_equalizer, + xc.audio_surround, xc.speaker_type); if (xc.overscan != overscan) - cXinelibDevice::Instance().ConfigureVideo(xc.hue, xc.saturation, xc.brightness, xc.sharpness, - xc.noise_reduction, xc.contrast, xc.overscan, - xc.vo_aspect_ratio); + m_Dev->ConfigureVideo(xc.hue, xc.saturation, xc.brightness, xc.sharpness, + xc.noise_reduction, xc.contrast, xc.overscan, + xc.vo_aspect_ratio); if (xc.autocrop != autocrop) - cXinelibDevice::Instance().ConfigurePostprocessing("autocrop", - xc.autocrop ? true : false, - xc.AutocropOptions()); + m_Dev->ConfigurePostprocessing("autocrop", + xc.autocrop ? true : false, + xc.AutocropOptions()); - int dev_novideo = cXinelibDevice::Instance().GetPlayMode() == pmAudioOnlyBlack ? 1 : 0; + int dev_novideo = m_Dev->GetPlayMode() == pmAudioOnlyBlack ? 1 : 0; if (dev_novideo != novideo) - cXinelibDevice::Instance().SetPlayMode(novideo ? pmAudioOnlyBlack : pmNone); + m_Dev->SetPlayMode(novideo ? pmAudioOnlyBlack : pmNone); } -cOsdMenu *cMenuXinelib::CreateMenuBrowseFiles(eMainMenuMode mode, bool Queue) +cOsdMenu *cMenuXinelib::CreateMenuBrowseFiles(cXinelibDevice *Dev, eMainMenuMode mode, bool Queue) { - return new cMenuBrowseFiles(mode, true); + return new cMenuBrowseFiles(Dev, mode, true); } eOSState cMenuXinelib::ProcessKey(eKeys Key) @@ -673,13 +677,13 @@ eOSState cMenuXinelib::ProcessKey(eKeys Key) switch (state) { case osUser1: - AddSubMenu(new cMenuBrowseFiles(ShowFiles)); + AddSubMenu(new cMenuBrowseFiles(m_Dev, ShowFiles)); return osUnknown; case osUser2: - AddSubMenu(new cMenuBrowseFiles(ShowMusic)); + AddSubMenu(new cMenuBrowseFiles(m_Dev, ShowMusic)); return osUnknown; case osUser3: - AddSubMenu(new cMenuBrowseFiles(ShowImages)); + AddSubMenu(new cMenuBrowseFiles(m_Dev, ShowImages)); return osContinue; case osUser4: cPlayerFactory::Launch("dvd:/"); @@ -692,7 +696,7 @@ eOSState cMenuXinelib::ProcessKey(eKeys Key) return osEnd; case osUser7: if (!xc.pending_menu_action) { - xc.pending_menu_action = new cEqualizer(); + xc.pending_menu_action = new cEqualizer(m_Dev); return osPlugin; } return osContinue; @@ -703,20 +707,20 @@ eOSState cMenuXinelib::ProcessKey(eKeys Key) if (Key == kLeft || Key == kRight || ISNUMBERKEY(Key)) { if (item == audio_ctrl_compress) - cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, - compression, xc.audio_equalizer, - xc.audio_surround, xc.speaker_type); + m_Dev->ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, + compression, xc.audio_equalizer, + xc.audio_surround, xc.speaker_type); else if (item == ctrl_overscan) - cXinelibDevice::Instance().ConfigureVideo(xc.hue, xc.saturation, xc.brightness, xc.sharpness, - xc.noise_reduction, xc.contrast, overscan, - xc.vo_aspect_ratio); + m_Dev->ConfigureVideo(xc.hue, xc.saturation, xc.brightness, xc.sharpness, + xc.noise_reduction, xc.contrast, overscan, + xc.vo_aspect_ratio); } if (Key == kLeft || Key == kRight) { if (item == ctrl_autocrop) - cXinelibDevice::Instance().ConfigurePostprocessing("autocrop", autocrop?true:false, - xc.AutocropOptions()); + m_Dev->ConfigurePostprocessing("autocrop", autocrop?true:false, + xc.AutocropOptions()); else if (item == ctrl_novideo) - cXinelibDevice::Instance().SetPlayMode(novideo ? pmAudioOnlyBlack : pmNone); + m_Dev->SetPlayMode(novideo ? pmAudioOnlyBlack : pmNone); } return state; @@ -777,7 +781,7 @@ eOSState cMenuXinelib::ProcessHotkey(eKeys Key) if (local_frontend >= FRONTEND_count) local_frontend = 0; strn0cpy(xc.local_frontend, xc.s_frontends[local_frontend], sizeof(xc.local_frontend)); - cXinelibDevice::Instance().ConfigureWindow( + m_Dev->ConfigureWindow( xc.fullscreen, xc.width, xc.height, xc.modeswitch, xc.modeline, xc.display_aspect, xc.scale_video); } @@ -791,9 +795,9 @@ eOSState cMenuXinelib::ProcessHotkey(eKeys Key) /* auto, 4:3, 16:9, ... */ if (!OnlyInfo) { xc.display_aspect = (xc.display_aspect < ASPECT_count-1) ? xc.display_aspect+1 : 0; - cXinelibDevice::Instance().ConfigureWindow(xc.fullscreen, xc.width, xc.height, - xc.modeswitch, xc.modeline, xc.display_aspect, - xc.scale_video); + m_Dev->ConfigureWindow(xc.fullscreen, xc.width, xc.height, + xc.modeswitch, xc.modeline, xc.display_aspect, + xc.scale_video); } Message = cString::sprintf("%s %s %s", tr("Aspect ratio"), OnlyInfo ? ":" : "->", @@ -804,9 +808,9 @@ eOSState cMenuXinelib::ProcessHotkey(eKeys Key) /* auto, square, 4:3, anamorphic or DVB */ if (!OnlyInfo) { xc.vo_aspect_ratio = (xc.vo_aspect_ratio < VO_ASPECT_count-1) ? xc.vo_aspect_ratio + 1 : 0; - cXinelibDevice::Instance().ConfigureVideo(xc.hue, xc.saturation, xc.brightness, xc.sharpness, - xc.noise_reduction, xc.contrast, xc.overscan, - xc.vo_aspect_ratio); + m_Dev->ConfigureVideo(xc.hue, xc.saturation, xc.brightness, xc.sharpness, + xc.noise_reduction, xc.contrast, xc.overscan, + xc.vo_aspect_ratio); } Message = cString::sprintf("%s %s %s", tr("Video aspect ratio"), OnlyInfo ? ":" : "->", @@ -824,9 +828,9 @@ eOSState cMenuXinelib::ProcessHotkey(eKeys Key) } else { xc.autocrop = 0; } - cXinelibDevice::Instance().ConfigurePostprocessing("autocrop", - xc.autocrop ? true : false, - xc.AutocropOptions()); + m_Dev->ConfigurePostprocessing("autocrop", + xc.autocrop ? true : false, + xc.AutocropOptions()); } Message = cString::sprintf("%s %s %s", tr("Crop letterbox 4:3 to 16:9"), @@ -844,9 +848,9 @@ eOSState cMenuXinelib::ProcessHotkey(eKeys Key) strcpy(xc.deinterlace_method, "none"); else strcpy(xc.deinterlace_method, "tvtime"); - cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, - compression, xc.audio_equalizer, - xc.audio_surround, xc.speaker_type); + m_Dev->ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, + compression, xc.audio_equalizer, + xc.audio_surround, xc.speaker_type); } Message = cString::sprintf("%s %s %s", tr("Deinterlacing"), OnlyInfo ? ":" : "->", @@ -858,8 +862,7 @@ eOSState cMenuXinelib::ProcessHotkey(eKeys Key) /* off, on */ if (!OnlyInfo) { xc.audio_upmix = xc.audio_upmix ? 0 : 1; - cXinelibDevice::Instance().ConfigurePostprocessing( - "upmix", xc.audio_upmix ? true : false, NULL); + m_Dev->ConfigurePostprocessing("upmix", xc.audio_upmix ? true : false, NULL); } Message = cString::sprintf("%s %s %s", tr("Upmix stereo to 5.1"), @@ -871,7 +874,7 @@ eOSState cMenuXinelib::ProcessHotkey(eKeys Key) /* off, on */ if (!OnlyInfo) { xc.audio_surround = xc.audio_surround ? 0 : 1; - cXinelibDevice::Instance().ConfigurePostprocessing( + m_Dev->ConfigurePostprocessing( xc.deinterlace_method, xc.audio_delay, xc.audio_compression, xc.audio_equalizer, xc.audio_surround, xc.speaker_type); } @@ -909,9 +912,9 @@ eOSState cMenuXinelib::ProcessHotkey(eKeys Key) /* audio delay up */ if (!OnlyInfo) { xc.audio_delay++; - cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, - xc.audio_compression, xc.audio_equalizer, - xc.audio_surround, xc.speaker_type); + m_Dev->ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, + xc.audio_compression, xc.audio_equalizer, + xc.audio_surround, xc.speaker_type); } Message = cString::sprintf("%s %s %d %s", tr("Delay"), OnlyInfo ? ":" : "->", @@ -922,9 +925,9 @@ eOSState cMenuXinelib::ProcessHotkey(eKeys Key) /* audio delay up */ if (!OnlyInfo) { xc.audio_delay--; - cXinelibDevice::Instance().ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, - xc.audio_compression, xc.audio_equalizer, - xc.audio_surround, xc.speaker_type); + m_Dev->ConfigurePostprocessing(xc.deinterlace_method, xc.audio_delay, + xc.audio_compression, xc.audio_equalizer, + xc.audio_surround, xc.speaker_type); } Message = cString::sprintf("%s %s %d %s", tr("Delay"), OnlyInfo ? ":" : "->", @@ -4,7 +4,7 @@ * See the main source file 'xineliboutput.c' for copyright information and * how to reach the author. * - * $Id: menu.h,v 1.8 2010-01-19 22:45:45 phintuka Exp $ + * $Id: menu.h,v 1.9 2012-03-18 19:17:07 phintuka Exp $ * */ @@ -15,9 +15,13 @@ #include <vdr/menuitems.h> +class cXinelibDevice; + class cMenuXinelib : public cMenuSetupPage { private: + cXinelibDevice *m_Dev; + int compression; int autocrop; int overscan; @@ -42,11 +46,11 @@ class cMenuXinelib : public cMenuSetupPage virtual void Store(void); public: - cMenuXinelib(void); + cMenuXinelib(cXinelibDevice *Dev); virtual ~cMenuXinelib(); virtual eOSState ProcessKey(eKeys Key); - static cOsdMenu *CreateMenuBrowseFiles(eMainMenuMode mode, bool Queue=true); + static cOsdMenu *CreateMenuBrowseFiles(cXinelibDevice *Dev, eMainMenuMode mode, bool Queue=true); }; #endif //__XINELIB_SETUP_MENU_H diff --git a/xineliboutput.c b/xineliboutput.c index f1c4d633..3b870a2f 100644 --- a/xineliboutput.c +++ b/xineliboutput.c @@ -21,7 +21,7 @@ * * xineliboutput.c: VDR Plugin interface * - * $Id: xineliboutput.c,v 1.51 2012-03-18 19:00:22 phintuka Exp $ + * $Id: xineliboutput.c,v 1.52 2012-03-18 19:17:07 phintuka Exp $ * */ @@ -205,7 +205,10 @@ cOsdObject *cPluginXinelibOutput::MainMenuAction(void) // Perform the action when selected from the main VDR menu. TRACEF("cPluginXinelibOutput::MainMenuAction"); - if(xc.main_menu_mode == CloseOsd) { + if (!m_Dev) { + return NULL; + } + if (xc.main_menu_mode == CloseOsd) { xc.main_menu_mode = ShowMenu; return NULL; } @@ -216,10 +219,10 @@ cOsdObject *cPluginXinelibOutput::MainMenuAction(void) return tmp; } - if(xc.hide_main_menu) + if (xc.hide_main_menu) return NULL; - return new cMenuXinelib(); + return new cMenuXinelib(m_Dev); } cMenuSetupPage *cPluginXinelibOutput::SetupMenu(void) |
