12 #include "DVDMessageQueue.h" 15 #include "IVideoPlayer.h" 16 #include "VideoPlayerAudioID3.h" 17 #include "VideoPlayerRadioRDS.h" 18 #include "VideoPlayerSubtitle.h" 19 #include "VideoPlayerTeletext.h" 20 #include "cores/IPlayer.h" 21 #include "cores/MenuType.h" 22 #include "cores/VideoPlayer/Interface/TimingConstants.h" 23 #include "cores/VideoPlayer/VideoRenderers/RenderManager.h" 24 #include "guilib/DispResource.h" 25 #include "threads/SystemClock.h" 26 #include "threads/Thread.h" 31 #include <unordered_map> 46 dts = DVD_NOPTS_VALUE;
49 menuType = MenuType::NONE;
74 std::string player_state;
80 std::vector<std::pair<std::string, int64_t>> chapters;
102 #define DVDSTATE_NORMAL 0x00000001 // normal dvd state 103 #define DVDSTATE_STILL 0x00000002 // currently displaying a still frame 104 #define DVDSTATE_WAIT 0x00000003 // waiting for demuxer read error 105 #define DVDSTATE_SEEK 0x00000004 // we are finishing a seek request 120 unsigned int packets;
121 IDVDStreamPlayer::ESyncState syncState;
125 const StreamType type;
150 source = STREAM_SOURCE_NONE;
151 dts = DVD_NOPTS_VALUE;
152 dur = DVD_NOPTS_VALUE;
158 syncState = IDVDStreamPlayer::SYNC_STARTING;
159 starttime = DVD_NOPTS_VALUE;
160 startpts = DVD_NOPTS_VALUE;
161 lastdts = DVD_NOPTS_VALUE;
162 avsync = AV_SYNC_FORCE;
167 if(dts == DVD_NOPTS_VALUE)
168 return DVD_NOPTS_VALUE;
169 if(dur == DVD_NOPTS_VALUE)
180 StreamType type = STREAM_NONE;
182 std::string filename;
183 std::string filename2;
184 std::string language;
186 StreamFlags flags = StreamFlags::FLAG_NONE;
189 int64_t demuxerId = -1;
198 std::string stereo_mode;
199 float aspect_ratio = 0.0f;
200 StreamHdrType hdrType = StreamHdrType::HDR_TYPE_NONE;
208 int TypeIndexOf(StreamType type,
int source, int64_t demuxerId,
int id)
const;
209 int CountTypeOfSource(StreamType type, StreamSource source)
const;
210 int CountType(StreamType type)
const;
214 void Clear(StreamType type, StreamSource source);
215 int Source(StreamSource source,
const std::string& filename);
217 void Update(
const std::shared_ptr<CDVDInputStream>& input,
CDVDDemux* demuxer);
218 void Update(
const std::shared_ptr<CDVDInputStream>& input,
220 const std::string& filename2);
222 std::vector<SelectionStream> Get(StreamType type);
223 template<
typename Compare> std::vector<SelectionStream> Get(StreamType type, Compare compare)
225 std::vector<SelectionStream> streams = Get(type);
226 std::stable_sort(streams.begin(), streams.end(), compare);
230 std::vector<SelectionStream> m_Streams;
250 bool CloseFile(
bool reopen =
false)
override;
251 bool IsPlaying()
const override;
252 void Pause()
override;
253 bool HasVideo()
const override;
254 bool HasAudio()
const override;
255 bool HasRDS()
const override;
256 bool HasID3()
const override;
257 bool IsPassthrough()
const override;
258 bool CanSeek()
const override;
259 void Seek(
bool bPlus,
bool bLargeStep,
bool bChapterOverride)
override;
260 bool SeekScene(
bool bPlus =
true)
override;
261 void SeekPercentage(
float iPercent)
override;
262 float GetCachePercentage()
const override;
264 void SetDynamicRangeCompression(
long drc)
override;
265 bool CanPause()
const override;
266 void SetAVDelay(
float fValue = 0.0f)
override;
267 float GetAVDelay()
override;
268 bool IsInMenu()
const override;
274 MenuType GetSupportedMenuType()
const override;
276 void SetSubTitleDelay(
float fValue = 0.0f)
override;
277 float GetSubTitleDelay()
override;
278 int GetSubtitleCount()
const override;
279 int GetSubtitle()
override;
281 void SetSubtitle(
int iStream)
override;
282 bool GetSubtitleVisible()
const override;
283 void SetSubtitleVisible(
bool bVisible)
override;
291 void SetSubtitleVerticalPosition(
const int value,
bool save)
override;
293 void AddSubtitle(
const std::string& strSubPath)
override;
295 int GetAudioStreamCount()
const override;
296 int GetAudioStream()
override;
297 void SetAudioStream(
int iStream)
override;
299 int GetVideoStream()
const override;
300 int GetVideoStreamCount()
const override;
301 void GetVideoStreamInfo(
int streamId,
VideoStreamInfo& info)
const override;
302 void SetVideoStream(
int iStream)
override;
304 int GetPrograms(std::vector<ProgramInfo>& programs)
override;
305 void SetProgram(
int progId)
override;
306 int GetProgramsCount()
const override;
308 std::shared_ptr<TextCacheStruct_t> GetTeletextCache()
override;
309 bool HasTeletextCache()
const override;
310 void LoadPage(
int p,
int sp,
unsigned char* buffer)
override;
312 int GetChapterCount()
const override;
313 int GetChapter()
const override;
314 void GetChapterName(std::string& strChapterName,
int chapterIdx = -1)
const override;
315 int64_t GetChapterPos(
int chapterIdx = -1)
const override;
316 int SeekChapter(
int iChapter)
override;
318 void SeekTime(int64_t iTime)
override;
319 bool SeekTimeRelative(int64_t iTime)
override;
320 void SetSpeed(
float speed)
override;
321 void SetTempo(
float tempo)
override;
322 bool SupportsTempo()
const override;
323 void FrameAdvance(
int frames)
override;
324 bool OnAction(
const CAction &action)
override;
326 void GetAudioStreamInfo(
int index,
AudioStreamInfo& info)
const override;
328 std::string GetPlayerState()
override;
329 bool SetPlayerState(
const std::string& state)
override;
331 void FrameMove()
override;
332 void Render(
bool clear, uint32_t alpha = 255,
bool gui =
true)
override;
333 void FlushRenderer()
override;
334 void SetRenderViewMode(
int mode,
float zoom,
float par,
float shift,
bool stretch)
override;
335 float GetRenderAspectRatio()
const override;
336 void TriggerUpdateResolution()
override;
337 bool IsRenderingVideo()
const override;
338 bool Supports(EINTERLACEMETHOD method)
const override;
339 EINTERLACEMETHOD GetDeinterlacingMethodDefault()
const override;
340 bool Supports(ESCALINGMETHOD method)
const override;
341 bool Supports(ERENDERFEATURE feature)
const override;
343 unsigned int RenderCaptureAlloc()
override;
344 void RenderCapture(
unsigned int captureId,
unsigned int width,
unsigned int height,
int flags)
override;
345 void RenderCaptureRelease(
unsigned int captureId)
override;
346 bool RenderCaptureGetPixels(
unsigned int captureId,
unsigned int millis, uint8_t *buffer,
unsigned int size)
override;
349 void OnLostDisplay()
override;
350 void OnResetDisplay()
override;
352 bool IsCaching()
const override;
353 int GetCacheLevel()
const override;
355 int OnDiscNavResult(
void* pData,
int iMessage)
override;
356 void GetVideoResolution(
unsigned int &width,
unsigned int &height)
override;
361 void SetUpdateStreamDetails();
366 void OnStartup()
override;
367 void OnExit()
override;
368 void Process()
override;
369 void VideoParamsChange()
override;
370 void GetDebugInfo(std::string &audio, std::string &video, std::string &general)
override;
371 void UpdateClockSync(
bool enabled)
override;
373 void UpdateRenderBuffers(
int queued,
int discard,
int free)
override;
374 void UpdateGuiRender(
bool gui)
override;
375 void UpdateVideoRender(
bool video)
override;
377 void CreatePlayers();
378 void DestroyPlayers();
381 bool OpenStream(
CCurrentStream& current, int64_t demuxerId,
int iStream,
int source,
bool reset =
true);
392 void AdaptForcedSubtitles();
404 int AddSubtitleFile(
const std::string& filename,
const std::string& subfilename =
"");
405 void SetSubtitleVisibleInternal(
bool bVisible);
410 void SetPlaySpeed(
int iSpeed);
421 void SetCaching(ECacheState state);
423 double GetQueueTime();
424 bool GetCachingTimes(
double& play_left,
double& cache_left,
double& file_offset);
426 void FlushBuffers(
double pts,
bool accurate,
bool sync);
428 void HandleMessages();
429 void HandlePlaySpeed();
430 bool IsInMenuInternal()
const;
431 void SynchronizeDemuxer();
432 void CheckAutoSceneSkip();
436 void UpdateCorrection(
DemuxPacket* pkt,
double correction);
439 void SendPlayerMessage(std::shared_ptr<CDVDMsg> pMsg,
unsigned int target);
447 bool OpenInputStream();
448 bool OpenDemuxStream();
450 void OpenDefaultStreams(
bool reset =
true);
452 void UpdatePlayState(
double timeout);
453 void GetGeneralInfo(std::string& strVideoInfo);
454 int64_t GetUpdatedTime();
456 float GetPercentage();
458 void UpdateContent();
459 void UpdateContentState();
461 void UpdateFileItemStreamDetails(
CFileItem& item);
463 bool m_players_created;
467 bool m_bAbortRequest;
469 bool m_bCloseRequest;
471 ECacheState m_caching;
474 std::unique_ptr<CProcessInfo> m_processInfo;
484 std::vector<ProgramInfo> m_programs;
488 mutable CCriticalSection m_section;
490 std::vector<ProgramInfo> m_programs;
498 int m_streamPlayerSpeed;
499 int m_demuxerSpeed = DVD_PLAYSPEED_NORMAL;
511 std::unique_ptr<CJobQueue> m_outboundEvents;
518 std::unique_ptr<CVideoPlayerAudioID3> m_VideoPlayerAudioID3;
523 std::shared_ptr<CDVDInputStream> m_pInputStream;
524 std::unique_ptr<CDVDDemux> m_pDemuxer;
525 std::shared_ptr<CDVDDemux> m_pSubtitleDemuxer;
526 std::unordered_map<int64_t, std::shared_ptr<CDVDDemux>> m_subtitleDemuxerMap;
527 std::unique_ptr<CDVDDemuxCC> m_pCCDemuxer;
535 state = DVDSTATE_NORMAL;
536 iSelectedSPUStream = -1;
537 iSelectedAudioStream = -1;
538 iSelectedVideoStream = -1;
539 iDVDStillTime = std::chrono::milliseconds::zero();
540 iDVDStillStartTime = {};
546 std::chrono::milliseconds
548 std::chrono::time_point<std::chrono::steady_clock>
550 int iSelectedSPUStream;
551 int iSelectedAudioStream;
552 int iSelectedVideoStream;
556 mutable CCriticalSection m_StateSection;
560 bool m_SkipCommercials;
565 bool m_UpdateStreamDetails;
567 std::atomic<bool> m_displayLost;
Definition: IVideoPlayer.h:28
Definition: DVDDemux.h:219
Definition: StreamInfo.h:65
Definition: DVDStreamInfo.h:23
Definition: IVideoPlayer.h:36
Definition: VideoPlayer.h:531
Definition: VideoPlayer.h:35
Definition: DispResource.h:26
Definition: VideoPlayer.h:243
Definition: RenderInfo.h:19
Definition: VideoPlayerRadioRDS.h:36
Definition: VideoPlayer.h:486
Definition: DVDMessageQueue.h:48
Definition: VideoPlayerSubtitle.h:24
Definition: IVideoPlayer.h:75
Definition: VideoPlayer.h:107
Definition: SystemClock.h:31
Definition: StreamInfo.h:55
Definition: DVDDemux.h:155
Definition: VideoPlayer.h:178
Definition: VideoPlayer.h:500
Definition: DVDDemux.h:124
Definition: StreamInfo.h:62
Definition: VideoPlayerTeletext.h:18
class encapsulating information regarding a particular user action to be sent to windows and controls...
Definition: Action.h:22
Definition: DispResource.h:14
Definition: RenderManager.h:54
Definition: DVDDemuxCC.h:19
Definition: VideoPlayer.h:203
Definition: ProcessInfo.h:26
Definition: IPlayerCallback.h:18
Definition: settings.py:1
Definition: DVDClock.h:18
Definition: DVDDemux.h:70
Definition: DemuxPacket.h:22
Definition: DVDOverlayContainer.h:19
Definition: VideoSettings.h:194
Definition: IVideoPlayer.h:102
Definition: RenderManager.h:38
Represents a file on a share.
Definition: FileItem.h:102
Job Queue class to handle a queue of unique jobs to be processed sequentially.
Definition: JobManager.h:63