ccbe7a4a2f45f6c7e8c78740e7289ab02ba35541
[vuplus_xbmc] / xbmc / cores / amlplayer / AMLPlayer.h
1 #pragma once
2 /*
3  *      Copyright (C) 2011-2013 Team XBMC
4  *      http://xbmc.org
5  *
6  *  This Program is free software; you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation; either version 2, or (at your option)
9  *  any later version.
10  *
11  *  This Program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with XBMC; see the file COPYING.  If not, see
18  *  <http://www.gnu.org/licenses/>.
19  *
20  */
21
22 #include "FileItem.h"
23 #include "cores/IPlayer.h"
24 #include "dialogs/GUIDialogBusy.h"
25 #include "threads/Thread.h"
26
27 typedef struct AMLChapterInfo AMLChapterInfo;
28 typedef struct AMLPlayerStreamInfo AMLPlayerStreamInfo;
29 typedef struct player_info player_info_t;
30
31 struct AMLSubtitle
32 {
33   int64_t     bgntime;
34   int64_t     endtime;
35   CStdString  string;
36 };
37
38 class DllLibAmplayer;
39
40 class CAMLSubTitleThread : public CThread
41 {
42 public:
43   CAMLSubTitleThread(DllLibAmplayer* dll);
44   virtual ~CAMLSubTitleThread();
45
46   void         Flush();
47   void         UpdateSubtitle(CStdString &subtitle, int64_t elapsed_ms);
48 protected:
49   virtual void Process(void);
50
51   DllLibAmplayer           *m_dll;
52   int                       m_subtitle_codec;
53   std::deque<AMLSubtitle*>  m_subtitle_strings;
54   CCriticalSection          m_subtitle_csection;
55 };
56
57 class CDVDPlayerSubtitle;
58 class CDVDOverlayContainer;
59
60 class CAMLPlayer : public IPlayer, public CThread
61 {
62 public:
63
64   CAMLPlayer(IPlayerCallback &callback);
65   virtual ~CAMLPlayer();
66   
67   virtual void  RegisterAudioCallback(IAudioCallback* pCallback) {}
68   virtual void  UnRegisterAudioCallback()                        {}
69   virtual bool  OpenFile(const CFileItem &file, const CPlayerOptions &options);
70   virtual bool  QueueNextFile(const CFileItem &file)             {return false;}
71   virtual void  OnNothingToQueueNotify()                         {}
72   virtual bool  CloseFile();
73   virtual bool  IsPlaying() const;
74   virtual void  Pause();
75   virtual bool  IsPaused() const;
76   virtual bool  HasVideo() const;
77   virtual bool  HasAudio() const;
78   virtual void  ToggleFrameDrop();
79   virtual bool  CanSeek();
80   virtual void  Seek(bool bPlus = true, bool bLargeStep = false, bool bChapterOverride = true);
81   virtual bool  SeekScene(bool bPlus = true);
82   virtual void  SeekPercentage(float fPercent = 0.0f);
83   virtual float GetPercentage();
84   virtual void  SetMute(bool bOnOff);
85   virtual bool  ControlsVolume() {return true;}
86   virtual void  SetVolume(float volume);
87   virtual void  SetDynamicRangeCompression(long drc)              {}
88   virtual void  GetAudioInfo(CStdString &strAudioInfo);
89   virtual void  GetVideoInfo(CStdString &strVideoInfo);
90   virtual void  GetGeneralInfo(CStdString &strVideoInfo) {};
91   virtual void  GetVideoRect(CRect& SrcRect, CRect& DestRect);
92   virtual void  GetVideoAspectRatio(float &fAR);
93   virtual bool  CanRecord()                                       {return false;};
94   virtual bool  IsRecording()                                     {return false;};
95   virtual bool  Record(bool bOnOff)                               {return false;};
96
97   virtual void  SetAVDelay(float fValue = 0.0f);
98   virtual float GetAVDelay();
99
100   virtual void  SetSubTitleDelay(float fValue);
101   virtual float GetSubTitleDelay();
102   virtual int   GetSubtitleCount();
103   virtual int   GetSubtitle();
104   virtual void  GetSubtitleStreamInfo(int index, SPlayerSubtitleStreamInfo &info);
105   virtual void  SetSubtitle(int iStream);
106   virtual bool  GetSubtitleVisible();
107   virtual void  SetSubtitleVisible(bool bVisible);
108   virtual int   AddSubtitle(const CStdString& strSubPath);
109
110   virtual int   GetAudioStreamCount();
111   virtual int   GetAudioStream();
112   virtual void  SetAudioStream(int iStream);
113
114   virtual TextCacheStruct_t* GetTeletextCache()                   {return NULL;};
115   virtual void  LoadPage(int p, int sp, unsigned char* buffer)    {};
116
117   virtual int   GetChapterCount();
118   virtual int   GetChapter();
119   virtual void  GetChapterName(CStdString& strChapterName);
120   virtual int   SeekChapter(int iChapter);
121
122   virtual float GetActualFPS();
123   virtual void  SeekTime(int64_t iTime = 0);
124   virtual int64_t GetTime();
125   virtual int64_t GetTotalTime();
126   virtual void  GetAudioStreamInfo(int index, SPlayerAudioStreamInfo &info);
127   virtual void  GetVideoStreamInfo(SPlayerVideoStreamInfo &info);
128   virtual int   GetSourceBitrate();
129   virtual int   GetBitsPerSample();
130   virtual int   GetSampleRate();
131   virtual int   GetPictureWidth();
132   virtual int   GetPictureHeight();
133   virtual bool  GetStreamDetails(CStreamDetails &details);
134   virtual void  ToFFRW(int iSpeed = 0);
135   // Skip to next track/item inside the current media (if supported).
136   virtual bool  SkipNext()                                        {return false;}
137
138   //Returns true if not playback (paused or stopped beeing filled)
139   virtual bool  IsCaching() const                                 {return false;};
140   //Cache filled in Percent
141   virtual int   GetCacheLevel() const                             {return -1;};
142
143   virtual bool  IsInMenu() const                                  {return false;};
144   virtual bool  HasMenu()                                         {return false;};
145
146   virtual void  DoAudioWork()                                     {};
147   virtual bool  OnAction(const CAction &action)                   {return false;};
148
149   virtual bool  GetCurrentSubtitle(CStdString& strSubtitle);
150   //returns a state that is needed for resuming from a specific time
151   virtual CStdString GetPlayerState()                             {return "";};
152   virtual bool  SetPlayerState(CStdString state)                  {return false;};
153
154   virtual CStdString GetPlayingTitle()                            {return "";};
155
156   virtual void  GetRenderFeatures(std::vector<int> &renderFeatures);
157   virtual void  GetDeinterlaceMethods(std::vector<int> &deinterlaceMethods);
158   virtual void  GetDeinterlaceModes(std::vector<int> &deinterlaceModes);
159   virtual void  GetScalingMethods(std::vector<int> &scalingMethods);
160   virtual void  GetAudioCapabilities(std::vector<int> &audioCaps);
161   virtual void  GetSubtitleCapabilities(std::vector<int> &subCaps);
162
163 protected:
164   virtual void  OnStartup();
165   virtual void  OnExit();
166   virtual void  Process();
167
168 private:
169   int           GetVideoStreamCount();
170   void          ShowMainVideo(bool show);
171   void          SetVideoZoom(float zoom);
172   void          SetVideoContrast(int contrast);
173   void          SetVideoBrightness(int brightness);
174   void          SetVideoSaturation(int saturation);
175   void          SetAudioPassThrough(int format);
176   bool          WaitForPausedThumbJobs(int timeout_ms);
177
178   int           GetPlayerSerializedState(void);
179   static int    UpdatePlayerInfo(int pid, player_info_t *info);
180   bool          CheckPlaying();
181   bool          WaitForStopped(int timeout_ms);
182   bool          WaitForSearchOK(int timeout_ms);
183   bool          WaitForPlaying(int timeout_ms);
184   bool          WaitForOpenMedia(int timeout_ms);
185   bool          WaitForFormatValid(int timeout_ms);
186   void          ClearStreamInfos();
187   bool          GetStatus();
188
189   void          FindSubtitleFiles();
190   int           AddSubtitleFile(const std::string& filename, const std::string& subfilename = "");
191   bool          OpenSubtitleStream(int index);
192   void          SetVideoRect(const CRect &SrcRect, const CRect &DestRect);
193   static void   RenderUpdateCallBack(const void *ctx, const CRect &SrcRect, const CRect &DestRect);
194
195   DllLibAmplayer         *m_dll;
196   int                     m_cpu;
197   int                     m_speed;
198   bool                    m_paused;
199   bool                    m_bAbortRequest;
200   CEvent                  m_ready;
201   CFileItem               m_item;
202   CPlayerOptions          m_options;
203   int                     m_log_level;
204
205   int64_t                 m_elapsed_ms;
206   int64_t                 m_duration_ms;
207
208   int                     m_audio_index;
209   int                     m_audio_count;
210   CStdString              m_audio_info;
211   int                     m_audio_delay;
212   bool                    m_audio_passthrough_ac3;
213   bool                    m_audio_passthrough_dts;
214   bool                    m_audio_mute;
215   float                   m_audio_volume;
216
217   int                     m_video_index;
218   int                     m_video_count;
219   CStdString              m_video_info;
220   int                     m_video_width;
221   int                     m_video_height;
222   float                   m_video_fps_numerator;
223   float                   m_video_fps_denominator;
224
225   int                     m_subtitle_index;
226   int                     m_subtitle_count;
227   bool                    m_subtitle_show;
228   int                     m_subtitle_delay;
229   CAMLSubTitleThread     *m_subtitle_thread;
230   CDVDPlayerSubtitle     *m_dvdPlayerSubtitle;
231   CDVDOverlayContainer   *m_dvdOverlayContainer;
232
233   int                     m_chapter_count;
234
235   int                     m_show_mainvideo;
236   CRect                   m_dst_rect;
237   int                     m_view_mode;
238   float                   m_zoom;
239   int                     m_contrast;
240   int                     m_brightness;
241
242   CCriticalSection        m_aml_csection;
243   CCriticalSection        m_aml_state_csection;
244   std::deque<int>         m_aml_state;
245   int                     m_pid;
246
247   std::vector<AMLPlayerStreamInfo*> m_video_streams;
248   std::vector<AMLPlayerStreamInfo*> m_audio_streams;
249   std::vector<AMLPlayerStreamInfo*> m_subtitle_streams;
250   std::vector<AMLChapterInfo*>      m_chapters;
251
252 };