summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--HISTORY2
-rw-r--r--Makefile3
-rw-r--r--README3
-rw-r--r--control.c5
-rw-r--r--menu_options.c89
-rw-r--r--menu_options.h45
-rw-r--r--mpv.c4
-rw-r--r--player.c8
-rw-r--r--player.h3
-rw-r--r--po/de_DE.po11
10 files changed, 169 insertions, 4 deletions
diff --git a/HISTORY b/HISTORY
index 210a6ba..a9d59aa 100644
--- a/HISTORY
+++ b/HISTORY
@@ -1,5 +1,7 @@
2015-XX-XX vdr-mpv-0.0.5
- added argument to override the main menu text
+- during playback show an option menu if the main menu entry is selected
+ or key blue is pressed
2015-06-29: vdr-mpv-0.0.4
- start playback even when audio or video fails, this should give a better
diff --git a/Makefile b/Makefile
index 83c5536..9ab30e1 100644
--- a/Makefile
+++ b/Makefile
@@ -46,6 +46,7 @@ TMPDIR ?= /tmp
export CFLAGS = $(call PKGCFG,cflags)
export CXXFLAGS = $(call PKGCFG,cxxflags)
+export CXXFLAGS += -Wno-switch
### The version number of VDR's plugin API:
@@ -73,7 +74,7 @@ DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"' -D_GNU_SOURCE $(CONFIG) \
### The object files (add further files here):
-OBJS = $(PLUGIN).o config.o control.o filebrowser.o osd.o player.o playmenu.o setup.o status.o
+OBJS = $(PLUGIN).o config.o control.o filebrowser.o menu_options.o osd.o player.o playmenu.o setup.o status.o
### The main target:
diff --git a/README b/README
index 1e87520..97db120 100644
--- a/README
+++ b/README
@@ -108,7 +108,8 @@ Fast forward: Speed up playback speed up to 32 times
Red: Time search functionality like used in VDR recordings
Green: Seek 60 seconds backwards
Yellow: Seek 60 seconds forward
-Blue, Stop, Back: Stop playback
+Blue: Show menu with current playback options
+Stop, Back: Stop playback
Ok: Display current playback status or close status display
if currently open
5: Open disc nav menu
diff --git a/control.c b/control.c
index e6061cb..8c957c0 100644
--- a/control.c
+++ b/control.c
@@ -204,6 +204,10 @@ eOSState cMpvControl::ProcessKey(eKeys key)
Player->Seek(+60);
break;
+ case kBlue:
+ cRemote::CallPlugin("mpv");
+ break;
+
case kBack:
if (Player->DiscNavActive())
{
@@ -211,7 +215,6 @@ eOSState cMpvControl::ProcessKey(eKeys key)
break;
}
case kStop:
- case kBlue:
Hide();
Player->QuitPlayer();
return osEnd;
diff --git a/menu_options.c b/menu_options.c
new file mode 100644
index 0000000..a27f38b
--- /dev/null
+++ b/menu_options.c
@@ -0,0 +1,89 @@
+#include "menu_options.h"
+
+cMpvMenuOptions::cMpvMenuOptions(cMpvPlayer *Player)
+:cOsdMenu(tr("Options"))
+{
+ SetDisplayMenu();
+ player = Player;
+ ShowOptions();
+ Show();
+ Display();
+}
+
+cMpvMenuOptions::~cMpvMenuOptions()
+{
+ dsyslog ("dekonstruktor\n");
+}
+
+void cMpvMenuOptions::ShowOptions()
+{
+ // display chapter select menu if the file has named named chapters
+ if (player->NumChapters() && player->ChapterTitle(1) != "")
+ Add(new cOsdItem(tr("Show chapters"), osUser1));
+
+ // TODO if we are currently on a playlist display playlist menu
+
+}
+
+eOSState cMpvMenuOptions::ProcessKey(eKeys Key)
+{
+ eOSState State = cOsdMenu::ProcessKey(Key);
+
+ if (!HasSubMenu())
+ {
+ switch (Key)
+ {
+ case kOk:
+ AddSubMenu(new cMpvMenuChapters(player));
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ return State;
+}
+
+cMpvMenuChapters::cMpvMenuChapters(cMpvPlayer *Player)
+:cOsdMenu(tr("Chapters"))
+{
+ player = Player;
+ for (int i=1; i<=player->NumChapters(); i++)
+ AddItem(player->ChapterTitle(i), i);
+
+ Display();
+}
+
+eOSState cMpvMenuChapters::ProcessKey(eKeys Key)
+{
+ eOSState State = cOsdMenu::ProcessKey(Key);
+ if (State == osUnknown)
+ {
+ switch (Key)
+ {
+ case kOk:
+ cMpvMenuChapterItem *item = (cMpvMenuChapterItem *) Get(Current());
+ player->SetChapter(item->Number());
+ return osEnd;
+ }
+ }
+
+ return State;
+}
+
+void cMpvMenuChapters::AddItem(string Title, int Number)
+{
+ bool Current = false;
+ if (player->ChapterTitle(player->CurrentChapter()) == Title)
+ Current = true;
+ Add(new cMpvMenuChapterItem(Title, Number), Current);
+}
+
+cMpvMenuChapterItem::cMpvMenuChapterItem(string Title, int Number)
+{
+ // TODO add number in front
+ number = Number;
+ SetText(Title.c_str());
+}
+
diff --git a/menu_options.h b/menu_options.h
new file mode 100644
index 0000000..2206ac0
--- /dev/null
+++ b/menu_options.h
@@ -0,0 +1,45 @@
+#ifndef __MPV_MENU_OPTIONS
+#define __MPV_MENU_OPTIONS
+
+#include <string>
+#include <vdr/plugin.h>
+#include "player.h"
+
+using std::string;
+
+class cMpvMenuOptions:public cOsdMenu
+{
+ private:
+ cMpvPlayer *player;
+ void ShowOptions();
+
+ public:
+ cMpvMenuOptions(cMpvPlayer *Player);
+ ~cMpvMenuOptions();
+ virtual eOSState ProcessKey(eKeys Key);
+};
+
+class cMpvMenuChapters:public cOsdMenu
+{
+ private:
+ cMpvPlayer *player;
+
+ void AddItem(string Title, int Number);
+
+ public:
+ cMpvMenuChapters(cMpvPlayer *Player);
+ virtual eOSState ProcessKey(eKeys Key);
+};
+
+class cMpvMenuChapterItem:public cOsdItem
+{
+ private:
+ int number;
+
+ public:
+ cMpvMenuChapterItem(string Title, int Number);
+ int Number() { return number; }
+};
+
+#endif
+
diff --git a/mpv.c b/mpv.c
index fae3986..ffd8afd 100644
--- a/mpv.c
+++ b/mpv.c
@@ -15,6 +15,8 @@
#include "control.h"
#include "setup.h"
#include "playmenu.h"
+#include "player.h"
+#include "menu_options.h"
#include "mpv_service.h"
static const char *VERSION = "0.0.4"
@@ -64,6 +66,8 @@ cMpvPlugin::~cMpvPlugin(void)
cOsdObject *cMpvPlugin::MainMenuAction(void)
{
+ if (cMpvPlayer::PlayerIsRunning())
+ return new cMpvMenuOptions(cMpvPlayer::Player());
return new cPlayMenu("MPV");
}
diff --git a/player.c b/player.c
index 617b3df..92cc48a 100644
--- a/player.c
+++ b/player.c
@@ -32,6 +32,7 @@ using std::vector;
#define MPV_OBSERVE_MEDIA_TITLE 10
volatile int cMpvPlayer::running = 0;
+cMpvPlayer *cMpvPlayer::PlayerHandle = NULL;
// check mpv errors and send them to log
static inline void check_error(int status)
@@ -128,6 +129,7 @@ void *cMpvPlayer::ObserverThread(void *handle)
cMpvPlayer::cMpvPlayer(string Filename, bool Shuffle)
:cPlayer(pmExtern_THIS_SHOULD_BE_AVOIDED)
{
+ PlayerHandle = this;
PlayFilename = Filename;
PlayShuffle = Shuffle;
running = 0;
@@ -138,6 +140,7 @@ cMpvPlayer::~cMpvPlayer()
{
dsyslog("[mpv]%s: end\n", __FUNCTION__);
Detach();
+ PlayerHandle = NULL;
}
void cMpvPlayer::Activate(bool on)
@@ -509,6 +512,11 @@ void cMpvPlayer::SetSubtitle(int Subtitle)
SendCommand("set sub %d\n", Subtitle);
}
+void cMpvPlayer::SetChapter(int Chapter)
+{
+ SendCommand("set chapter %d\n", Chapter-1);
+}
+
void cMpvPlayer::TogglePause()
{
SendCommand("cycle pause\n");
diff --git a/player.h b/player.h
index cb8803b..400be06 100644
--- a/player.h
+++ b/player.h
@@ -47,6 +47,7 @@ class cMpvPlayer:public cPlayer
vector<int> PlayerChapters; // chapter start times
vector<string> ChapterTitles; // chapter titles
string mediaTitle; // title from meta data
+ static cMpvPlayer *PlayerHandle; // our player
static volatile int running;
public:
@@ -59,6 +60,7 @@ class cMpvPlayer:public cPlayer
void OsdClose(); // clear or close current OSD
void Shutdown();
static volatile int PlayerIsRunning() { return running; }
+ static cMpvPlayer *Player() { return PlayerHandle; }
// functions to send commands to mpv
void SendCommand(const char *cmd, ...);
@@ -67,6 +69,7 @@ class cMpvPlayer:public cPlayer
void SetSpeed(int Speed);
void SetAudio(int Audio);
void SetSubtitle(int Subtitle);
+ void SetChapter(int Chapter);
void TogglePause();
void QuitPlayer();
void DiscNavUp();
diff --git a/po/de_DE.po b/po/de_DE.po
index 9dd6004..d5723dd 100644
--- a/po/de_DE.po
+++ b/po/de_DE.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vdr-mpv 0.0.3\n"
"Report-Msgid-Bugs-To: <see README>\n"
-"POT-Creation-Date: 2015-07-03 22:39+0200\n"
+"POT-Creation-Date: 2015-07-04 09:14+0200\n"
"PO-Revision-Date: 2015-06-29 22:14+0200\n"
"Last-Translator: Maniac\n"
"Language-Team: Maniac\n"
@@ -20,6 +20,15 @@ msgstr ""
msgid "Jump: "
msgstr ""
+msgid "Options"
+msgstr ""
+
+msgid "Show chapters"
+msgstr ""
+
+msgid "Chapters"
+msgstr ""
+
msgid "mpv player plugin"
msgstr ""