summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--media_player.c120
-rw-r--r--media_player.h28
2 files changed, 141 insertions, 7 deletions
diff --git a/media_player.c b/media_player.c
index ec3cd75a..3658a8a6 100644
--- a/media_player.c
+++ b/media_player.c
@@ -4,7 +4,7 @@
* See the main source file '.c' for copyright information and
* how to reach the author.
*
- * $Id: media_player.c,v 1.2 2006-06-04 05:45:37 phintuka Exp $
+ * $Id: media_player.c,v 1.3 2006-07-21 22:49:34 phintuka Exp $
*
*/
@@ -133,6 +133,8 @@ cXinelibPlayerControl::cXinelibPlayerControl(const char *File) :
if(NULL != (pt=strrchr(m_File,'.')))
*pt = 0;
+ /*#warning If File is directory, play all files ! (album of mp3s etc.)*/
+
#if VDRVERSNUM < 10338
cStatus::MsgReplaying(this, m_File);
#else
@@ -232,8 +234,6 @@ eOSState cXinelibPlayerControl::ProcessKey(eKeys Key)
case kRed: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK 0"); break;
case kGreen: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK -60"); break;
case kYellow: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK +60"); break;
- //case k1: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK -600"); break;
- //case k4: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK +600"); break;
case k1:
case kUser8: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK -20"); break;
case k3:
@@ -254,7 +254,6 @@ eOSState cXinelibPlayerControl::ProcessKey(eKeys Key)
break;
}
// fall thru
- /*case kUp:*/
case kPlay: r = cXinelibDevice::Instance().PlayFileCtrl("TRICKSPEED 1");
m_Speed = 1;
if(m_ShowModeOnly && m_DisplayReplay)
@@ -287,6 +286,119 @@ eOSState cXinelibPlayerControl::ProcessKey(eKeys Key)
}
//
+// cXinelibDvdPlayerControl
+//
+
+class cDvdMenu : public cOsdMenu {
+ public:
+ cDvdMenu(void) : cOsdMenu("DVD Menu")
+ {
+ Add(new cOsdItem("Exit DVD menu", osUser1));
+ Add(new cOsdItem("DVD Root menu", osUser2));
+ Add(new cOsdItem("DVD Title menu", osUser3));
+ Add(new cOsdItem("DVD SPU menu", osUser4));
+ Add(new cOsdItem("DVD Audio menu", osUser5));
+ Add(new cOsdItem("Close menu", osEnd));
+ Display();
+ }
+};
+
+cXinelibDvdPlayerControl::~cXinelibDvdPlayerControl()
+{
+ if(Menu) {
+ delete Menu;
+ Menu = NULL;
+ }
+}
+
+void cXinelibDvdPlayerControl::Hide(void)
+{
+ if(Menu) {
+ delete Menu;
+ Menu = NULL;
+ }
+ cXinelibPlayerControl::Hide();
+}
+
+void cXinelibDvdPlayerControl::Show(void)
+{
+ if(!Menu)
+ cXinelibPlayerControl::Show();
+ else
+ cXinelibPlayerControl::Hide();
+}
+
+eOSState cXinelibDvdPlayerControl::ProcessKey(eKeys Key)
+{
+ if (cXinelibDevice::Instance().EndOfStreamReached()) {
+ Hide();
+ return osEnd;
+ }
+
+ if(Menu) {
+ switch(Menu->ProcessKey(Key)) {
+ case osUser1: Hide(); cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_MENU1"); break;
+ case osUser2: Hide(); cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_MENU2"); break;
+ case osUser3: Hide(); cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_MENU3"); break;
+ case osUser4: Hide(); cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_MENU4"); break;
+ case osUser5: Hide(); cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_MENU5"); break;
+ case osBack:
+ case osEnd: Hide(); break;
+ default: break;
+ }
+ return osContinue;
+ }
+
+ if (m_DisplayReplay)
+ Show();
+
+ int r;
+ switch(Key) {
+ // DVD navigation
+ case kUp: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_UP"); break;
+ case kDown: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_DOWN"); break;
+ case kLeft: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_LEFT"); break;
+ case kRight: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_RIGHT"); break;
+ case kOk: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_SELECT"); break;
+ case kBack: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_MENU1"); break;
+ case kRed: Hide();
+ Menu = new cDvdMenu();
+ break;
+ // Playback control
+ case kGreen: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK -60"); break;
+ case kYellow: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK +60"); break;
+ case kStop:
+ case kBlue: Hide();
+ Close();
+ return osEnd;
+ case kNext: cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_NEXT"); break;
+ case kPrev: cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_PREVIOUS"); break;
+ case kInfo: if(m_DisplayReplay) {
+ Hide();
+ } else {
+ m_ShowModeOnly = false;
+ Show();
+ }
+ break;
+ case kPause: if(m_Speed != 0) {
+ r = cXinelibDevice::Instance().PlayFileCtrl("TRICKSPEED 0");
+ m_ShowModeOnly = false;
+ m_Speed = 0;
+ Show();
+ break;
+ }
+ // fall thru
+ case kPlay: r = cXinelibDevice::Instance().PlayFileCtrl("TRICKSPEED 1");
+ m_Speed = 1;
+ Hide();
+ break;
+ default: break;
+ }
+
+ return osContinue;
+}
+
+//
// cXinelibImagePlayer
//
diff --git a/media_player.h b/media_player.h
index 830d7929..074db50b 100644
--- a/media_player.h
+++ b/media_player.h
@@ -4,7 +4,7 @@
* See the main source file 'xineliboutput.c' for copyright information and
* how to reach the author.
*
- * $Id: media_player.h,v 1.1 2006-06-03 09:50:54 phintuka Exp $
+ * $Id: media_player.h,v 1.2 2006-07-21 22:49:33 phintuka Exp $
*
*/
@@ -26,8 +26,11 @@ class cXinelibPlayerControl : public cControl
static cXinelibPlayer *OpenPlayer(const char *file);
- cSkinDisplayReplay *m_DisplayReplay;
char *m_File;
+
+ protected:
+ cSkinDisplayReplay *m_DisplayReplay;
+
int m_Speed;
bool m_ShowModeOnly;
@@ -46,7 +49,26 @@ class cXinelibPlayerControl : public cControl
};
-// --- Media player ---------------------------------------------------------
+// --- DVD player -----------------------------------------------------------
+
+class cDvdMenu;
+class cXinelibDvdPlayerControl : public cXinelibPlayerControl
+{
+ private:
+ cDvdMenu *Menu;
+
+ public:
+ cXinelibDvdPlayerControl(const char *file) :
+ cXinelibPlayerControl(file), Menu(NULL)
+ {}
+ virtual ~cXinelibDvdPlayerControl();
+
+ virtual void Show(void);
+ virtual void Hide(void);
+ virtual eOSState ProcessKey(eKeys Key);
+};
+
+// --- Image player ---------------------------------------------------------
class cXinelibImagePlayer;