3 * Copyright (C) 2011-2013 Team XBMC
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)
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.
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/>.
23 #include "cores/IPlayer.h"
24 #include "dialogs/GUIDialogBusy.h"
25 #include "threads/Thread.h"
27 typedef struct AMLChapterInfo AMLChapterInfo;
28 typedef struct AMLPlayerStreamInfo AMLPlayerStreamInfo;
29 typedef struct player_info player_info_t;
40 class CAMLSubTitleThread : public CThread
43 CAMLSubTitleThread(DllLibAmplayer* dll);
44 virtual ~CAMLSubTitleThread();
47 void UpdateSubtitle(CStdString &subtitle, int64_t elapsed_ms);
49 virtual void Process(void);
51 DllLibAmplayer *m_dll;
53 std::deque<AMLSubtitle*> m_subtitle_strings;
54 CCriticalSection m_subtitle_csection;
57 class CDVDPlayerSubtitle;
58 class CDVDOverlayContainer;
60 class CAMLPlayer : public IPlayer, public CThread
64 CAMLPlayer(IPlayerCallback &callback);
65 virtual ~CAMLPlayer();
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;
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;};
97 virtual void SetAVDelay(float fValue = 0.0f);
98 virtual float GetAVDelay();
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);
110 virtual int GetAudioStreamCount();
111 virtual int GetAudioStream();
112 virtual void SetAudioStream(int iStream);
114 virtual TextCacheStruct_t* GetTeletextCache() {return NULL;};
115 virtual void LoadPage(int p, int sp, unsigned char* buffer) {};
117 virtual int GetChapterCount();
118 virtual int GetChapter();
119 virtual void GetChapterName(CStdString& strChapterName);
120 virtual int SeekChapter(int iChapter);
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;}
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;};
143 virtual bool IsInMenu() const {return false;};
144 virtual bool HasMenu() {return false;};
146 virtual void DoAudioWork() {};
147 virtual bool OnAction(const CAction &action) {return false;};
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;};
154 virtual CStdString GetPlayingTitle() {return "";};
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);
164 virtual void OnStartup();
165 virtual void OnExit();
166 virtual void Process();
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);
178 int GetPlayerSerializedState(void);
179 static int UpdatePlayerInfo(int pid, player_info_t *info);
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();
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);
195 DllLibAmplayer *m_dll;
199 bool m_bAbortRequest;
202 CPlayerOptions m_options;
205 int64_t m_elapsed_ms;
206 int64_t m_duration_ms;
210 CStdString m_audio_info;
212 bool m_audio_passthrough_ac3;
213 bool m_audio_passthrough_dts;
215 float m_audio_volume;
219 CStdString m_video_info;
222 float m_video_fps_numerator;
223 float m_video_fps_denominator;
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;
235 int m_show_mainvideo;
242 CCriticalSection m_aml_csection;
243 CCriticalSection m_aml_state_csection;
244 std::deque<int> m_aml_state;
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;