summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorphintuka <phintuka>2012-03-18 19:17:07 +0000
committerphintuka <phintuka>2012-03-18 19:17:07 +0000
commit650ba49b5314351f351e4c57be7c5f3b2b9b9b45 (patch)
tree53a7f5e588c5dc55ad74f56ebe6af1d53193584d
parent52b3c5757b607d7cfdc7a2098f1450cd9752aa56 (diff)
downloadxineliboutput-650ba49b5314351f351e4c57be7c5f3b2b9b9b45.tar.gz
xineliboutput-650ba49b5314351f351e4c57be7c5f3b2b9b9b45.tar.bz2
Bind plugin menu to device instance
-rw-r--r--equalizer.c11
-rw-r--r--equalizer.h8
-rw-r--r--media_player.c4
-rw-r--r--menu.c115
-rw-r--r--menu.h10
-rw-r--r--xineliboutput.c11
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();
diff --git a/menu.c b/menu.c
index e7eae849..92b84774 100644
--- a/menu.c
+++ b/menu.c
@@ -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 ? ":" : "->",
diff --git a/menu.h b/menu.h
index 8a726f62..9ccbbbf4 100644
--- a/menu.h
+++ b/menu.h
@@ -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)