summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorphintuka <phintuka>2006-12-02 23:35:31 +0000
committerphintuka <phintuka>2006-12-02 23:35:31 +0000
commit2ea9f386dca6a74e32529e8493bf39f9f20fe244 (patch)
tree73ce1971f1da85f60da4f0c51acab40e803a4943
parent63e9681d97034ac5b4c590e32be4001fcd9404d0 (diff)
downloadxineliboutput-2ea9f386dca6a74e32529e8493bf39f9f20fe244.tar.gz
xineliboutput-2ea9f386dca6a74e32529e8493bf39f9f20fe244.tar.bz2
DVD player key handling updates
-rw-r--r--HISTORY3
-rw-r--r--README35
-rw-r--r--media_player.c87
3 files changed, 92 insertions, 33 deletions
diff --git a/HISTORY b/HISTORY
index bb2a4764..b812be54 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,6 +1,9 @@
VDR Plugin 'xineliboutput' Revision History
-------------------------------------------
+- Try to detect when navigating in DVD menus and change
+ functions of Up/Down/Left/Right/Ok/Back keys when in menus
+
2006-10-20: Version 1.0.0pre6
- Display Audio track languages when replaying DVDs
diff --git a/README b/README
index a7a4b984..e733b522 100644
--- a/README
+++ b/README
@@ -264,7 +264,7 @@ Image viewer key bindings
Stop/Blue Exit image viewer
Play Start slide show
Pause Stop slide show
- FastFF/FastRew Start slide show; Increase/decrease slide show speed;
+ FastFwd/FastRew Start slide show; Increase/decrease slide show speed;
Change slideshow direction
Ok Toggle replay display mode
@@ -289,21 +289,24 @@ Media player key bindings
DVD player key bindings
Up/Down/Left/Right/Ok/Back DVD menu navigation
- Red DVD menu(s)
- Green Jump 1 min back
- Yellow Jump 1 min forward
- 1, User8 Jump 20 s back
- 3, User9 Jump 20 s forward
- Blue Stop replay
- Pause Pause replay
- Play Play
- Stop Stop replay
- Next
- Prev
- Info Show progress display
- 2 Select next subtitle track
- 5 Select previous subtitle track
- FastRew/FastFwd Play faster/slower
+ Red Access DVD menu(s)
+ Green Jump 1 min back
+ Yellow Jump 1 min forward
+ Stop/Blue/Back Stop replay
+ Ok / Info Toggle replay display mode
+ 1 / User8 Jump 20 s back
+ 3 / User9 Jump 20 s forward
+ Pause / Down Pause replay
+ Play / Up Play
+ 6 / Next, Next chapter
+ 4 / Prev Previous chapter
+ 9 Next title
+ 7 Previous title
+ Info Show progress display
+ 2 Next subtitle track
+ 5 Previous subtitle track
+ FastRew/FastFwd,
+ Left/Right Play faster/slower
DVD playback
diff --git a/media_player.c b/media_player.c
index 1836a9b4..d1d44a6d 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.13 2006-10-18 21:20:41 phintuka Exp $
+ * $Id: media_player.c,v 1.14 2006-12-02 23:35:31 phintuka Exp $
*
*/
@@ -691,30 +691,78 @@ eOSState cXinelibDvdPlayerControl::ProcessKey(eKeys Key)
if (m_DisplayReplay)
Show();
+ bool MenuDomain = false;
+ if(Key != kNone) {
+ const char *l0 = cXinelibDevice::Instance().GetDvdSpuLang(0);
+ const char *l1 = cXinelibDevice::Instance().GetDvdSpuLang(1);
+ if((l0 && !strcmp("menu", l0)) ||
+ (l1 && !strcmp("menu", l1))) {
+ /*LOGMSG(" *** menu domain %s %s", l0, l1);*/
+ MenuDomain = true;
+ } else {
+ /*LOGMSG(" *** replay domain %s %s", l0, l1);*/
+ }
+ }
+
int r;
+ if(MenuDomain) {
+ switch(Key) {
+ // DVD navigation
+ case kUp: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_UP"); return osContinue;
+ case kDown: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_DOWN"); return osContinue;
+ case kLeft: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_LEFT"); return osContinue;
+ case kRight: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_RIGHT"); return osContinue;
+ case kOk: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_SELECT"); return osContinue;
+ case kBack: r = cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_MENU1"); return osContinue;
+ default: break;
+ }
+ }
+
+ if(!MenuDomain) {
+ switch(Key) {
+ // Replay control
+ case kUp: Key = kPlay; break;
+ case kDown: Key = kPause; break;
+ case kLeft: Key = kFastRew; break;
+ case kRight: Key = kFastFwd; break;
+ case kOk:
+ if(m_Speed != 1) {
+ Hide();
+ m_ShowModeOnly = !m_ShowModeOnly;
+ Show();
+ } else {
+ if(m_DisplayReplay) {
+ m_ShowModeOnly = true;
+ Hide();
+ } else {
+ Hide();
+ m_ShowModeOnly = false;
+ Show();
+ }
+ }
+ break;
+ case kBack: xc.main_menu_mode = m_Mode;
+ Hide();
+ Close();
+ BackToMenu();
+ return osEnd;
+ default: break;
+ }
+ }
+
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;
+ // DVD menus
case kRed: Hide();
Menu = new cDvdMenu();
break;
+
// SPU channel
-#if 0
- case k2: r = cXinelibDevice::Instance().PlayFileCtrl("SPUSTREAM NEXT"); break;
- case k5: r = cXinelibDevice::Instance().PlayFileCtrl("SPUSTREAM PREV"); break;
-#else
case k5: cXinelibDevice::Instance().SetCurrentDvdSpuTrack(
cXinelibDevice::Instance().GetCurrentDvdSpuTrack() - 2);
case k2: cRemote::CallPlugin("xineliboutput");
- cRemote::Put(kRed);
+ cRemote::Put(kRed); /* shortcut key */
cRemote::Put(k2);
break;
-#endif
// Playback control
case kGreen: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK -60"); break;
@@ -722,14 +770,19 @@ eOSState cXinelibDvdPlayerControl::ProcessKey(eKeys Key)
case kUser8:
case k1: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK -20"); break;
case kUser9:
- case k3: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK -20"); break;
+ case k3: r = cXinelibDevice::Instance().PlayFileCtrl("SEEK +20"); 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 k9: cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_NEXT TITLE"); break;
+ case k7: cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_PREVIOUS TITLE"); break;
+ case k6:
+ case kNext: cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_NEXT CHAPTER"); break;
+ case k4:
+ case kPrev: cXinelibDevice::Instance().PlayFileCtrl("EVENT XINE_EVENT_INPUT_PREVIOUS CHAPTER"); break;
case kFastFwd:switch(m_Speed) {
case 0: m_Speed=-4; r = cXinelibDevice::Instance().PlayFileCtrl("TRICKSPEED 8"); break;