fixed: Improved DVDPlayer to fix problem with switch channels
[xbmc:xbmc-antiquated.git] / XBMC / xbmc / cores / IPlayer.h
1 #pragma once
2
3 /*
4  *      Copyright (C) 2005-2008 Team XBMC
5  *      http://www.xbmc.org
6  *
7  *  This Program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2, or (at your option)
10  *  any later version.
11  *
12  *  This Program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with XBMC; see the file COPYING.  If not, write to
19  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
20  *  http://www.gnu.org/copyleft/gpl.html
21  *
22  */
23
24 #include "IAudioCallback.h"
25 #include "Key.h"
26
27 struct TextCacheStruct_t;
28 class TiXmlElement;
29 class CStreamDetails;
30
31 class IPlayerCallback
32 {
33 public:
34   virtual ~IPlayerCallback() {}
35   virtual void OnPlayBackEnded() = 0;
36   virtual void OnPlayBackStarted() = 0;
37   virtual void OnPlayBackPaused() {};
38   virtual void OnPlayBackResumed() {};
39   virtual void OnPlayBackStopped() = 0;
40   virtual void OnQueueNextItem() = 0;
41   virtual void OnPlayBackSeek(int iTime) {};
42   virtual void OnPlayBackSeekChapter(int iChapter) {};
43   virtual void OnPlayBackSpeedChanged(int iSpeed) {};
44 };
45
46 class CPlayerOptions
47 {
48 public:
49   CPlayerOptions()
50   {
51     starttime = 0LL;
52     identify = false;
53     fullscreen = false;
54     video_only = false;
55   }
56   double  starttime; /* start time in seconds */
57   bool    identify;  /* identify mode, used for checking format and length of a file */
58   CStdString state;  /* potential playerstate to restore to */
59   bool    fullscreen; /* player is allowed to switch to fullscreen */
60   bool    video_only; /* player is not allowed to play audio streams, video streams only */
61 };
62
63 class CFileItem;
64 class CRect;
65
66 class IPlayer
67 {
68 public:
69   IPlayer(IPlayerCallback& callback): m_callback(callback){};
70   virtual ~IPlayer(){};
71   virtual bool Initialize(TiXmlElement* pConfig) { return true; };
72   virtual void RegisterAudioCallback(IAudioCallback* pCallback) = 0;
73   virtual void UnRegisterAudioCallback() = 0;
74   virtual bool OpenFile(const CFileItem& file, const CPlayerOptions& options){ return false;}
75   virtual bool QueueNextFile(const CFileItem &file) { return false; }
76   virtual void OnNothingToQueueNotify() {}
77   virtual bool CloseFile(){ return true;}
78   virtual bool IsPlaying() const { return false;}
79   virtual void Pause() = 0;
80   virtual bool IsPaused() const = 0;
81   virtual bool HasVideo() const = 0;
82   virtual bool HasAudio() const = 0;
83   virtual bool IsPassthrough() const { return false;}
84   virtual bool CanSeek() {return true;}
85   virtual void Seek(bool bPlus = true, bool bLargeStep = false) = 0;
86   virtual bool SeekScene(bool bPlus = true) {return false;}
87   virtual void SeekPercentage(float fPercent = 0){}
88   virtual float GetPercentage(){ return 0;}
89   virtual void SetVolume(long nVolume){}
90   virtual void SetDynamicRangeCompression(long drc){}
91   virtual void GetAudioInfo( CStdString& strAudioInfo) = 0;
92   virtual void GetVideoInfo( CStdString& strVideoInfo) = 0;
93   virtual void GetGeneralInfo( CStdString& strVideoInfo) = 0;
94   virtual void Update(bool bPauseDrawing = false) = 0;
95   virtual void GetVideoRect(CRect& SrcRect, CRect& DestRect) {}
96   virtual void GetVideoAspectRatio(float& fAR) { fAR = 1.0f; }
97   virtual bool CanRecord() { return false;};
98   virtual bool IsRecording() { return false;};
99   virtual bool Record(bool bOnOff) { return false;};
100   virtual void PlaybackReset() {};
101
102   virtual void  SetAVDelay(float fValue = 0.0f) { return; }
103   virtual float GetAVDelay()                    { return 0.0f;};
104
105   virtual void SetSubTitleDelay(float fValue = 0.0f){};
106   virtual float GetSubTitleDelay()    { return 0.0f; }
107   virtual int  GetSubtitleCount()     { return 0; }
108   virtual int  GetSubtitle()          { return -1; }
109   virtual void GetSubtitleName(int iStream, CStdString &strStreamName){};
110   virtual void SetSubtitle(int iStream){};
111   virtual bool GetSubtitleVisible(){ return false;};
112   virtual void SetSubtitleVisible(bool bVisible){};
113   virtual bool GetSubtitleExtension(CStdString &strSubtitleExtension){ return false;};
114   virtual bool AddSubtitle(const CStdString& strSubPath) {return false;};
115
116   virtual int  GetAudioStreamCount()  { return 0; }
117   virtual int  GetAudioStream()       { return -1; }
118   virtual void GetAudioStreamName(int iStream, CStdString &strStreamName){};
119   virtual void SetAudioStream(int iStream){};
120
121   virtual TextCacheStruct_t* GetTeletextCache() { return NULL; };
122   virtual void LoadPage(int p, int sp, unsigned char* buffer) {};
123
124   virtual int  GetChapterCount()                               { return 0; }
125   virtual int  GetChapter()                                    { return -1; }
126   virtual void GetChapterName(CStdString& strChapterName)      { return; }
127   virtual int  SeekChapter(int iChapter)                       { return -1; }
128 //  virtual bool GetChapterInfo(int chapter, SChapterInfo &info) { return false; }
129
130   virtual float GetActualFPS() { return 0.0f; };
131   virtual void SeekTime(__int64 iTime = 0){};
132   virtual __int64 GetTime(){ return 0;};
133   virtual void ResetTime() {};
134   virtual int GetTotalTime(){ return 0;};
135   virtual int GetAudioBitrate(){ return 0;}
136   virtual int GetVideoBitrate(){ return 0;}
137   virtual int GetSourceBitrate(){ return 0;}
138   virtual int GetChannels(){ return 0;};
139   virtual int GetBitsPerSample(){ return 0;};
140   virtual int GetSampleRate(){ return 0;};
141   virtual CStdString GetAudioCodecName(){ return "";}
142   virtual CStdString GetVideoCodecName(){ return "";}
143   virtual int GetPictureWidth(){ return 0;}
144   virtual bool GetStreamDetails(CStreamDetails &details){ return false;}
145   virtual void ToFFRW(int iSpeed = 0){};
146   // Skip to next track/item inside the current media (if supported).
147   virtual bool SkipNext(){return false;}
148
149   //Returns true if not playback (paused or stopped beeing filled)
150   virtual bool IsCaching() const {return false;};
151   //Cache filled in Percent
152   virtual int GetCacheLevel() const {return -1;};
153
154   virtual bool IsInMenu() const {return false;};
155   virtual bool HasMenu() { return false; };
156
157   virtual void DoAudioWork(){};
158   virtual bool OnAction(const CAction &action) { return false; };
159
160   virtual bool GetCurrentSubtitle(CStdString& strSubtitle) { strSubtitle = ""; return false; }
161   //returns a state that is needed for resuming from a specific time
162   virtual CStdString GetPlayerState() { return ""; };
163   virtual bool SetPlayerState(CStdString state) { return false;};
164   
165   virtual CStdString GetPlayingTitle() { return ""; };
166
167 protected:
168   IPlayerCallback& m_callback;
169 };