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;
73 std::string player_state;
79 std::vector<std::pair<std::string, int64_t>> chapters;
101 #define DVDSTATE_NORMAL 0x00000001 // normal dvd state 102 #define DVDSTATE_STILL 0x00000002 // currently displaying a still frame 103 #define DVDSTATE_WAIT 0x00000003 // waiting for demuxer read error 104 #define DVDSTATE_SEEK 0x00000004 // we are finishing a seek request 119 unsigned int packets;
120 IDVDStreamPlayer::ESyncState syncState;
124 const StreamType type;
149 source = STREAM_SOURCE_NONE;
150 dts = DVD_NOPTS_VALUE;
151 dur = DVD_NOPTS_VALUE;
157 syncState = IDVDStreamPlayer::SYNC_STARTING;
158 starttime = DVD_NOPTS_VALUE;
159 startpts = DVD_NOPTS_VALUE;
160 lastdts = DVD_NOPTS_VALUE;
161 avsync = AV_SYNC_FORCE;
166 if(dts == DVD_NOPTS_VALUE)
167 return DVD_NOPTS_VALUE;
168 if(dur == DVD_NOPTS_VALUE)
179 StreamType type = STREAM_NONE;
181 std::string filename;
182 std::string filename2;
183 std::string language;
185 StreamFlags flags = StreamFlags::FLAG_NONE;
188 int64_t demuxerId = -1;
197 std::string stereo_mode;
198 float aspect_ratio = 0.0f;
199 StreamHdrType hdrType = StreamHdrType::HDR_TYPE_NONE;
207 int TypeIndexOf(StreamType type,
int source, int64_t demuxerId,
int id)
const;
208 int CountTypeOfSource(StreamType type, StreamSource source)
const;
209 int CountType(StreamType type)
const;
213 void Clear(StreamType type, StreamSource source);
214 int Source(StreamSource source,
const std::string& filename);
216 void Update(
const std::shared_ptr<CDVDInputStream>& input,
CDVDDemux* demuxer);
217 void Update(
const std::shared_ptr<CDVDInputStream>& input,
219 const std::string& filename2);
221 std::vector<SelectionStream> Get(StreamType type);
222 template<
typename Compare> std::vector<SelectionStream> Get(StreamType type, Compare compare)
224 std::vector<SelectionStream> streams = Get(type);
225 std::stable_sort(streams.begin(), streams.end(), compare);
229 std::vector<SelectionStream> m_Streams;
257 bool CloseFile(
bool reopen =
false)
override;
258 bool IsPlaying()
const override;
259 void Pause()
override;
260 bool HasVideo()
const override;
261 bool HasAudio()
const override;
262 bool HasRDS()
const override;
263 bool HasID3()
const override;
264 bool IsPassthrough()
const override;
265 bool CanSeek()
const override;
266 void Seek(
bool bPlus,
bool bLargeStep,
bool bChapterOverride)
override;
267 bool SeekScene(
bool bPlus =
true)
override;
268 void SeekPercentage(
float iPercent)
override;
269 float GetCachePercentage()
const override;
271 void SetDynamicRangeCompression(
long drc)
override;
272 bool CanPause()
const override;
273 void SetAVDelay(
float fValue = 0.0f)
override;
274 float GetAVDelay()
override;
275 bool IsInMenu()
const override;
281 MenuType GetSupportedMenuType()
const override;
283 void SetSubTitleDelay(
float fValue = 0.0f)
override;
284 float GetSubTitleDelay()
override;
285 int GetSubtitleCount()
const override;
286 int GetSubtitle()
override;
288 void SetSubtitle(
int iStream)
override;
289 bool GetSubtitleVisible()
const override;
290 void SetSubtitleVisible(
bool bVisible)
override;
298 void SetSubtitleVerticalPosition(
const int value,
bool save)
override;
300 void AddSubtitle(
const std::string& strSubPath)
override;
302 int GetAudioStreamCount()
const override;
303 int GetAudioStream()
override;
304 void SetAudioStream(
int iStream)
override;
306 int GetVideoStream()
const override;
307 int GetVideoStreamCount()
const override;
308 void GetVideoStreamInfo(
int streamId,
VideoStreamInfo& info)
const override;
309 void SetVideoStream(
int iStream)
override;
311 int GetPrograms(std::vector<ProgramInfo>& programs)
override;
312 void SetProgram(
int progId)
override;
313 int GetProgramsCount()
const override;
315 std::shared_ptr<TextCacheStruct_t> GetTeletextCache()
override;
316 bool HasTeletextCache()
const override;
317 void LoadPage(
int p,
int sp,
unsigned char* buffer)
override;
319 int GetChapterCount()
const override;
320 int GetChapter()
const override;
321 void GetChapterName(std::string& strChapterName,
int chapterIdx = -1)
const override;
322 int64_t GetChapterPos(
int chapterIdx = -1)
const override;
323 int SeekChapter(
int iChapter)
override;
325 void SeekTime(int64_t iTime)
override;
326 bool SeekTimeRelative(int64_t iTime)
override;
327 void SetSpeed(
float speed)
override;
328 void SetTempo(
float tempo)
override;
329 bool SupportsTempo()
const override;
330 void FrameAdvance(
int frames)
override;
331 bool OnAction(
const CAction &action)
override;
333 void GetAudioStreamInfo(
int index,
AudioStreamInfo& info)
const override;
335 std::string GetPlayerState()
override;
336 bool SetPlayerState(
const std::string& state)
override;
338 void FrameMove()
override;
339 void Render(
bool clear, uint32_t alpha = 255,
bool gui =
true)
override;
340 void FlushRenderer()
override;
341 void SetRenderViewMode(
int mode,
float zoom,
float par,
float shift,
bool stretch)
override;
342 float GetRenderAspectRatio()
const override;
344 unsigned int GetOrientation()
const override;
345 void TriggerUpdateResolution()
override;
346 bool IsRenderingVideo()
const override;
347 bool Supports(EINTERLACEMETHOD method)
const override;
348 EINTERLACEMETHOD GetDeinterlacingMethodDefault()
const override;
349 bool Supports(ESCALINGMETHOD method)
const override;
350 bool Supports(ERENDERFEATURE feature)
const override;
352 unsigned int RenderCaptureAlloc()
override;
353 void RenderCapture(
unsigned int captureId,
unsigned int width,
unsigned int height,
int flags)
override;
354 void RenderCaptureRelease(
unsigned int captureId)
override;
355 bool RenderCaptureGetPixels(
unsigned int captureId,
unsigned int millis, uint8_t *buffer,
unsigned int size)
override;
358 void OnLostDisplay()
override;
359 void OnResetDisplay()
override;
361 bool IsCaching()
const override;
362 int GetCacheLevel()
const override;
364 int OnDiscNavResult(
void* pData,
int iMessage)
override;
365 void GetVideoResolution(
unsigned int &width,
unsigned int &height)
override;
370 void SetUpdateStreamDetails();
375 void OnStartup()
override;
376 void OnExit()
override;
377 void Process()
override;
378 void VideoParamsChange()
override;
379 void GetDebugInfo(std::string &audio, std::string &video, std::string &general)
override;
380 void UpdateClockSync(
bool enabled)
override;
382 void UpdateRenderBuffers(
int queued,
int discard,
int free)
override;
383 void UpdateGuiRender(
bool gui)
override;
384 void UpdateVideoRender(
bool video)
override;
386 void CreatePlayers();
387 void DestroyPlayers();
390 bool OpenStream(
CCurrentStream& current, int64_t demuxerId,
int iStream,
int source,
bool reset =
true);
401 void AdaptForcedSubtitles();
413 int AddSubtitleFile(
const std::string& filename,
const std::string& subfilename =
"");
422 void SetSubtitleVisibleInternal(
bool bVisible);
427 void SetPlaySpeed(
int iSpeed);
438 void SetCaching(ECacheState state);
440 double GetQueueTime();
443 void FlushBuffers(
double pts,
bool accurate,
bool sync);
445 void HandleMessages();
446 void HandlePlaySpeed();
447 bool IsInMenuInternal()
const;
448 void SynchronizeDemuxer();
449 void CheckAutoSceneSkip();
453 void UpdateCorrection(
DemuxPacket* pkt,
double correction);
456 void SendPlayerMessage(std::shared_ptr<CDVDMsg> pMsg,
unsigned int target);
464 bool OpenInputStream();
465 bool OpenDemuxStream();
467 void OpenDefaultStreams(
bool reset =
true);
469 void UpdatePlayState(
double timeout);
470 void GetGeneralInfo(std::string& strVideoInfo);
471 int64_t GetUpdatedTime();
473 float GetPercentage();
475 void UpdateContent();
476 void UpdateContentState();
478 void UpdateFileItemStreamDetails(
CFileItem& item);
479 int GetPreviousChapter();
481 bool m_players_created;
485 bool m_bAbortRequest;
487 bool m_bCloseRequest;
489 ECacheState m_caching;
492 std::unique_ptr<CProcessInfo> m_processInfo;
502 std::vector<ProgramInfo> m_programs;
506 mutable CCriticalSection m_section;
508 std::vector<ProgramInfo> m_programs;
509 int m_videoIndex{-1};
510 int m_audioIndex{-1};
511 int m_subtitleIndex{-1};
515 int m_streamPlayerSpeed;
516 int m_demuxerSpeed = DVD_PLAYSPEED_NORMAL;
521 double lastseekpts{0.0};
522 double lastabstime{0.0};
524 void Reset(
double pts)
527 if (pts != DVD_NOPTS_VALUE)
537 std::unique_ptr<CJobQueue> m_outboundEvents;
544 std::unique_ptr<CVideoPlayerAudioID3> m_VideoPlayerAudioID3;
549 std::shared_ptr<CDVDInputStream> m_pInputStream;
550 std::unique_ptr<CDVDDemux> m_pDemuxer;
551 std::shared_ptr<CDVDDemux> m_pSubtitleDemuxer;
552 std::unordered_map<int64_t, std::shared_ptr<CDVDDemux>> m_subtitleDemuxerMap;
553 std::unique_ptr<CDVDDemuxCC> m_pCCDemuxer;
561 state = DVDSTATE_NORMAL;
562 iSelectedSPUStream = -1;
563 iSelectedAudioStream = -1;
564 iSelectedVideoStream = -1;
565 iDVDStillTime = std::chrono::milliseconds::zero();
566 iDVDStillStartTime = {};
572 std::chrono::milliseconds
574 std::chrono::time_point<std::chrono::steady_clock>
576 int iSelectedSPUStream;
577 int iSelectedAudioStream;
578 int iSelectedVideoStream;
582 mutable CCriticalSection m_StateSection;
586 bool m_SkipCommercials;
591 bool m_UpdateStreamDetails;
593 std::atomic<bool> m_displayLost;
Definition: IVideoPlayer.h:28
Definition: DVDDemux.h:221
Definition: StreamInfo.h:65
Definition: DVDStreamInfo.h:25
Definition: IVideoPlayer.h:36
Definition: VideoPlayer.h:557
Definition: VideoPlayer.h:35
Definition: DispResource.h:26
Definition: VideoPlayer.h:250
Definition: RenderInfo.h:19
Definition: VideoPlayerRadioRDS.h:36
Definition: VideoPlayer.h:504
Definition: DVDMessageQueue.h:48
Definition: VideoPlayerSubtitle.h:24
Definition: IVideoPlayer.h:75
Definition: VideoPlayer.h:106
Definition: SystemClock.h:31
Definition: StreamInfo.h:55
Definition: DVDDemux.h:157
Definition: VideoPlayer.h:177
Definition: VideoPlayer.h:517
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:21
Definition: DispResource.h:14
Definition: RenderManager.h:54
Definition: DVDDemuxCC.h:19
Definition: VideoPlayer.h:202
Definition: ProcessInfo.h:26
Definition: IPlayerCallback.h:18
Definition: settings.py:1
Definition: DVDClock.h:18
Definition: VideoPlayer.h:239
Definition: DVDDemux.h:72
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