summaryrefslogtreecommitdiff
path: root/player.h
diff options
context:
space:
mode:
Diffstat (limited to 'player.h')
-rw-r--r--player.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/player.h b/player.h
new file mode 100644
index 0000000..82fe5cc
--- /dev/null
+++ b/player.h
@@ -0,0 +1,99 @@
+//////////////////////////////////////////////////////////////////////////////
+/// ///
+/// This file is part of the VDR mpv plugin and licensed under AGPLv3 ///
+/// ///
+/// See the README file for copyright information ///
+/// ///
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef __MPV_PLAYER_H
+#define __MPV_PLAYER_H
+
+#include <string>
+#include <vector>
+#include <vdr/player.h>
+#include <mpv/client.h>
+
+using std::string;
+using std::vector;
+
+class cMpvPlayer:public cPlayer
+{
+ private:
+ void PlayerStart();
+ void SwitchOsdToMpv();
+
+ string PlayFilename; // file to play
+ bool PlayShuffle; // shuffle playlist
+ pthread_t ObserverThreadHandle; // player property observer thread
+ mpv_handle *hMpv; // handle to mpv
+ int OriginalFps; // fps before modeswitch
+ bool IsPlaylist(string File); // returns true if the given file is a playlist
+ void ChangeFrameRate(int TargetRate);
+ void HandlePropertyChange(mpv_event *event); // handle change mpv property
+ void HandleTracksChange(); // handle mpv track information
+ static void *ObserverThread(void *handle);
+
+ // Player status variables
+ int PlayerPaused; // player paused
+ int PlayerDiscNav; // discnav active
+ int PlayerNumChapters; // number of chapters
+ int PlayerChapter; // current chapter
+ int PlayerFps; // frames per second
+ int PlayerCurrent; // current postion in seconds
+ int PlayerTotal; // total length in seconds
+ string PlayerFilename; // filename currently playing
+ int PlayerSpeed; // player playback speed
+ vector<int> PlayerChapters; // chapter start times
+ vector<string> ChapterTitles; // chapter titles
+ string mediaTitle; // title from meta data
+ static volatile int running;
+
+ public:
+ cMpvPlayer(string Filename, bool Shuffle=false);
+ virtual ~cMpvPlayer();
+ void Activate(bool); // player attached/detached
+ virtual void SetAudioTrack(eTrackType Type, const tTrackId *TrackId);
+ virtual void SetSubtitleTrack(eTrackType Type, const tTrackId *TrackId);
+ void OsdClose(); // clear or close current OSD
+ void Shutdown();
+ static volatile int PlayerIsRunning() { return running; }
+
+ // functions to send commands to mpv
+ void SendCommand(const char *cmd, ...);
+ void Seek(int Seconds); // seek n seconds
+ void SetTimePos(int Seconds);
+ void SetSpeed(int Speed);
+ void SetAudio(int Audio);
+ void SetSubtitle(int Subtitle);
+ void TogglePause();
+ void QuitPlayer();
+ void DiscNavUp();
+ void DiscNavDown();
+ void DiscNavLeft();
+ void DiscNavRight();
+ void DiscNavMenu();
+ void DiscNavSelect();
+ void DiscNavPrev();
+ void PreviousChapter();
+ void NextChapter();
+ void NextPlaylistItem();
+ void PreviousPlaylistItem();
+ void SetVolume(int Volume);
+
+ // functions to get different status information about the current playback
+ int IsPaused() { return PlayerPaused; }
+ int DiscNavActive() { return PlayerDiscNav; }
+ int NumChapters() { return PlayerNumChapters; }
+ int CurrentChapter() { return PlayerChapter + 1; } // return the current value +1 since mpv begins at 0
+ int CurrentPlayTime() { return PlayerCurrent; }
+ int TotalPlayTime() { return PlayerTotal; }
+ int CurrentFps() { return PlayerFps; }
+ string CurrentFile() { return PlayerFilename; }
+ int CurrentPlaybackSpeed() { return PlayerSpeed; }
+ int ChapterStartTime(unsigned int Chapter) { if (Chapter <= PlayerChapters.size()) return PlayerChapters[Chapter-1]; else return 0; }
+ string ChapterTitle(unsigned int Chapter) { if (Chapter <= ChapterTitles.size()) return ChapterTitles[Chapter-1]; else return ""; }
+ string MediaTitle() { return mediaTitle; }
+};
+
+#endif