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;
103 #define DVDSTATE_NORMAL 0x00000001 // normal dvd state 104 #define DVDSTATE_STILL 0x00000002 // currently displaying a still frame 105 #define DVDSTATE_WAIT 0x00000003 // waiting for demuxer read error 106 #define DVDSTATE_SEEK 0x00000004 // we are finishing a seek request 121 unsigned int packets;
122 IDVDStreamPlayer::ESyncState syncState;
126 const StreamType type;
151 source = STREAM_SOURCE_NONE;
152 dts = DVD_NOPTS_VALUE;
153 dur = DVD_NOPTS_VALUE;
159 syncState = IDVDStreamPlayer::SYNC_STARTING;
160 starttime = DVD_NOPTS_VALUE;
161 startpts = DVD_NOPTS_VALUE;
162 lastdts = DVD_NOPTS_VALUE;
163 avsync = AV_SYNC_FORCE;
168 if(dts == DVD_NOPTS_VALUE)
169 return DVD_NOPTS_VALUE;
170 if(dur == DVD_NOPTS_VALUE)
181 StreamType type = STREAM_NONE;
183 std::string filename;
184 std::string filename2;
185 std::string language;
187 StreamFlags flags = StreamFlags::FLAG_NONE;
190 int64_t demuxerId = -1;
199 std::string stereo_mode;
200 float aspect_ratio = 0.0f;
201 StreamHdrType hdrType = StreamHdrType::HDR_TYPE_NONE;
209 int TypeIndexOf(StreamType type,
int source, int64_t demuxerId,
int id)
const;
210 int CountTypeOfSource(StreamType type, StreamSource source)
const;
211 int CountType(StreamType type)
const;
215 void Clear(StreamType type, StreamSource source);
216 int Source(StreamSource source,
const std::string& filename);
218 void Update(
const std::shared_ptr<CDVDInputStream>& input,
CDVDDemux* demuxer);
219 void Update(
const std::shared_ptr<CDVDInputStream>& input,
221 const std::string& filename2);
223 std::vector<SelectionStream> Get(StreamType type);
224 template<
typename Compare> std::vector<SelectionStream> Get(StreamType type, Compare compare)
226 std::vector<SelectionStream> streams = Get(type);
227 std::stable_sort(streams.begin(), streams.end(), compare);
231 std::vector<SelectionStream> m_Streams;
260 bool CloseFile(
bool reopen =
false)
override;
261 bool IsPlaying()
const override;
262 void Pause()
override;
263 bool HasVideo()
const override;
264 bool HasAudio()
const override;
265 bool HasRDS()
const override;
266 bool HasID3()
const override;
267 bool IsPassthrough()
const override;
268 bool CanSeek()
const override;
269 void Seek(
bool bPlus,
bool bLargeStep,
bool bChapterOverride)
override;
270 bool SeekScene(
bool bPlus =
true)
override;
271 void SeekPercentage(
float iPercent)
override;
272 float GetCachePercentage()
const override;
274 void SetDynamicRangeCompression(
long drc)
override;
275 bool CanPause()
const override;
276 void SetAVDelay(
float fValue = 0.0f)
override;
277 float GetAVDelay()
override;
278 bool IsInMenu()
const override;
284 MenuType GetSupportedMenuType()
const override;
286 void SetSubTitleDelay(
float fValue = 0.0f)
override;
287 float GetSubTitleDelay()
override;
288 int GetSubtitleCount()
const override;
289 int GetSubtitle()
override;
291 void SetSubtitle(
int iStream)
override;
292 bool GetSubtitleVisible()
const override;
293 void SetSubtitleVisible(
bool bVisible)
override;
301 void SetSubtitleVerticalPosition(
const int value,
bool save)
override;
303 void AddSubtitle(
const std::string& strSubPath)
override;
305 int GetAudioStreamCount()
const override;
306 int GetAudioStream()
override;
307 void SetAudioStream(
int iStream)
override;
309 int GetVideoStream()
const override;
310 int GetVideoStreamCount()
const override;
311 void GetVideoStreamInfo(
int streamId,
VideoStreamInfo& info)
const override;
312 void SetVideoStream(
int iStream)
override;
314 int GetPrograms(std::vector<ProgramInfo>& programs)
override;
315 void SetProgram(
int progId)
override;
316 int GetProgramsCount()
const override;
318 std::shared_ptr<TextCacheStruct_t> GetTeletextCache()
override;
319 bool HasTeletextCache()
const override;
320 void LoadPage(
int p,
int sp,
unsigned char* buffer)
override;
322 int GetChapterCount()
const override;
323 int GetChapter()
const override;
324 void GetChapterName(std::string& strChapterName,
int chapterIdx = -1)
const override;
325 int64_t GetChapterPos(
int chapterIdx = -1)
const override;
326 int SeekChapter(
int iChapter)
override;
328 void SeekTime(int64_t iTime)
override;
329 bool SeekTimeRelative(int64_t iTime)
override;
330 void SetSpeed(
float speed)
override;
331 void SetTempo(
float tempo)
override;
332 bool SupportsTempo()
const override;
333 void FrameAdvance(
int frames)
override;
334 bool OnAction(
const CAction &action)
override;
336 void GetAudioStreamInfo(
int index,
AudioStreamInfo& info)
const override;
338 std::string GetPlayerState()
override;
339 bool SetPlayerState(
const std::string& state)
override;
341 void FrameMove()
override;
342 void Render(
bool clear, uint32_t alpha = 255,
bool gui =
true)
override;
343 void FlushRenderer()
override;
344 void SetRenderViewMode(
int mode,
float zoom,
float par,
float shift,
bool stretch)
override;
345 float GetRenderAspectRatio()
const override;
346 void TriggerUpdateResolution()
override;
347 bool IsRenderingVideo()
const override;
348 bool Supports(EINTERLACEMETHOD method)
const override;
349 EINTERLACEMETHOD GetDeinterlacingMethodDefault()
const override;
350 bool Supports(ESCALINGMETHOD method)
const override;
351 bool Supports(ERENDERFEATURE feature)
const override;
353 unsigned int RenderCaptureAlloc()
override;
354 void RenderCapture(
unsigned int captureId,
unsigned int width,
unsigned int height,
int flags)
override;
355 void RenderCaptureRelease(
unsigned int captureId)
override;
356 bool RenderCaptureGetPixels(
unsigned int captureId,
unsigned int millis, uint8_t *buffer,
unsigned int size)
override;
359 void OnLostDisplay()
override;
360 void OnResetDisplay()
override;
362 bool IsCaching()
const override;
363 int GetCacheLevel()
const override;
365 int OnDiscNavResult(
void* pData,
int iMessage)
override;
366 void GetVideoResolution(
unsigned int &width,
unsigned int &height)
override;
371 void SetUpdateStreamDetails();
376 void OnStartup()
override;
377 void OnExit()
override;
378 void Process()
override;
379 void VideoParamsChange()
override;
380 void GetDebugInfo(std::string &audio, std::string &video, std::string &general)
override;
381 void UpdateClockSync(
bool enabled)
override;
383 void UpdateRenderBuffers(
int queued,
int discard,
int free)
override;
384 void UpdateGuiRender(
bool gui)
override;
385 void UpdateVideoRender(
bool video)
override;
387 void CreatePlayers();
388 void DestroyPlayers();
391 bool OpenStream(
CCurrentStream& current, int64_t demuxerId,
int iStream,
int source,
bool reset =
true);
402 void AdaptForcedSubtitles();
414 int AddSubtitleFile(
const std::string& filename,
const std::string& subfilename =
"");
415 void SetSubtitleVisibleInternal(
bool bVisible);
420 void SetPlaySpeed(
int iSpeed);
431 void SetCaching(ECacheState state);
433 double GetQueueTime();
436 void FlushBuffers(
double pts,
bool accurate,
bool sync);
438 void HandleMessages();
439 void HandlePlaySpeed();
440 bool IsInMenuInternal()
const;
441 void SynchronizeDemuxer();
442 void CheckAutoSceneSkip();
446 void UpdateCorrection(
DemuxPacket* pkt,
double correction);
449 void SendPlayerMessage(std::shared_ptr<CDVDMsg> pMsg,
unsigned int target);
457 bool OpenInputStream();
458 bool OpenDemuxStream();
460 void OpenDefaultStreams(
bool reset =
true);
462 void UpdatePlayState(
double timeout);
463 void GetGeneralInfo(std::string& strVideoInfo);
464 int64_t GetUpdatedTime();
466 float GetPercentage();
468 void UpdateContent();
469 void UpdateContentState();
471 void UpdateFileItemStreamDetails(
CFileItem& item);
473 bool m_players_created;
477 bool m_bAbortRequest;
479 bool m_bCloseRequest;
481 ECacheState m_caching;
484 std::unique_ptr<CProcessInfo> m_processInfo;
494 std::vector<ProgramInfo> m_programs;
498 mutable CCriticalSection m_section;
500 std::vector<ProgramInfo> m_programs;
501 int m_videoIndex{-1};
502 int m_audioIndex{-1};
503 int m_subtitleIndex{-1};
507 int m_streamPlayerSpeed;
508 int m_demuxerSpeed = DVD_PLAYSPEED_NORMAL;
520 std::unique_ptr<CJobQueue> m_outboundEvents;
527 std::unique_ptr<CVideoPlayerAudioID3> m_VideoPlayerAudioID3;
532 std::shared_ptr<CDVDInputStream> m_pInputStream;
533 std::unique_ptr<CDVDDemux> m_pDemuxer;
534 std::shared_ptr<CDVDDemux> m_pSubtitleDemuxer;
535 std::unordered_map<int64_t, std::shared_ptr<CDVDDemux>> m_subtitleDemuxerMap;
536 std::unique_ptr<CDVDDemuxCC> m_pCCDemuxer;
544 state = DVDSTATE_NORMAL;
545 iSelectedSPUStream = -1;
546 iSelectedAudioStream = -1;
547 iSelectedVideoStream = -1;
548 iDVDStillTime = std::chrono::milliseconds::zero();
549 iDVDStillStartTime = {};
555 std::chrono::milliseconds
557 std::chrono::time_point<std::chrono::steady_clock>
559 int iSelectedSPUStream;
560 int iSelectedAudioStream;
561 int iSelectedVideoStream;
565 mutable CCriticalSection m_StateSection;
569 bool m_SkipCommercials;
574 bool m_UpdateStreamDetails;
576 std::atomic<bool> m_displayLost;
Definition: IVideoPlayer.h:28
Definition: DVDDemux.h:220
Definition: StreamInfo.h:65
Definition: DVDStreamInfo.h:25
Definition: IVideoPlayer.h:36
Definition: VideoPlayer.h:540
Definition: VideoPlayer.h:35
Definition: DispResource.h:26
Definition: VideoPlayer.h:253
Definition: RenderInfo.h:19
Definition: VideoPlayerRadioRDS.h:36
Definition: VideoPlayer.h:496
Definition: DVDMessageQueue.h:48
Definition: VideoPlayerSubtitle.h:24
Definition: IVideoPlayer.h:75
Definition: VideoPlayer.h:108
Definition: SystemClock.h:31
Definition: StreamInfo.h:55
Definition: DVDDemux.h:156
Definition: VideoPlayer.h:179
Definition: VideoPlayer.h:509
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:204
Definition: ProcessInfo.h:26
Definition: IPlayerCallback.h:18
Definition: settings.py:1
Definition: DVDClock.h:18
Definition: VideoPlayer.h:241
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