diff options
Diffstat (limited to 'player.h')
-rw-r--r-- | player.h | 99 |
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 |