diff options
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | README | 3 | ||||
-rw-r--r-- | control.c | 5 | ||||
-rw-r--r-- | menu_options.c | 89 | ||||
-rw-r--r-- | menu_options.h | 45 | ||||
-rw-r--r-- | mpv.c | 4 | ||||
-rw-r--r-- | player.c | 8 | ||||
-rw-r--r-- | player.h | 3 | ||||
-rw-r--r-- | po/de_DE.po | 11 |
10 files changed, 169 insertions, 4 deletions
@@ -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 @@ -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: @@ -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 @@ -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 + @@ -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"); } @@ -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"); @@ -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 "" |